Compare commits
	
		
			4 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					e60a3f1ca2 | ||
| 
						 | 
					2f1dbd5c00 | ||
| 
						 | 
					387af0e30e | ||
| 
						 | 
					c1e7f2b370 | 
@@ -313,3 +313,67 @@ const (
 | 
			
		||||
	// delivery by the seller
 | 
			
		||||
	NonIntegratedTPLType TPLIntegrationType = "non_integrated"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type DetailsDeliveryItemName string
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	DirectFlowLogisticSumDetailsDeliveryItemName DetailsDeliveryItemName = "MarketplaceServiceItemDirectFlowLogisticSum"
 | 
			
		||||
	DropoffDetailsDeliveryItemName               DetailsDeliveryItemName = "MarketplaceServiceItemDropoff"
 | 
			
		||||
	DelivToCustomerDetailsDeliveryItemName       DetailsDeliveryItemName = "MarketplaceServiceItemDelivToCustomer"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type DetailsReturnServiceName string
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	ReturnAfterDelivToCustomerDetailsReturnServiceName DetailsReturnServiceName = "MarketplaceServiceItemReturnAfterDelivToCustomer"
 | 
			
		||||
	ReturnPartGoodsCustomerDetailsReturnServiceName    DetailsReturnServiceName = "MarketplaceServiceItemReturnPartGoodsCustomer"
 | 
			
		||||
	ReturnNotDelivToCustomerDetailsReturnServiceName   DetailsReturnServiceName = "MarketplaceServiceItemReturnNotDelivToCustomer"
 | 
			
		||||
	ReturnFlowLogisticDetailsReturnServiceName         DetailsReturnServiceName = "MarketplaceServiceItemReturnFlowLogistic"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type DetailsServiceItemName string
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	OtherMarketAndTech                          DetailsServiceItemName = "MarketplaceServiceItemOtherMarketAndTechService"
 | 
			
		||||
	ReturnStorageServiceAtThePickupPointFbsItem DetailsServiceItemName = "MarketplaceReturnStorageServiceAtThePickupPointFbsItem"
 | 
			
		||||
	SaleReviewsItem                             DetailsServiceItemName = "MarketplaceSaleReviewsItem"
 | 
			
		||||
	ServicePremiumCashbackIndividualPoints      DetailsServiceItemName = "MarketplaceServicePremiumCashbackIndividualPoints"
 | 
			
		||||
	ServiceStorageItem                          DetailsServiceItemName = "MarketplaceServiceStorageItem"
 | 
			
		||||
	ServiceStockDisposal                        DetailsServiceItemName = "MarketplaceServiceStockDisposal"
 | 
			
		||||
	ReturnDisposalServiceFbsItem                DetailsServiceItemName = "MarketplaceReturnDisposalServiceFbsItem"
 | 
			
		||||
	ServiceItemFlexiblePaymentSchedule          DetailsServiceItemName = "MarketplaceServiceItemFlexiblePaymentSchedule"
 | 
			
		||||
	ServiceProcessingSpoilage                   DetailsServiceItemName = "MarketplaceServiceProcessingSpoilage"
 | 
			
		||||
	ServiceProcessingIdentifiedSurplus          DetailsServiceItemName = "MarketplaceServiceProcessingIdentifiedSurplus"
 | 
			
		||||
	ServiceProcessingIdentifiedDiscrepancies    DetailsServiceItemName = "MarketplaceServiceProcessingIdentifiedDiscrepancies"
 | 
			
		||||
	ServiceItemInternetSiteAdvertising          DetailsServiceItemName = "MarketplaceServiceItemInternetSiteAdvertising"
 | 
			
		||||
	ServiceItemPremiumSubscribtion              DetailsServiceItemName = "MarketplaceServiceItemPremiumSubscribtion"
 | 
			
		||||
	AgencyFeeAggregator3PLGlobalItem            DetailsServiceItemName = "MarketplaceAgencyFeeAggregator3PLGlobalItem"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type DetailsOtherItemName string
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	RedistributionOfAcquiringOperation                   DetailsOtherItemName = "MarketplaceRedistributionOfAcquiringOperation"
 | 
			
		||||
	CompensationLossOfGoodsOperation                     DetailsOtherItemName = "MarketplaceSellerCompensationLossOfGoodsOperation"
 | 
			
		||||
	CorrectionOperation                                  DetailsOtherItemName = "MarketplaceSellerCorrectionOperation"
 | 
			
		||||
	OperationCorrectionSeller                            DetailsOtherItemName = "OperationCorrectionSeller"
 | 
			
		||||
	OperationMarketplaceWithHoldingForUndeliverableGoods DetailsOtherItemName = "OperationMarketplaceWithHoldingForUndeliverableGoods"
 | 
			
		||||
	OperationClaim                                       DetailsOtherItemName = "OperationClaim"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type StrategyType string
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	MinExtPrice StrategyType = "MIN_EXT_PRICE"
 | 
			
		||||
	CompPrice   StrategyType = "COMP_PRICE"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type StrategyUpdateType string
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	StrategyEnabled          StrategyUpdateType = "strategyEnabled"
 | 
			
		||||
	StrategyDisabled         StrategyUpdateType = "strategyDisabled"
 | 
			
		||||
	StrategyChanged          StrategyUpdateType = "strategyChanged"
 | 
			
		||||
	StrategyCreated          StrategyUpdateType = "strategyCreated"
 | 
			
		||||
	StrategyItemsListChanged StrategyUpdateType = "strategyItemsListChanged"
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										49
									
								
								ozon/fbo.go
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								ozon/fbo.go
									
									
									
									
									
								
							@@ -470,3 +470,52 @@ func (c FBO) ListProductsInSupplyRequest(params *ListProductsInSupplyRequestPara
 | 
			
		||||
 | 
			
		||||
	return resp, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type GetWarehouseWorkloadResponse struct {
 | 
			
		||||
	core.CommonResponse
 | 
			
		||||
 | 
			
		||||
	// Method result
 | 
			
		||||
	Result []struct {
 | 
			
		||||
		// Workload
 | 
			
		||||
		Schedule struct {
 | 
			
		||||
			// Data on the products quantity supplied to the warehouse
 | 
			
		||||
			Capacity []struct {
 | 
			
		||||
				// Period start, local time
 | 
			
		||||
				Start time.Time `json:"start"`
 | 
			
		||||
 | 
			
		||||
				// Period end, local time
 | 
			
		||||
				End time.Time `json:"end"`
 | 
			
		||||
 | 
			
		||||
				// Average number of products that the warehouse can accept per day for the period
 | 
			
		||||
				Value int32 `json:"value"`
 | 
			
		||||
			} `json:"capacity"`
 | 
			
		||||
 | 
			
		||||
			// The closest available date for supply, local time
 | 
			
		||||
			Date time.Time `json:"date"`
 | 
			
		||||
		} `json:"schedule"`
 | 
			
		||||
 | 
			
		||||
		// Warehouse
 | 
			
		||||
		Warehouse struct {
 | 
			
		||||
			// Warehouse identifier
 | 
			
		||||
			Id string `json:"id"`
 | 
			
		||||
 | 
			
		||||
			// Warehouse name
 | 
			
		||||
			Name string `json:"name"`
 | 
			
		||||
		} `json:"warehouse"`
 | 
			
		||||
	} `json:"result"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Method returns a list of active Ozon warehouses with information about their average workload in the nearest future
 | 
			
		||||
func (c FBO) GetWarehouseWorkload() (*GetWarehouseWorkloadResponse, error) {
 | 
			
		||||
	url := "/v1/supplier/available_warehouses"
 | 
			
		||||
 | 
			
		||||
	resp := &GetWarehouseWorkloadResponse{}
 | 
			
		||||
 | 
			
		||||
	response, err := c.client.Request(http.MethodGet, url, nil, resp, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	response.CopyCommonResponse(&resp.CommonResponse)
 | 
			
		||||
 | 
			
		||||
	return resp, nil
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -482,3 +482,61 @@ func TestListProductsInSupplyRequest(t *testing.T) {
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestGetWarehouseWorkload(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		statusCode int
 | 
			
		||||
		headers    map[string]string
 | 
			
		||||
		response   string
 | 
			
		||||
	}{
 | 
			
		||||
		// Test Ok
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusOK,
 | 
			
		||||
			map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"},
 | 
			
		||||
			`{
 | 
			
		||||
				"result": [
 | 
			
		||||
				  {
 | 
			
		||||
					"schedule": {
 | 
			
		||||
					  "capacity": [
 | 
			
		||||
						{
 | 
			
		||||
						  "start": "2019-08-24T14:15:22Z",
 | 
			
		||||
						  "end": "2019-08-24T14:15:22Z",
 | 
			
		||||
						  "value": 0
 | 
			
		||||
						}
 | 
			
		||||
					  ],
 | 
			
		||||
					  "date": "2019-08-24T14:15:22Z"
 | 
			
		||||
					},
 | 
			
		||||
					"warehouse": {
 | 
			
		||||
					  "id": "string",
 | 
			
		||||
					  "name": "string"
 | 
			
		||||
					}
 | 
			
		||||
				  }
 | 
			
		||||
				]
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		// Test No Client-Id or Api-Key
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusUnauthorized,
 | 
			
		||||
			map[string]string{},
 | 
			
		||||
			`{
 | 
			
		||||
				"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))
 | 
			
		||||
 | 
			
		||||
		resp, err := c.FBO().GetWarehouseWorkload()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Error(err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if resp.StatusCode != test.statusCode {
 | 
			
		||||
			t.Errorf("got wrong status code: got: %d, expected: %d", resp.StatusCode, test.statusCode)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -30,6 +30,7 @@ type Client struct {
 | 
			
		||||
	brands        *Brands
 | 
			
		||||
	chats         *Chats
 | 
			
		||||
	certificates  *Certificates
 | 
			
		||||
	strategies    *Strategies
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c Client) Analytics() *Analytics {
 | 
			
		||||
@@ -100,6 +101,10 @@ func (c Client) Certificates() *Certificates {
 | 
			
		||||
	return c.certificates
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c Client) Strategies() *Strategies {
 | 
			
		||||
	return c.strategies
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewClient(clientId, apiKey string) *Client {
 | 
			
		||||
	coreClient := core.NewClient(DefaultAPIBaseUrl, map[string]string{
 | 
			
		||||
		"Client-Id": clientId,
 | 
			
		||||
@@ -125,6 +130,7 @@ func NewClient(clientId, apiKey string) *Client {
 | 
			
		||||
		brands:        &Brands{client: coreClient},
 | 
			
		||||
		chats:         &Chats{client: coreClient},
 | 
			
		||||
		certificates:  &Certificates{client: coreClient},
 | 
			
		||||
		strategies:    &Strategies{client: coreClient},
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -150,5 +156,6 @@ func NewMockClient(handler http.HandlerFunc) *Client {
 | 
			
		||||
		brands:        &Brands{client: coreClient},
 | 
			
		||||
		chats:         &Chats{client: coreClient},
 | 
			
		||||
		certificates:  &Certificates{client: coreClient},
 | 
			
		||||
		strategies:    &Strategies{client: coreClient},
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2126,3 +2126,59 @@ func (c Products) NumberOfSubsToProductAvailability(params *NumberOfSubsToProduc
 | 
			
		||||
 | 
			
		||||
	return resp, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type UpdateCharacteristicsParams struct {
 | 
			
		||||
	// Products and characteristics to be updated
 | 
			
		||||
	Items []UpdateCharacteristicsItem `json:"items"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type UpdateCharacteristicsItem struct {
 | 
			
		||||
	// Product characteristics
 | 
			
		||||
	Attributes []UpdateCharacteristicsItemAttribute `json:"attributes"`
 | 
			
		||||
 | 
			
		||||
	// Product ID
 | 
			
		||||
	OfferId string `json:"offer_id"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type UpdateCharacteristicsItemAttribute struct {
 | 
			
		||||
	// Identifier of the characteristic that supports nested properties.
 | 
			
		||||
	// Each of the nested characteristics can have multiple value variants
 | 
			
		||||
	ComplexId int64 `json:"complex_id"`
 | 
			
		||||
 | 
			
		||||
	// Characteristic identifier
 | 
			
		||||
	Id int64 `json:"id"`
 | 
			
		||||
 | 
			
		||||
	// Array of nested characteristic values
 | 
			
		||||
	Values []UpdateCharacteristicsItemValue `json:"values"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type UpdateCharacteristicsItemValue struct {
 | 
			
		||||
	// Characteristic identifier in the dictionary
 | 
			
		||||
	DictionaryValueId int64 `json:"dictionary_value_id"`
 | 
			
		||||
 | 
			
		||||
	// Product characteristic value
 | 
			
		||||
	Value string `json:"value"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type UpdateCharacteristicsResponse struct {
 | 
			
		||||
	core.CommonResponse
 | 
			
		||||
 | 
			
		||||
	// Products update task code.
 | 
			
		||||
	//
 | 
			
		||||
	// To check the update status, pass the received value to the `/v1/product/import/info` method
 | 
			
		||||
	TaskId int64 `json:"task_id"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c Products) UpdateCharacteristics(params *UpdateCharacteristicsParams) (*UpdateCharacteristicsResponse, error) {
 | 
			
		||||
	url := "/v1/product/attributes/update"
 | 
			
		||||
 | 
			
		||||
	resp := &UpdateCharacteristicsResponse{}
 | 
			
		||||
 | 
			
		||||
	response, err := c.client.Request(http.MethodPost, url, params, resp, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	response.CopyCommonResponse(&resp.CommonResponse)
 | 
			
		||||
 | 
			
		||||
	return resp, nil
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2487,3 +2487,65 @@ func TestNumberOfSubsToProductAvailability(t *testing.T) {
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestUpdateCharacteristics(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		statusCode int
 | 
			
		||||
		headers    map[string]string
 | 
			
		||||
		params     *UpdateCharacteristicsParams
 | 
			
		||||
		response   string
 | 
			
		||||
	}{
 | 
			
		||||
		// Test Ok
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusOK,
 | 
			
		||||
			map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"},
 | 
			
		||||
			&UpdateCharacteristicsParams{
 | 
			
		||||
				Items: []UpdateCharacteristicsItem{
 | 
			
		||||
					{
 | 
			
		||||
						Attributes: []UpdateCharacteristicsItemAttribute{
 | 
			
		||||
							{
 | 
			
		||||
								ComplexId: 0,
 | 
			
		||||
								Id:        0,
 | 
			
		||||
								Values: []UpdateCharacteristicsItemValue{
 | 
			
		||||
									{
 | 
			
		||||
										DictionaryValueId: 0,
 | 
			
		||||
										Value:             "string",
 | 
			
		||||
									},
 | 
			
		||||
								},
 | 
			
		||||
							},
 | 
			
		||||
						},
 | 
			
		||||
						OfferId: "string",
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
			`{
 | 
			
		||||
				"task_id": 0
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		// Test No Client-Id or Api-Key
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusUnauthorized,
 | 
			
		||||
			map[string]string{},
 | 
			
		||||
			&UpdateCharacteristicsParams{},
 | 
			
		||||
			`{
 | 
			
		||||
				"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))
 | 
			
		||||
 | 
			
		||||
		resp, err := c.Products().UpdateCharacteristics(test.params)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Error(err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if resp.StatusCode != test.statusCode {
 | 
			
		||||
			t.Errorf("got wrong status code: got: %d, expected: %d", resp.StatusCode, test.statusCode)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -159,6 +159,9 @@ type GetFinancialReportParams struct {
 | 
			
		||||
	// Number of the page returned in the request
 | 
			
		||||
	Page int64 `json:"page"`
 | 
			
		||||
 | 
			
		||||
	// true, если нужно добавить дополнительные параметры в ответ
 | 
			
		||||
	WithDetails bool `json:"with_details"`
 | 
			
		||||
 | 
			
		||||
	// Number of items on the page
 | 
			
		||||
	PageSize int64 `json:"page_size"`
 | 
			
		||||
}
 | 
			
		||||
@@ -209,6 +212,99 @@ type GetFinancialReportResponse struct {
 | 
			
		||||
			CurrencyCode string `json:"currency_code"`
 | 
			
		||||
		} `json:"cash_flows"`
 | 
			
		||||
 | 
			
		||||
		// Detailed info
 | 
			
		||||
		Details struct {
 | 
			
		||||
			// Balance on the beginning of period
 | 
			
		||||
			BeginBalanceAmount float64 `json:"begin_balance_amount"`
 | 
			
		||||
 | 
			
		||||
			// Orders
 | 
			
		||||
			Delivery struct {
 | 
			
		||||
				Total float64 `json:"total"`
 | 
			
		||||
 | 
			
		||||
				Amount float64 `json:"amount"`
 | 
			
		||||
 | 
			
		||||
				DeliveryServices struct {
 | 
			
		||||
					Total float64 `json:"total"`
 | 
			
		||||
 | 
			
		||||
					Items []struct {
 | 
			
		||||
						Name DetailsDeliveryItemName `json:"name"`
 | 
			
		||||
 | 
			
		||||
						Price float64 `json:"price"`
 | 
			
		||||
					} `json:"items"`
 | 
			
		||||
				} `json:"delivery_services"`
 | 
			
		||||
			} `json:"delivery"`
 | 
			
		||||
 | 
			
		||||
			InvoiceTransfer float64 `json:"invoice_transfer"`
 | 
			
		||||
 | 
			
		||||
			Loan float64 `json:"loan"`
 | 
			
		||||
 | 
			
		||||
			Payments []struct {
 | 
			
		||||
				CurrencyCode string `json:"currency_code"`
 | 
			
		||||
 | 
			
		||||
				Payment float64 `json:"payment"`
 | 
			
		||||
			} `json:"payments"`
 | 
			
		||||
 | 
			
		||||
			Period struct {
 | 
			
		||||
				Begin time.Time `json:"begin"`
 | 
			
		||||
 | 
			
		||||
				End time.Time `json:"end"`
 | 
			
		||||
 | 
			
		||||
				Id int64 `json:"id"`
 | 
			
		||||
			} `json:"period"`
 | 
			
		||||
 | 
			
		||||
			Return struct {
 | 
			
		||||
				Total float64 `json:"total"`
 | 
			
		||||
 | 
			
		||||
				Amount float64 `json:"amount"`
 | 
			
		||||
 | 
			
		||||
				ReturnServices struct {
 | 
			
		||||
					Total float64 `json:"total"`
 | 
			
		||||
 | 
			
		||||
					Items []struct {
 | 
			
		||||
						Name DetailsReturnServiceName `json:"name"`
 | 
			
		||||
 | 
			
		||||
						Price float64 `json:"price"`
 | 
			
		||||
					} `json:"items"`
 | 
			
		||||
				} `json:"return_services"`
 | 
			
		||||
			} `json:"return"`
 | 
			
		||||
 | 
			
		||||
			RFBS struct {
 | 
			
		||||
				Total float64 `json:"total"`
 | 
			
		||||
 | 
			
		||||
				TransferDelivery float64 `json:"transfer_delivery"`
 | 
			
		||||
 | 
			
		||||
				TransferDeliveryReturn float64 `json:"transfer_delivery_return"`
 | 
			
		||||
 | 
			
		||||
				CompensationDeliveryReturn float64 `json:"compensation_delivery_return"`
 | 
			
		||||
 | 
			
		||||
				PartialCompensation float64 `json:"partial_compensation"`
 | 
			
		||||
 | 
			
		||||
				PartialCompensationReturn float64 `json:"partial_compensation_return"`
 | 
			
		||||
			} `json:"rfbs"`
 | 
			
		||||
 | 
			
		||||
			Services struct {
 | 
			
		||||
				Total float64 `json:"total"`
 | 
			
		||||
 | 
			
		||||
				Items []struct {
 | 
			
		||||
					Name DetailsServiceItemName `json:"name"`
 | 
			
		||||
 | 
			
		||||
					Price float64 `json:"price"`
 | 
			
		||||
				} `json:"items"`
 | 
			
		||||
			} `json:"services"`
 | 
			
		||||
 | 
			
		||||
			Others struct {
 | 
			
		||||
				Total float64 `json:"total"`
 | 
			
		||||
 | 
			
		||||
				Items []struct {
 | 
			
		||||
					Name DetailsOtherItemName `json:"name"`
 | 
			
		||||
 | 
			
		||||
					Price float64 `json:"price"`
 | 
			
		||||
				} `json:"items"`
 | 
			
		||||
			} `json:"others"`
 | 
			
		||||
 | 
			
		||||
			EndBalanceAmount float64 `json:"end_balance_amount"`
 | 
			
		||||
		} `json:"details"`
 | 
			
		||||
 | 
			
		||||
		// Number of pages with reports
 | 
			
		||||
		PageCount int64 `json:"page_count"`
 | 
			
		||||
	} `json:"result"`
 | 
			
		||||
 
 | 
			
		||||
@@ -165,28 +165,98 @@ func TestGetFinancialReport(t *testing.T) {
 | 
			
		||||
					From: core.TimeFromString(t, "2006-01-02T15:04:05Z", "2022-01-01T00:00:00.000Z"),
 | 
			
		||||
					To:   core.TimeFromString(t, "2006-01-02T15:04:05Z", "2022-12-31T00:00:00.000Z"),
 | 
			
		||||
				},
 | 
			
		||||
				Page:     1,
 | 
			
		||||
				PageSize: 1,
 | 
			
		||||
				WithDetails: true,
 | 
			
		||||
				Page:        1,
 | 
			
		||||
				PageSize:    1,
 | 
			
		||||
			},
 | 
			
		||||
			`{
 | 
			
		||||
				"result": {
 | 
			
		||||
				  "cash_flows": [
 | 
			
		||||
					{
 | 
			
		||||
					  "period": {
 | 
			
		||||
						"id": 11567022278500,
 | 
			
		||||
						"begin": "2022-08-01T00:00:00Z",
 | 
			
		||||
						"end": "2022-08-15T00:00:00Z"
 | 
			
		||||
					  },
 | 
			
		||||
					  "orders_amount": 1000,
 | 
			
		||||
					  "returns_amount": -3000,
 | 
			
		||||
					  "commission_amount": 1437,
 | 
			
		||||
					  "services_amount": 8471.28,
 | 
			
		||||
					  "currency_code": "string",
 | 
			
		||||
					  "item_delivery_and_return_amount": 1991,
 | 
			
		||||
					  "currency_code": "RUB"
 | 
			
		||||
					  "orders_amount": 1000,
 | 
			
		||||
					  "period": {
 | 
			
		||||
						"begin": "2023-04-03T09:12:10.239Z",
 | 
			
		||||
						"end": "2023-04-03T09:12:10.239Z",
 | 
			
		||||
						"id": 11567022278500
 | 
			
		||||
					  },
 | 
			
		||||
					  "returns_amount": -3000,
 | 
			
		||||
					  "services_amount": 8471.28
 | 
			
		||||
					}
 | 
			
		||||
				  ],
 | 
			
		||||
				  "page_count": 15
 | 
			
		||||
				}
 | 
			
		||||
				  "details": {
 | 
			
		||||
					"period": {
 | 
			
		||||
					  "begin": "2023-04-03T09:12:10.239Z",
 | 
			
		||||
					  "end": "2023-04-03T09:12:10.239Z",
 | 
			
		||||
					  "id": 11567022278500
 | 
			
		||||
					},
 | 
			
		||||
					"payments": [
 | 
			
		||||
					  {
 | 
			
		||||
						"payment": 0,
 | 
			
		||||
						"currency_code": "string"
 | 
			
		||||
					  }
 | 
			
		||||
					],
 | 
			
		||||
					"begin_balance_amount": 0,
 | 
			
		||||
					"delivery": {
 | 
			
		||||
					  "total": 0,
 | 
			
		||||
					  "amount": 0,
 | 
			
		||||
					  "delivery_services": {
 | 
			
		||||
						"total": 0,
 | 
			
		||||
						"items": [
 | 
			
		||||
						  {
 | 
			
		||||
							"name": "string",
 | 
			
		||||
							"price": 0
 | 
			
		||||
						  }
 | 
			
		||||
						]
 | 
			
		||||
					  }
 | 
			
		||||
					},
 | 
			
		||||
					"return": {
 | 
			
		||||
					  "total": 0,
 | 
			
		||||
					  "amount": 0,
 | 
			
		||||
					  "return_services": {
 | 
			
		||||
						"total": 0,
 | 
			
		||||
						"items": [
 | 
			
		||||
						  {
 | 
			
		||||
							"name": "string",
 | 
			
		||||
							"price": 0
 | 
			
		||||
						  }
 | 
			
		||||
						]
 | 
			
		||||
					  }
 | 
			
		||||
					},
 | 
			
		||||
					"loan": 0,
 | 
			
		||||
					"invoice_transfer": 0,
 | 
			
		||||
					"rfbs": {
 | 
			
		||||
					  "total": 0,
 | 
			
		||||
					  "transfer_delivery": 0,
 | 
			
		||||
					  "transfer_delivery_return": 0,
 | 
			
		||||
					  "compensation_delivery_return": 0,
 | 
			
		||||
					  "partial_compensation": 0,
 | 
			
		||||
					  "partial_compensation_return": 0
 | 
			
		||||
					},
 | 
			
		||||
					"services": {
 | 
			
		||||
					  "total": 0,
 | 
			
		||||
					  "items": [
 | 
			
		||||
						{
 | 
			
		||||
						  "name": "string",
 | 
			
		||||
						  "price": 0
 | 
			
		||||
						}
 | 
			
		||||
					  ]
 | 
			
		||||
					},
 | 
			
		||||
					"others": {
 | 
			
		||||
					  "total": 0,
 | 
			
		||||
					  "items": [
 | 
			
		||||
						{
 | 
			
		||||
						  "name": "string",
 | 
			
		||||
						  "price": 0
 | 
			
		||||
						}
 | 
			
		||||
					  ]
 | 
			
		||||
					},
 | 
			
		||||
					"end_balance_amount": 0
 | 
			
		||||
				  }
 | 
			
		||||
				},
 | 
			
		||||
				"page_count": 15
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		// Test No Client-Id or Api-Key
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										381
									
								
								ozon/strategies.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										381
									
								
								ozon/strategies.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,381 @@
 | 
			
		||||
package ozon
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"net/http"
 | 
			
		||||
 | 
			
		||||
	core "github.com/diphantxm/ozon-api-client"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type Strategies struct {
 | 
			
		||||
	client *core.Client
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ListCompetitorsParams struct {
 | 
			
		||||
	Page int64 `json:"page"`
 | 
			
		||||
 | 
			
		||||
	Limit int64 `json:"limit"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ListCompetitorsResponse struct {
 | 
			
		||||
	core.CommonResponse
 | 
			
		||||
 | 
			
		||||
	Competitors []struct {
 | 
			
		||||
		Name string `json:"name"`
 | 
			
		||||
 | 
			
		||||
		Id int64 `json:"id"`
 | 
			
		||||
	} `json:"competitors"`
 | 
			
		||||
 | 
			
		||||
	Total int32 `json:"total"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c Strategies) ListCompetitors(params *ListCompetitorsParams) (*ListCompetitorsResponse, error) {
 | 
			
		||||
	url := "/v1/pricing-strategy/competitors/list"
 | 
			
		||||
 | 
			
		||||
	resp := &ListCompetitorsResponse{}
 | 
			
		||||
 | 
			
		||||
	response, err := c.client.Request(http.MethodPost, url, params, resp, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	response.CopyCommonResponse(&resp.CommonResponse)
 | 
			
		||||
 | 
			
		||||
	return resp, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ListStrategiesParams struct {
 | 
			
		||||
	Page int64 `json:"page"`
 | 
			
		||||
 | 
			
		||||
	Limit int64 `json:"limit"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ListStrategiesResponse struct {
 | 
			
		||||
	core.CommonResponse
 | 
			
		||||
 | 
			
		||||
	Strategies []struct {
 | 
			
		||||
		Id string `json:"id"`
 | 
			
		||||
 | 
			
		||||
		Name string `json:"name"`
 | 
			
		||||
 | 
			
		||||
		Type StrategyType `json:"type"`
 | 
			
		||||
 | 
			
		||||
		UpdateType StrategyUpdateType `json:"update_type"`
 | 
			
		||||
 | 
			
		||||
		UpdatedAt string `json:"updated_at"`
 | 
			
		||||
 | 
			
		||||
		ProductsCount int64 `json:"products_count"`
 | 
			
		||||
 | 
			
		||||
		CompetitorsCount int64 `json:"competitors_count"`
 | 
			
		||||
 | 
			
		||||
		Enabled bool `json:"enabled"`
 | 
			
		||||
	} `json:"strategies"`
 | 
			
		||||
 | 
			
		||||
	Total int32 `json:"total"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c Strategies) List(params *ListStrategiesParams) (*ListStrategiesResponse, error) {
 | 
			
		||||
	url := "/v1/pricing-strategy/list"
 | 
			
		||||
 | 
			
		||||
	resp := &ListStrategiesResponse{}
 | 
			
		||||
 | 
			
		||||
	response, err := c.client.Request(http.MethodPost, url, params, resp, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	response.CopyCommonResponse(&resp.CommonResponse)
 | 
			
		||||
 | 
			
		||||
	return resp, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CreateStrategyParams struct {
 | 
			
		||||
	Competitors []CreateStrategyCompetitor `json:"competitors"`
 | 
			
		||||
 | 
			
		||||
	StrategyName string `json:"strategy_name"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CreateStrategyCompetitor struct {
 | 
			
		||||
	Coefficient float32 `json:"coefficient"`
 | 
			
		||||
 | 
			
		||||
	CompetitorId int64 `json:"competitor_id"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CreateStrategyResponse struct {
 | 
			
		||||
	core.CommonResponse
 | 
			
		||||
 | 
			
		||||
	Result struct {
 | 
			
		||||
		StrategyId string `json:"strategy_id"`
 | 
			
		||||
	} `json:"result"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c Strategies) Create(params *CreateStrategyParams) (*CreateStrategyResponse, error) {
 | 
			
		||||
	url := "/v1/pricing-strategy/create"
 | 
			
		||||
 | 
			
		||||
	resp := &CreateStrategyResponse{}
 | 
			
		||||
 | 
			
		||||
	response, err := c.client.Request(http.MethodPost, url, params, resp, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	response.CopyCommonResponse(&resp.CommonResponse)
 | 
			
		||||
 | 
			
		||||
	return resp, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type InfoStrategyParams struct {
 | 
			
		||||
	StrategyId string `json:"strategy_id"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type InfoStrategyResponse struct {
 | 
			
		||||
	core.CommonResponse
 | 
			
		||||
 | 
			
		||||
	Result struct {
 | 
			
		||||
		Competitors []CreateStrategyCompetitor `json:"competitors"`
 | 
			
		||||
 | 
			
		||||
		Enabled bool `json:"enabled"`
 | 
			
		||||
 | 
			
		||||
		Name string `json:"name"`
 | 
			
		||||
 | 
			
		||||
		Type StrategyType `json:"type"`
 | 
			
		||||
 | 
			
		||||
		UpdateType StrategyUpdateType `json:"update_type"`
 | 
			
		||||
	} `json:"result"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c Strategies) Info(params *InfoStrategyParams) (*InfoStrategyResponse, error) {
 | 
			
		||||
	url := "/v1/pricing-strategy/info"
 | 
			
		||||
 | 
			
		||||
	resp := &InfoStrategyResponse{}
 | 
			
		||||
 | 
			
		||||
	response, err := c.client.Request(http.MethodPost, url, params, resp, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	response.CopyCommonResponse(&resp.CommonResponse)
 | 
			
		||||
 | 
			
		||||
	return resp, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type UpdateStrategyParams struct {
 | 
			
		||||
	Competitors []CreateStrategyCompetitor `json:"competitors"`
 | 
			
		||||
 | 
			
		||||
	StrategyId string `json:"strategy_id"`
 | 
			
		||||
 | 
			
		||||
	StrategyName string `json:"strategy_name"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type UpdateStrategyResponse struct {
 | 
			
		||||
	core.CommonResponse
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c Strategies) Update(params *UpdateStrategyParams) (*UpdateStrategyResponse, error) {
 | 
			
		||||
	url := "/v1/pricing-strategy/update"
 | 
			
		||||
 | 
			
		||||
	resp := &UpdateStrategyResponse{}
 | 
			
		||||
 | 
			
		||||
	response, err := c.client.Request(http.MethodPost, url, params, resp, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	response.CopyCommonResponse(&resp.CommonResponse)
 | 
			
		||||
 | 
			
		||||
	return resp, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type AddProductsToStrategyParams struct {
 | 
			
		||||
	ProductId []int64 `json:"product_id"`
 | 
			
		||||
 | 
			
		||||
	StrategyId string `json:"strategy_id"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type AddProductsToStrategyResponse struct {
 | 
			
		||||
	core.CommonResponse
 | 
			
		||||
 | 
			
		||||
	Result struct {
 | 
			
		||||
		Errors []struct {
 | 
			
		||||
			Code string `json:"code"`
 | 
			
		||||
 | 
			
		||||
			Error string `json:"error"`
 | 
			
		||||
 | 
			
		||||
			ProductId int64 `json:"product_id"`
 | 
			
		||||
		} `json:"errors"`
 | 
			
		||||
 | 
			
		||||
		FailedProductCount int32 `json:"failed_product_count"`
 | 
			
		||||
	} `json:"result"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c Strategies) AddProducts(params *AddProductsToStrategyParams) (*AddProductsToStrategyResponse, error) {
 | 
			
		||||
	url := "/v1/pricing-strategy/products/add"
 | 
			
		||||
 | 
			
		||||
	resp := &AddProductsToStrategyResponse{}
 | 
			
		||||
 | 
			
		||||
	response, err := c.client.Request(http.MethodPost, url, params, resp, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	response.CopyCommonResponse(&resp.CommonResponse)
 | 
			
		||||
 | 
			
		||||
	return resp, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type GetStrategiesByProductIdsParams struct {
 | 
			
		||||
	ProductId []int64 `json:"product_id"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type GetStrategiesByProductIdsResponse struct {
 | 
			
		||||
	core.CommonResponse
 | 
			
		||||
 | 
			
		||||
	Result struct {
 | 
			
		||||
		ProductsInfo []struct {
 | 
			
		||||
			ProductId int64 `json:"product_id"`
 | 
			
		||||
 | 
			
		||||
			StrategyId string `json:"strategy_id"`
 | 
			
		||||
		} `json:"products_info"`
 | 
			
		||||
	} `json:"result"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c Strategies) GetByProductIds(params *GetStrategiesByProductIdsParams) (*GetStrategiesByProductIdsResponse, error) {
 | 
			
		||||
	url := "/v1/pricing-strategy/strategy-ids-by-product-ids"
 | 
			
		||||
 | 
			
		||||
	resp := &GetStrategiesByProductIdsResponse{}
 | 
			
		||||
 | 
			
		||||
	response, err := c.client.Request(http.MethodPost, url, params, resp, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	response.CopyCommonResponse(&resp.CommonResponse)
 | 
			
		||||
 | 
			
		||||
	return resp, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ListProductsInStrategyParams struct {
 | 
			
		||||
	StrategyId string `json:"strategy_id"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ListProductsInStrategyResponse struct {
 | 
			
		||||
	core.CommonResponse
 | 
			
		||||
 | 
			
		||||
	Result struct {
 | 
			
		||||
		ProductId []string `json:"product_id"`
 | 
			
		||||
	} `json:"result"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c Strategies) ListProducts(params *ListProductsInStrategyParams) (*ListProductsInStrategyResponse, error) {
 | 
			
		||||
	url := "/v1/pricing-strategy/products/list"
 | 
			
		||||
 | 
			
		||||
	resp := &ListProductsInStrategyResponse{}
 | 
			
		||||
 | 
			
		||||
	response, err := c.client.Request(http.MethodPost, url, params, resp, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	response.CopyCommonResponse(&resp.CommonResponse)
 | 
			
		||||
 | 
			
		||||
	return resp, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type GetCompetitorPriceParams struct {
 | 
			
		||||
	ProductId int64 `json:"product_id"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type GetCompetitorPriceResponse struct {
 | 
			
		||||
	core.CommonResponse
 | 
			
		||||
 | 
			
		||||
	Result struct {
 | 
			
		||||
		StrategyId string `json:"strategy_id"`
 | 
			
		||||
 | 
			
		||||
		IsEnabled bool `json:"is_enabled"`
 | 
			
		||||
 | 
			
		||||
		StrategyProductPrice int32 `json:"strategy_product_price"`
 | 
			
		||||
 | 
			
		||||
		PriceDownloadedAt string `json:"price_downloaded_at"`
 | 
			
		||||
 | 
			
		||||
		StrategyCompetitorId int64 `json:"strategy_competitor_id"`
 | 
			
		||||
 | 
			
		||||
		StrategyCompetitorProductURL string `json:"strategy_competitor_product_url"`
 | 
			
		||||
	} `json:"result"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c Strategies) GetCompetitorPrice(params *GetCompetitorPriceParams) (*GetCompetitorPriceResponse, error) {
 | 
			
		||||
	url := "/v1/pricing-strategy/product/info"
 | 
			
		||||
 | 
			
		||||
	resp := &GetCompetitorPriceResponse{}
 | 
			
		||||
 | 
			
		||||
	response, err := c.client.Request(http.MethodPost, url, params, resp, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	response.CopyCommonResponse(&resp.CommonResponse)
 | 
			
		||||
 | 
			
		||||
	return resp, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type RemoveProductsFromStrategyParams struct {
 | 
			
		||||
	ProductId []int64 `json:"product_id"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type RemoveProductsFromStrategyResponse struct {
 | 
			
		||||
	core.CommonResponse
 | 
			
		||||
 | 
			
		||||
	Result struct {
 | 
			
		||||
		FailedProductCount int32 `json:"failed_product_count"`
 | 
			
		||||
	} `json:"result"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c Strategies) RemoveProducts(params *RemoveProductsFromStrategyParams) (*RemoveProductsFromStrategyResponse, error) {
 | 
			
		||||
	url := "/v1/pricing-strategy/products/delete"
 | 
			
		||||
 | 
			
		||||
	resp := &RemoveProductsFromStrategyResponse{}
 | 
			
		||||
 | 
			
		||||
	response, err := c.client.Request(http.MethodPost, url, params, resp, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	response.CopyCommonResponse(&resp.CommonResponse)
 | 
			
		||||
 | 
			
		||||
	return resp, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ChangeStrategyStatusParams struct {
 | 
			
		||||
	Enabled bool `json:"enabled"`
 | 
			
		||||
 | 
			
		||||
	StrategyId string `json:"strategy_id"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ChangeStrategyStatusResponse struct {
 | 
			
		||||
	core.CommonResponse
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c Strategies) ChangeStatus(params *ChangeStrategyStatusParams) (*ChangeStrategyStatusResponse, error) {
 | 
			
		||||
	url := "/v1/pricing-strategy/status"
 | 
			
		||||
 | 
			
		||||
	resp := &ChangeStrategyStatusResponse{}
 | 
			
		||||
 | 
			
		||||
	response, err := c.client.Request(http.MethodPost, url, params, resp, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	response.CopyCommonResponse(&resp.CommonResponse)
 | 
			
		||||
 | 
			
		||||
	return resp, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type RemoveStrategyParams struct {
 | 
			
		||||
	StrategyId string `json:"strategy_id"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type RemoveStrategyResponse struct {
 | 
			
		||||
	core.CommonResponse
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c Strategies) Remove(params *RemoveStrategyParams) (*RemoveStrategyResponse, error) {
 | 
			
		||||
	url := "/v1/pricing-strategy/delete"
 | 
			
		||||
 | 
			
		||||
	resp := &RemoveStrategyResponse{}
 | 
			
		||||
 | 
			
		||||
	response, err := c.client.Request(http.MethodPost, url, params, resp, nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	response.CopyCommonResponse(&resp.CommonResponse)
 | 
			
		||||
 | 
			
		||||
	return resp, nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										668
									
								
								ozon/strategies_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										668
									
								
								ozon/strategies_test.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,668 @@
 | 
			
		||||
package ozon
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	core "github.com/diphantxm/ozon-api-client"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestListCompetitors(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		statusCode int
 | 
			
		||||
		headers    map[string]string
 | 
			
		||||
		params     *ListCompetitorsParams
 | 
			
		||||
		response   string
 | 
			
		||||
	}{
 | 
			
		||||
		// Test Ok
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusOK,
 | 
			
		||||
			map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"},
 | 
			
		||||
			&ListCompetitorsParams{
 | 
			
		||||
				Page:  1,
 | 
			
		||||
				Limit: 20,
 | 
			
		||||
			},
 | 
			
		||||
			`{
 | 
			
		||||
				"competitor": [
 | 
			
		||||
				  {
 | 
			
		||||
					"competitor_name": "string",
 | 
			
		||||
					"competitor_id": 0
 | 
			
		||||
				  }
 | 
			
		||||
				],
 | 
			
		||||
				"total": 0
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		// Test No Client-Id or Api-Key
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusUnauthorized,
 | 
			
		||||
			map[string]string{},
 | 
			
		||||
			&ListCompetitorsParams{},
 | 
			
		||||
			`{
 | 
			
		||||
				"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))
 | 
			
		||||
 | 
			
		||||
		resp, err := c.Strategies().ListCompetitors(test.params)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Error(err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if resp.StatusCode != test.statusCode {
 | 
			
		||||
			t.Errorf("got wrong status code: got: %d, expected: %d", resp.StatusCode, test.statusCode)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestListStrategies(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		statusCode int
 | 
			
		||||
		headers    map[string]string
 | 
			
		||||
		params     *ListStrategiesParams
 | 
			
		||||
		response   string
 | 
			
		||||
	}{
 | 
			
		||||
		// Test Ok
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusOK,
 | 
			
		||||
			map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"},
 | 
			
		||||
			&ListStrategiesParams{
 | 
			
		||||
				Page:  1,
 | 
			
		||||
				Limit: 20,
 | 
			
		||||
			},
 | 
			
		||||
			`{
 | 
			
		||||
				"strategies": [
 | 
			
		||||
				  {
 | 
			
		||||
					"strategy_id": "string",
 | 
			
		||||
					"strategy_name": "string",
 | 
			
		||||
					"type": "string",
 | 
			
		||||
					"update_type": "string",
 | 
			
		||||
					"updated_at": "string",
 | 
			
		||||
					"products_count": 0,
 | 
			
		||||
					"competitors_count": 0,
 | 
			
		||||
					"enabled": true
 | 
			
		||||
				  }
 | 
			
		||||
				],
 | 
			
		||||
				"total": 0
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		// Test No Client-Id or Api-Key
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusUnauthorized,
 | 
			
		||||
			map[string]string{},
 | 
			
		||||
			&ListStrategiesParams{},
 | 
			
		||||
			`{
 | 
			
		||||
				"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))
 | 
			
		||||
 | 
			
		||||
		resp, err := c.Strategies().List(test.params)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Error(err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if resp.StatusCode != test.statusCode {
 | 
			
		||||
			t.Errorf("got wrong status code: got: %d, expected: %d", resp.StatusCode, test.statusCode)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestCreateStrategy(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		statusCode int
 | 
			
		||||
		headers    map[string]string
 | 
			
		||||
		params     *CreateStrategyParams
 | 
			
		||||
		response   string
 | 
			
		||||
	}{
 | 
			
		||||
		// Test Ok
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusOK,
 | 
			
		||||
			map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"},
 | 
			
		||||
			&CreateStrategyParams{
 | 
			
		||||
				StrategyName: "New strategy",
 | 
			
		||||
				Competitors: []CreateStrategyCompetitor{
 | 
			
		||||
					{
 | 
			
		||||
						CompetitorId: 1008426,
 | 
			
		||||
						Coefficient:  1,
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						CompetitorId: 204,
 | 
			
		||||
						Coefficient:  1,
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						CompetitorId: 91,
 | 
			
		||||
						Coefficient:  1,
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						CompetitorId: 48,
 | 
			
		||||
						Coefficient:  1,
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
			`{
 | 
			
		||||
				"result": {
 | 
			
		||||
				  "id": "4f3a1d4c-5833-4f04-b69b-495cbc1f6f1c"
 | 
			
		||||
				}
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		// Test No Client-Id or Api-Key
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusUnauthorized,
 | 
			
		||||
			map[string]string{},
 | 
			
		||||
			&CreateStrategyParams{},
 | 
			
		||||
			`{
 | 
			
		||||
				"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))
 | 
			
		||||
 | 
			
		||||
		resp, err := c.Strategies().Create(test.params)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Error(err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if resp.StatusCode != test.statusCode {
 | 
			
		||||
			t.Errorf("got wrong status code: got: %d, expected: %d", resp.StatusCode, test.statusCode)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestInfoStrategy(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		statusCode int
 | 
			
		||||
		headers    map[string]string
 | 
			
		||||
		params     *InfoStrategyParams
 | 
			
		||||
		response   string
 | 
			
		||||
	}{
 | 
			
		||||
		// Test Ok
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusOK,
 | 
			
		||||
			map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"},
 | 
			
		||||
			&InfoStrategyParams{
 | 
			
		||||
				StrategyId: "1",
 | 
			
		||||
			},
 | 
			
		||||
			`{
 | 
			
		||||
				"result": {
 | 
			
		||||
				  "strategy_name": "test1",
 | 
			
		||||
				  "enabled": true,
 | 
			
		||||
				  "update_type": "strategyItemsListChanged",
 | 
			
		||||
				  "type": "COMP_PRICE",
 | 
			
		||||
				  "competitors": [
 | 
			
		||||
					{
 | 
			
		||||
					  "competitor_id": 204,
 | 
			
		||||
					  "coefficient": 1
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
					  "competitor_id": 1008426,
 | 
			
		||||
					  "coefficient": 1
 | 
			
		||||
					}
 | 
			
		||||
				  ]
 | 
			
		||||
				}
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		// Test No Client-Id or Api-Key
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusUnauthorized,
 | 
			
		||||
			map[string]string{},
 | 
			
		||||
			&InfoStrategyParams{},
 | 
			
		||||
			`{
 | 
			
		||||
				"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))
 | 
			
		||||
 | 
			
		||||
		resp, err := c.Strategies().Info(test.params)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Error(err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if resp.StatusCode != test.statusCode {
 | 
			
		||||
			t.Errorf("got wrong status code: got: %d, expected: %d", resp.StatusCode, test.statusCode)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestUpdateStrategy(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		statusCode int
 | 
			
		||||
		headers    map[string]string
 | 
			
		||||
		params     *UpdateStrategyParams
 | 
			
		||||
		response   string
 | 
			
		||||
	}{
 | 
			
		||||
		// Test Ok
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusOK,
 | 
			
		||||
			map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"},
 | 
			
		||||
			&UpdateStrategyParams{
 | 
			
		||||
				StrategyId:   "a3de1826-9c54-40f1-bb6d-1a9e2638b058",
 | 
			
		||||
				StrategyName: "New Strategy",
 | 
			
		||||
				Competitors: []CreateStrategyCompetitor{
 | 
			
		||||
					{
 | 
			
		||||
						CompetitorId: 1008426,
 | 
			
		||||
						Coefficient:  1,
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						CompetitorId: 204,
 | 
			
		||||
						Coefficient:  1,
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						CompetitorId: 91,
 | 
			
		||||
						Coefficient:  1,
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						CompetitorId: 48,
 | 
			
		||||
						Coefficient:  1,
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						CompetitorId: 45,
 | 
			
		||||
						Coefficient:  1,
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
			`{}`,
 | 
			
		||||
		},
 | 
			
		||||
		// Test No Client-Id or Api-Key
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusUnauthorized,
 | 
			
		||||
			map[string]string{},
 | 
			
		||||
			&UpdateStrategyParams{},
 | 
			
		||||
			`{
 | 
			
		||||
				"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))
 | 
			
		||||
 | 
			
		||||
		resp, err := c.Strategies().Update(test.params)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Error(err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if resp.StatusCode != test.statusCode {
 | 
			
		||||
			t.Errorf("got wrong status code: got: %d, expected: %d", resp.StatusCode, test.statusCode)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestAddProductsToStrategy(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		statusCode int
 | 
			
		||||
		headers    map[string]string
 | 
			
		||||
		params     *AddProductsToStrategyParams
 | 
			
		||||
		response   string
 | 
			
		||||
	}{
 | 
			
		||||
		// Test Ok
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusOK,
 | 
			
		||||
			map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"},
 | 
			
		||||
			&AddProductsToStrategyParams{
 | 
			
		||||
				ProductId:  []int64{29209},
 | 
			
		||||
				StrategyId: "e29114f0-177d-4160-8d06-2bc528470dda",
 | 
			
		||||
			},
 | 
			
		||||
			`{
 | 
			
		||||
				"result": {
 | 
			
		||||
				  "failed_product_count": 0
 | 
			
		||||
				}
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		// Test No Client-Id or Api-Key
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusUnauthorized,
 | 
			
		||||
			map[string]string{},
 | 
			
		||||
			&AddProductsToStrategyParams{},
 | 
			
		||||
			`{
 | 
			
		||||
				"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))
 | 
			
		||||
 | 
			
		||||
		resp, err := c.Strategies().AddProducts(test.params)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Error(err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if resp.StatusCode != test.statusCode {
 | 
			
		||||
			t.Errorf("got wrong status code: got: %d, expected: %d", resp.StatusCode, test.statusCode)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestGetStrategiesByProductIds(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		statusCode int
 | 
			
		||||
		headers    map[string]string
 | 
			
		||||
		params     *GetStrategiesByProductIdsParams
 | 
			
		||||
		response   string
 | 
			
		||||
	}{
 | 
			
		||||
		// Test Ok
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusOK,
 | 
			
		||||
			map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"},
 | 
			
		||||
			&GetStrategiesByProductIdsParams{
 | 
			
		||||
				ProductId: []int64{29209},
 | 
			
		||||
			},
 | 
			
		||||
			`{
 | 
			
		||||
				"result": {
 | 
			
		||||
				  "products_info": [
 | 
			
		||||
					{
 | 
			
		||||
					  "product_id": 29209,
 | 
			
		||||
					  "strategy_id": "b7cd30e6-5667-424d-b105-fbec30a52477"
 | 
			
		||||
					}
 | 
			
		||||
				  ]
 | 
			
		||||
				}
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		// Test No Client-Id or Api-Key
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusUnauthorized,
 | 
			
		||||
			map[string]string{},
 | 
			
		||||
			&GetStrategiesByProductIdsParams{},
 | 
			
		||||
			`{
 | 
			
		||||
				"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))
 | 
			
		||||
 | 
			
		||||
		resp, err := c.Strategies().GetByProductIds(test.params)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Error(err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if resp.StatusCode != test.statusCode {
 | 
			
		||||
			t.Errorf("got wrong status code: got: %d, expected: %d", resp.StatusCode, test.statusCode)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if resp.StatusCode == http.StatusOK {
 | 
			
		||||
			if len(resp.Result.ProductsInfo) != len(test.params.ProductId) {
 | 
			
		||||
				t.Errorf("Length of product ids in request and response are not equal")
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if len(resp.Result.ProductsInfo) > 0 {
 | 
			
		||||
				if resp.Result.ProductsInfo[0].ProductId != test.params.ProductId[0] {
 | 
			
		||||
					t.Errorf("Product ids in request and response are not equal")
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestListProductsInStrategy(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		statusCode int
 | 
			
		||||
		headers    map[string]string
 | 
			
		||||
		params     *ListProductsInStrategyParams
 | 
			
		||||
		response   string
 | 
			
		||||
	}{
 | 
			
		||||
		// Test Ok
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusOK,
 | 
			
		||||
			map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"},
 | 
			
		||||
			&ListProductsInStrategyParams{
 | 
			
		||||
				StrategyId: "string",
 | 
			
		||||
			},
 | 
			
		||||
			`{
 | 
			
		||||
				"result": {
 | 
			
		||||
				  "product_id": [
 | 
			
		||||
					"string"
 | 
			
		||||
				  ]
 | 
			
		||||
				}
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		// Test No Client-Id or Api-Key
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusUnauthorized,
 | 
			
		||||
			map[string]string{},
 | 
			
		||||
			&ListProductsInStrategyParams{},
 | 
			
		||||
			`{
 | 
			
		||||
				"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))
 | 
			
		||||
 | 
			
		||||
		resp, err := c.Strategies().ListProducts(test.params)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Error(err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if resp.StatusCode != test.statusCode {
 | 
			
		||||
			t.Errorf("got wrong status code: got: %d, expected: %d", resp.StatusCode, test.statusCode)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestGetCompetitorPrice(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		statusCode int
 | 
			
		||||
		headers    map[string]string
 | 
			
		||||
		params     *GetCompetitorPriceParams
 | 
			
		||||
		response   string
 | 
			
		||||
	}{
 | 
			
		||||
		// Test Ok
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusOK,
 | 
			
		||||
			map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"},
 | 
			
		||||
			&GetCompetitorPriceParams{
 | 
			
		||||
				ProductId: 0,
 | 
			
		||||
			},
 | 
			
		||||
			`{
 | 
			
		||||
				"result": {
 | 
			
		||||
				  "strategy_id": "string",
 | 
			
		||||
				  "is_enabled": true,
 | 
			
		||||
				  "strategy_product_price": 0,
 | 
			
		||||
				  "price_downloaded_at": "2022-11-17T15:33:53.936Z",
 | 
			
		||||
				  "strategy_competitor_id": 0,
 | 
			
		||||
				  "strategy_competitor_product_url": "string"
 | 
			
		||||
				}
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		// Test No Client-Id or Api-Key
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusUnauthorized,
 | 
			
		||||
			map[string]string{},
 | 
			
		||||
			&GetCompetitorPriceParams{},
 | 
			
		||||
			`{
 | 
			
		||||
				"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))
 | 
			
		||||
 | 
			
		||||
		resp, err := c.Strategies().GetCompetitorPrice(test.params)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Error(err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if resp.StatusCode != test.statusCode {
 | 
			
		||||
			t.Errorf("got wrong status code: got: %d, expected: %d", resp.StatusCode, test.statusCode)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestRemoveProductsFromStrategy(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		statusCode int
 | 
			
		||||
		headers    map[string]string
 | 
			
		||||
		params     *RemoveProductsFromStrategyParams
 | 
			
		||||
		response   string
 | 
			
		||||
	}{
 | 
			
		||||
		// Test Ok
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusOK,
 | 
			
		||||
			map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"},
 | 
			
		||||
			&RemoveProductsFromStrategyParams{
 | 
			
		||||
				ProductId: []int64{0},
 | 
			
		||||
			},
 | 
			
		||||
			`{
 | 
			
		||||
				"result": {
 | 
			
		||||
				  "failed_product_count": 0
 | 
			
		||||
				}
 | 
			
		||||
			}`,
 | 
			
		||||
		},
 | 
			
		||||
		// Test No Client-Id or Api-Key
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusUnauthorized,
 | 
			
		||||
			map[string]string{},
 | 
			
		||||
			&RemoveProductsFromStrategyParams{},
 | 
			
		||||
			`{
 | 
			
		||||
				"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))
 | 
			
		||||
 | 
			
		||||
		resp, err := c.Strategies().RemoveProducts(test.params)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Error(err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if resp.StatusCode != test.statusCode {
 | 
			
		||||
			t.Errorf("got wrong status code: got: %d, expected: %d", resp.StatusCode, test.statusCode)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestChangeStrategyStatus(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		statusCode int
 | 
			
		||||
		headers    map[string]string
 | 
			
		||||
		params     *ChangeStrategyStatusParams
 | 
			
		||||
		response   string
 | 
			
		||||
	}{
 | 
			
		||||
		// Test Ok
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusOK,
 | 
			
		||||
			map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"},
 | 
			
		||||
			&ChangeStrategyStatusParams{
 | 
			
		||||
				Enabled:    true,
 | 
			
		||||
				StrategyId: "c7516438-7124-4e2c-85d3-ccd92b6b9b65",
 | 
			
		||||
			},
 | 
			
		||||
			`{}`,
 | 
			
		||||
		},
 | 
			
		||||
		// Test No Client-Id or Api-Key
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusUnauthorized,
 | 
			
		||||
			map[string]string{},
 | 
			
		||||
			&ChangeStrategyStatusParams{},
 | 
			
		||||
			`{
 | 
			
		||||
				"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))
 | 
			
		||||
 | 
			
		||||
		resp, err := c.Strategies().ChangeStatus(test.params)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Error(err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if resp.StatusCode != test.statusCode {
 | 
			
		||||
			t.Errorf("got wrong status code: got: %d, expected: %d", resp.StatusCode, test.statusCode)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestRemoveStrategy(t *testing.T) {
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		statusCode int
 | 
			
		||||
		headers    map[string]string
 | 
			
		||||
		params     *RemoveStrategyParams
 | 
			
		||||
		response   string
 | 
			
		||||
	}{
 | 
			
		||||
		// Test Ok
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusOK,
 | 
			
		||||
			map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"},
 | 
			
		||||
			&RemoveStrategyParams{
 | 
			
		||||
				StrategyId: "strategy",
 | 
			
		||||
			},
 | 
			
		||||
			`{}`,
 | 
			
		||||
		},
 | 
			
		||||
		// Test No Client-Id or Api-Key
 | 
			
		||||
		{
 | 
			
		||||
			http.StatusUnauthorized,
 | 
			
		||||
			map[string]string{},
 | 
			
		||||
			&RemoveStrategyParams{},
 | 
			
		||||
			`{
 | 
			
		||||
				"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))
 | 
			
		||||
 | 
			
		||||
		resp, err := c.Strategies().Remove(test.params)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Error(err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		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