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) } } }