Update January 17, 2025 (#141)
This commit is contained in:
		
							
								
								
									
										39
									
								
								ozon/fbs.go
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								ozon/fbs.go
									
									
									
									
									
								
							@@ -154,6 +154,9 @@ type FBSPosting struct {
 | 
			
		||||
	// Number of the parent shipment which split resulted in the current shipment
 | 
			
		||||
	ParentPostingNumber string `json:"parent_posting_number"`
 | 
			
		||||
 | 
			
		||||
	// Date and time of successful verification of the courier code
 | 
			
		||||
	PickupCodeVerifiedAt time.Time `json:"pickup_code_verified_at"`
 | 
			
		||||
 | 
			
		||||
	// Shipment number
 | 
			
		||||
	PostingNumber string `json:"posting_number"`
 | 
			
		||||
 | 
			
		||||
@@ -1016,6 +1019,9 @@ type GetShipmentDataByIdentifierResult struct {
 | 
			
		||||
	// Shipment number
 | 
			
		||||
	PostingNumber string `json:"posting_number"`
 | 
			
		||||
 | 
			
		||||
	// Date and time of successful verification of the courier code
 | 
			
		||||
	PickupCodeVerifiedAt time.Time `json:"pickup_code_verified_at"`
 | 
			
		||||
 | 
			
		||||
	// Information on products and their instances.
 | 
			
		||||
	//
 | 
			
		||||
	// The response contains the field product_exemplars, if the attribute with.product_exemplars = true is passed in the request
 | 
			
		||||
@@ -1027,6 +1033,9 @@ type GetShipmentDataByIdentifierResult struct {
 | 
			
		||||
	// Delivery service status
 | 
			
		||||
	ProviderStatus string `json:"provider_status"`
 | 
			
		||||
 | 
			
		||||
	// Previous sub-status of the shipment
 | 
			
		||||
	PreviousSubstatus string `json:"previous_substatus"`
 | 
			
		||||
 | 
			
		||||
	// Information on lifting service. Only relevant for bulky products
 | 
			
		||||
	// with a delivery by a third-party or integrated service
 | 
			
		||||
	PRROption GetShipmentDataByIdentifierResultPRROption `json:"prr_option"`
 | 
			
		||||
@@ -3271,3 +3280,33 @@ func (c FBS) DeleteShipment(ctx context.Context, params *DeleteShipmentParams) (
 | 
			
		||||
 | 
			
		||||
	return resp, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type VerifyCourierCodeParams struct {
 | 
			
		||||
	// Courier code
 | 
			
		||||
	PickupCode string `json:"pickup_code"`
 | 
			
		||||
 | 
			
		||||
	// Shipment number
 | 
			
		||||
	PostingNumber string `json:"posting_number"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type VerifyCourierCodeResponse struct {
 | 
			
		||||
	core.CommonResponse
 | 
			
		||||
 | 
			
		||||
	// true, if the code is correct
 | 
			
		||||
	Valid bool `json:"valid"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Use this method to verify the courier code when handing over realFBS Express shipments
 | 
			
		||||
func (c FBS) VerifyCourierCode(ctx context.Context, params *VerifyCourierCodeParams) (*VerifyCourierCodeResponse, error) {
 | 
			
		||||
	url := "/v1/posting/fbs/pick-up-code/verify"
 | 
			
		||||
 | 
			
		||||
	resp := &VerifyCourierCodeResponse{}
 | 
			
		||||
 | 
			
		||||
	response, err := c.client.Request(ctx, http.MethodPost, url, params, resp, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	response.CopyCommonResponse(&resp.CommonResponse)
 | 
			
		||||
 | 
			
		||||
	return resp, nil
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -43,6 +43,7 @@ func TestListUnprocessedShipments(t *testing.T) {
 | 
			
		||||
					  "posting_number": "23713478-0018-3",
 | 
			
		||||
					  "order_id": 559293114,
 | 
			
		||||
					  "order_number": "33713378-0051",
 | 
			
		||||
					  "pickup_code_verified_at": "2025-01-17T11:03:00.124Z",
 | 
			
		||||
					  "status": "awaiting_packaging",
 | 
			
		||||
					  "delivery_method": {
 | 
			
		||||
						"id": 15110442724000,
 | 
			
		||||
@@ -238,6 +239,7 @@ func TestGetFBSShipmentsList(t *testing.T) {
 | 
			
		||||
					  "posting_number": "05708065-0029-1",
 | 
			
		||||
					  "order_id": 680420041,
 | 
			
		||||
					  "order_number": "05708065-0029",
 | 
			
		||||
					  "pickup_code_verified_at": "2025-01-17T10:59:26.614Z",
 | 
			
		||||
					  "status": "awaiting_deliver",
 | 
			
		||||
					  "substatus": "posting_awaiting_passport_data",
 | 
			
		||||
					  "delivery_method": {
 | 
			
		||||
@@ -301,7 +303,7 @@ func TestGetFBSShipmentsList(t *testing.T) {
 | 
			
		||||
				  ],
 | 
			
		||||
				  "has_next": true
 | 
			
		||||
				}
 | 
			
		||||
			}`,
 | 
			
		||||
				}`,
 | 
			
		||||
		},
 | 
			
		||||
		// Test No Client-Id or Api-Key
 | 
			
		||||
		{
 | 
			
		||||
@@ -591,8 +593,10 @@ func TestGetShipmentDataByIdentifier(t *testing.T) {
 | 
			
		||||
				  "posting_number": "57195475-0050-3",
 | 
			
		||||
				  "order_id": 438764970,
 | 
			
		||||
				  "order_number": "57195475-0050",
 | 
			
		||||
				  "pickup_code_verified_at": "2025-01-17T11:04:59.958Z",
 | 
			
		||||
				  "status": "awaiting_packaging",
 | 
			
		||||
				  "substatus": "posting_awaiting_passport_data",
 | 
			
		||||
				  "previous_substatus": "posting_transferring_to_delivery",
 | 
			
		||||
				  "delivery_method": {
 | 
			
		||||
					"id": 18114520187000,
 | 
			
		||||
					"name": "Ozon Логистика самостоятельно, Москва",
 | 
			
		||||
@@ -3371,3 +3375,54 @@ func TestDeleteShipment(t *testing.T) {
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestVerifyCourierCode(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		statusCode int
 | 
			
		||||
		headers    map[string]string
 | 
			
		||||
		params     *VerifyCourierCodeParams
 | 
			
		||||
		response   string
 | 
			
		||||
	}{
 | 
			
		||||
		// Test Ok
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusOK,
 | 
			
		||||
			map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"},
 | 
			
		||||
			&VerifyCourierCodeParams{
 | 
			
		||||
				PickupCode:    "string",
 | 
			
		||||
				PostingNumber: "string",
 | 
			
		||||
			},
 | 
			
		||||
			`{
 | 
			
		||||
				"valid": true
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		// Test No Client-Id or Api-Key
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusUnauthorized,
 | 
			
		||||
			map[string]string{},
 | 
			
		||||
			&VerifyCourierCodeParams{},
 | 
			
		||||
			`{
 | 
			
		||||
				"code": 16,
 | 
			
		||||
				"message": "Client-Id and Api-Key headers are required"
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, test := range tests {
 | 
			
		||||
		c := NewMockClient(core.NewMockHttpHandler(test.statusCode, test.response, test.headers))
 | 
			
		||||
 | 
			
		||||
		ctx, _ := context.WithTimeout(context.Background(), testTimeout)
 | 
			
		||||
		resp, err := c.FBS().VerifyCourierCode(ctx, test.params)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Error(err)
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		compareJsonResponse(t, test.response, &VerifyCourierCodeResponse{})
 | 
			
		||||
 | 
			
		||||
		if resp.StatusCode != test.statusCode {
 | 
			
		||||
			t.Errorf("got wrong status code: got: %d, expected: %d", resp.StatusCode, test.statusCode)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user