262 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			262 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package ozon
 | 
						||
 | 
						||
import (
 | 
						||
	"net/http"
 | 
						||
	"testing"
 | 
						||
 | 
						||
	core "github.com/diphantxm/ozon-api-client"
 | 
						||
)
 | 
						||
 | 
						||
func TestGetStocksInfo(t *testing.T) {
 | 
						||
	tests := []struct {
 | 
						||
		statusCode int
 | 
						||
		headers    map[string]string
 | 
						||
		params     *GetStocksInfoParams
 | 
						||
		response   string
 | 
						||
	}{
 | 
						||
		{
 | 
						||
			http.StatusOK,
 | 
						||
			map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"},
 | 
						||
			&GetStocksInfoParams{
 | 
						||
				Limit:  100,
 | 
						||
				LastId: "",
 | 
						||
				Filter: GetStocksInfoFilter{
 | 
						||
					OfferId:    "136834",
 | 
						||
					ProductId:  214887921,
 | 
						||
					Visibility: "ALL",
 | 
						||
				},
 | 
						||
			},
 | 
						||
			`{
 | 
						||
				"result": {
 | 
						||
				  "items": [
 | 
						||
					{
 | 
						||
					  "product_id": 214887921,
 | 
						||
					  "offer_id": "136834",
 | 
						||
					  "stocks": [
 | 
						||
						{
 | 
						||
						  "type": "fbs",
 | 
						||
						  "present": 170,
 | 
						||
						  "reserved": 0
 | 
						||
						},
 | 
						||
						{
 | 
						||
						  "type": "fbo",
 | 
						||
						  "present": 0,
 | 
						||
						  "reserved": 0
 | 
						||
						}
 | 
						||
					  ]
 | 
						||
					}
 | 
						||
				  ],
 | 
						||
				  "total": 1,
 | 
						||
				  "last_id": "anVsbA=="
 | 
						||
				}
 | 
						||
			}`,
 | 
						||
		},
 | 
						||
		{
 | 
						||
			400,
 | 
						||
			map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"},
 | 
						||
			&GetStocksInfoParams{
 | 
						||
				Limit:  100,
 | 
						||
				LastId: "",
 | 
						||
				Filter: GetStocksInfoFilter{
 | 
						||
					OfferId:    "136834",
 | 
						||
					ProductId:  214887921,
 | 
						||
					Visibility: "ALL",
 | 
						||
				},
 | 
						||
			},
 | 
						||
			`{
 | 
						||
				"code": 0,
 | 
						||
				"details": [
 | 
						||
				  {
 | 
						||
					"typeUrl": "string",
 | 
						||
					"value": "string"
 | 
						||
				  }
 | 
						||
				],
 | 
						||
				"message": "string"
 | 
						||
			}`,
 | 
						||
		},
 | 
						||
	}
 | 
						||
 | 
						||
	for _, test := range tests {
 | 
						||
		c := NewMockClient(core.NewMockHttpHandler(test.statusCode, test.response, test.headers))
 | 
						||
 | 
						||
		resp, err := c.GetStocksInfo(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 TestGetProductDetails(t *testing.T) {
 | 
						||
	tests := []struct {
 | 
						||
		statusCode int
 | 
						||
		headers    map[string]string
 | 
						||
		params     *GetProductDetailsParams
 | 
						||
		response   string
 | 
						||
	}{
 | 
						||
		{
 | 
						||
			http.StatusOK,
 | 
						||
			map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"},
 | 
						||
			&GetProductDetailsParams{
 | 
						||
				ProductId: 137208233,
 | 
						||
			},
 | 
						||
			`{
 | 
						||
				"result": {
 | 
						||
				  "id": 137208233,
 | 
						||
				  "name": "Комплект защитных плёнок для X3 NFC. Темный хлопок",
 | 
						||
				  "offer_id": "143210586",
 | 
						||
				  "barcode": "",
 | 
						||
				  "barcodes": [
 | 
						||
					"2335900005",
 | 
						||
					"7533900005"
 | 
						||
				  ],
 | 
						||
				  "buybox_price": "",
 | 
						||
				  "category_id": 17038062,
 | 
						||
				  "created_at": "2021-10-21T15:48:03.529178Z",
 | 
						||
				  "images": [
 | 
						||
					"https://cdn1.ozone.ru/s3/multimedia-5/6088931525.jpg",
 | 
						||
					"https://cdn1.ozone.ru/s3/multimedia-p/6088915813.jpg"
 | 
						||
				  ],
 | 
						||
				  "has_discounted_item": true,
 | 
						||
				  "is_discounted": true,
 | 
						||
				  "discounted_stocks": {
 | 
						||
					"coming": 0,
 | 
						||
					"present": 0,
 | 
						||
					"reserved": 0
 | 
						||
				  },
 | 
						||
				  "currency_code": "RUB",
 | 
						||
				  "marketing_price": "",
 | 
						||
				  "min_price": "",
 | 
						||
				  "old_price": "",
 | 
						||
				  "premium_price": "",
 | 
						||
				  "price": "590.0000",
 | 
						||
				  "recommended_price": "",
 | 
						||
				  "sources": [
 | 
						||
					{
 | 
						||
					  "is_enabled": true,
 | 
						||
					  "sku": 522759607,
 | 
						||
					  "source": "fbo"
 | 
						||
					},
 | 
						||
					{
 | 
						||
					  "is_enabled": true,
 | 
						||
					  "sku": 522759608,
 | 
						||
					  "source": "fbs"
 | 
						||
					}
 | 
						||
				  ],
 | 
						||
				  "stocks": {
 | 
						||
					"coming": 0,
 | 
						||
					"present": 0,
 | 
						||
					"reserved": 0
 | 
						||
				  },
 | 
						||
				  "errors": [],
 | 
						||
				  "updated_at": "2023-02-09T06:46:44.152Z",
 | 
						||
				  "vat": "0.0",
 | 
						||
				  "visible": false,
 | 
						||
				  "visibility_details": {
 | 
						||
					"has_price": true,
 | 
						||
					"has_stock": false,
 | 
						||
					"active_product": false
 | 
						||
				  },
 | 
						||
				  "price_index": "0.00",
 | 
						||
				  "commissions": [],
 | 
						||
				  "volume_weight": 0.1,
 | 
						||
				  "is_prepayment": false,
 | 
						||
				  "is_prepayment_allowed": true,
 | 
						||
				  "images360": [],
 | 
						||
				  "is_kgt": false,
 | 
						||
				  "color_image": "",
 | 
						||
				  "primary_image": "https://cdn1.ozone.ru/s3/multimedia-p/6088931545.jpg",
 | 
						||
				  "status": {
 | 
						||
					"state": "imported",
 | 
						||
					"state_failed": "imported",
 | 
						||
					"moderate_status": "",
 | 
						||
					"decline_reasons": [],
 | 
						||
					"validation_state": "pending",
 | 
						||
					"state_name": "Не продается",
 | 
						||
					"state_description": "Не создан",
 | 
						||
					"is_failed": true,
 | 
						||
					"is_created": false,
 | 
						||
					"state_tooltip": "",
 | 
						||
					"item_errors": [
 | 
						||
					  {
 | 
						||
						"code": "error_attribute_values_empty",
 | 
						||
						"field": "attribute",
 | 
						||
						"attribute_id": 9048,
 | 
						||
						"state": "imported",
 | 
						||
						"level": "error",
 | 
						||
						"description": "Не заполнен обязательный атрибут. Иногда мы обновляем обязательные атрибуты или добавляем новые. Отредактируйте товар или загрузите новый XLS-шаблон с актуальными атрибутами. ",
 | 
						||
						"optional_description_elements": {},
 | 
						||
						"attribute_name": "Название модели"
 | 
						||
					  },
 | 
						||
					  {
 | 
						||
						"code": "error_attribute_values_empty",
 | 
						||
						"field": "attribute",
 | 
						||
						"attribute_id": 5076,
 | 
						||
						"state": "imported",
 | 
						||
						"level": "error",
 | 
						||
						"description": "Не заполнен обязательный атрибут. Иногда мы обновляем обязательные атрибуты или добавляем новые. Отредактируйте товар или загрузите новый XLS-шаблон с актуальными атрибутами. ",
 | 
						||
						"optional_description_elements": {},
 | 
						||
						"attribute_name": "Рекомендовано для"
 | 
						||
					  },
 | 
						||
					  {
 | 
						||
						"code": "error_attribute_values_empty",
 | 
						||
						"field": "attribute",
 | 
						||
						"attribute_id": 8229,
 | 
						||
						"state": "imported",
 | 
						||
						"level": "error",
 | 
						||
						"description": "Не заполнен обязательный атрибут. Иногда мы обновляем обязательные атрибуты или добавляем новые. Отредактируйте товар или загрузите новый XLS-шаблон с актуальными атрибутами. ",
 | 
						||
						"optional_description_elements": {},
 | 
						||
						"attribute_name": "Тип"
 | 
						||
					  },
 | 
						||
					  {
 | 
						||
						"code": "error_attribute_values_empty",
 | 
						||
						"field": "attribute",
 | 
						||
						"attribute_id": 85,
 | 
						||
						"state": "imported",
 | 
						||
						"level": "error",
 | 
						||
						"description": "Не заполнен обязательный атрибут. Иногда мы обновляем обязательные атрибуты или добавляем новые. Отредактируйте товар или загрузите новый XLS-шаблон с актуальными атрибутами. ",
 | 
						||
						"optional_description_elements": {},
 | 
						||
						"attribute_name": "Бренд"
 | 
						||
					  }
 | 
						||
					],
 | 
						||
					"state_updated_at": "2021-10-21T15:48:03.927309Z"
 | 
						||
				  }
 | 
						||
				}
 | 
						||
			  }`,
 | 
						||
		},
 | 
						||
		{
 | 
						||
			400,
 | 
						||
			map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"},
 | 
						||
			&GetProductDetailsParams{
 | 
						||
				ProductId: 137208233,
 | 
						||
			},
 | 
						||
			`{
 | 
						||
				"code": 0,
 | 
						||
				"details": [
 | 
						||
				  {
 | 
						||
					"typeUrl": "string",
 | 
						||
					"value": "string"
 | 
						||
				  }
 | 
						||
				],
 | 
						||
				"message": "string"
 | 
						||
			}`,
 | 
						||
		},
 | 
						||
	}
 | 
						||
 | 
						||
	for _, test := range tests {
 | 
						||
		c := NewMockClient(core.NewMockHttpHandler(test.statusCode, test.response, test.headers))
 | 
						||
 | 
						||
		resp, err := c.GetProductDetails(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)
 | 
						||
		}
 | 
						||
	}
 | 
						||
}
 |