Update January 30, 2025 (#142)
This commit is contained in:
79
ozon/fbo.go
79
ozon/fbo.go
@@ -1080,3 +1080,82 @@ func (c FBO) GetDraftTimeslots(ctx context.Context, params *GetDraftTimeslotsPar
|
|||||||
|
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type CancelSuppyOrderParams struct {
|
||||||
|
// Supply request identifier
|
||||||
|
OrderId int64 `json:"order_id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type CancelSuppyOrderResponse struct {
|
||||||
|
core.CommonResponse
|
||||||
|
|
||||||
|
// Operation identifier for canceling the request
|
||||||
|
OperationId string `json:"operation_id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cancel supply request
|
||||||
|
func (c FBO) CancelSuppyOrder(ctx context.Context, params *CancelSuppyOrderParams) (*CancelSuppyOrderResponse, error) {
|
||||||
|
url := "/v1/supply-order/cancel"
|
||||||
|
|
||||||
|
resp := &CancelSuppyOrderResponse{}
|
||||||
|
|
||||||
|
response, err := c.client.Request(ctx, http.MethodGet, url, params, resp, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
response.CopyCommonResponse(&resp.CommonResponse)
|
||||||
|
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type StatusCancelledSupplyOrderParams struct {
|
||||||
|
// Operation identifier for canceling the supply request
|
||||||
|
OperationId string `json:"operation_id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type StatusCancelledSupplyOrderResponse struct {
|
||||||
|
core.CommonResponse
|
||||||
|
|
||||||
|
// Reason why the supply request can't be canceled
|
||||||
|
ErrorReasons []string `json:"error_reasons"`
|
||||||
|
|
||||||
|
// Details on supply request cancellation
|
||||||
|
Result StatusCancelledSupplyOrderResult `json:"result"`
|
||||||
|
|
||||||
|
// Cancellation status of the supply request
|
||||||
|
Status string `json:"status"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type StatusCancelledSupplyOrderResult struct {
|
||||||
|
// true, if supply request is canceled
|
||||||
|
IsOrderCancelled bool `json:"is_order_cancelled"`
|
||||||
|
|
||||||
|
// List of canceled supplies
|
||||||
|
Supplies []StatusCancelledSupplyOrderSupply `json:"supplies"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type StatusCancelledSupplyOrderSupply struct {
|
||||||
|
// Reason why supplies can't be canceled
|
||||||
|
ErrorReasons []string `json:"error_reasons"`
|
||||||
|
|
||||||
|
// true, if supply is canceled
|
||||||
|
IsSupplyCancelled bool `json:"is_supply_cancelled"`
|
||||||
|
|
||||||
|
// Supply identifier
|
||||||
|
SupplyId int64 `json:"supply_id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get status of canceled supply request
|
||||||
|
func (c FBO) StatusCancelledSupplyOrder(ctx context.Context, params *StatusCancelledSupplyOrderParams) (*StatusCancelledSupplyOrderResponse, error) {
|
||||||
|
url := "/v1/supply-order/cancel/status"
|
||||||
|
|
||||||
|
resp := &StatusCancelledSupplyOrderResponse{}
|
||||||
|
|
||||||
|
response, err := c.client.Request(ctx, http.MethodGet, url, params, resp, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
response.CopyCommonResponse(&resp.CommonResponse)
|
||||||
|
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
|||||||
115
ozon/fbo_test.go
115
ozon/fbo_test.go
@@ -1208,3 +1208,118 @@ func TestGetDraftTimeslots(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCancelSuppyOrder(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
statusCode int
|
||||||
|
headers map[string]string
|
||||||
|
params *CancelSuppyOrderParams
|
||||||
|
response string
|
||||||
|
}{
|
||||||
|
// Test Ok
|
||||||
|
{
|
||||||
|
http.StatusOK,
|
||||||
|
map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"},
|
||||||
|
&CancelSuppyOrderParams{
|
||||||
|
OrderId: 11,
|
||||||
|
},
|
||||||
|
`{
|
||||||
|
"operation_id": "string"
|
||||||
|
}`,
|
||||||
|
},
|
||||||
|
// Test No Client-Id or Api-Key
|
||||||
|
{
|
||||||
|
http.StatusUnauthorized,
|
||||||
|
map[string]string{},
|
||||||
|
&CancelSuppyOrderParams{},
|
||||||
|
`{
|
||||||
|
"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.FBO().CancelSuppyOrder(ctx, test.params)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
compareJsonResponse(t, test.response, &CancelSuppyOrderResponse{})
|
||||||
|
|
||||||
|
if resp.StatusCode != test.statusCode {
|
||||||
|
t.Errorf("got wrong status code: got: %d, expected: %d", resp.StatusCode, test.statusCode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestStatusCancelledSupplyOrder(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
statusCode int
|
||||||
|
headers map[string]string
|
||||||
|
params *StatusCancelledSupplyOrderParams
|
||||||
|
response string
|
||||||
|
}{
|
||||||
|
// Test Ok
|
||||||
|
{
|
||||||
|
http.StatusOK,
|
||||||
|
map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"},
|
||||||
|
&StatusCancelledSupplyOrderParams{
|
||||||
|
OperationId: "123",
|
||||||
|
},
|
||||||
|
`{
|
||||||
|
"error_reasons": [
|
||||||
|
"INVALID_ORDER_STATE"
|
||||||
|
],
|
||||||
|
"result": {
|
||||||
|
"is_order_cancelled": true,
|
||||||
|
"supplies": [
|
||||||
|
{
|
||||||
|
"error_reasons": [
|
||||||
|
"INVALID_SUPPLY_STATE"
|
||||||
|
],
|
||||||
|
"is_supply_cancelled": true,
|
||||||
|
"supply_id": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"status": "SUCCESS"
|
||||||
|
}`,
|
||||||
|
},
|
||||||
|
// Test No Client-Id or Api-Key
|
||||||
|
{
|
||||||
|
http.StatusUnauthorized,
|
||||||
|
map[string]string{},
|
||||||
|
&StatusCancelledSupplyOrderParams{},
|
||||||
|
`{
|
||||||
|
"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.FBO().StatusCancelledSupplyOrder(ctx, test.params)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
compareJsonResponse(t, test.response, &StatusCancelledSupplyOrderResponse{})
|
||||||
|
|
||||||
|
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