package ozon import ( "context" "net/http" "testing" "time" core "git.denco.store/fakz9/ozon-api-client" ) func TestListPasses(t *testing.T) { t.Parallel() tests := []struct { statusCode int headers map[string]string params *ListPassesParams response string }{ // Test Ok { http.StatusOK, map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"}, &ListPassesParams{ Cursor: "", Filter: ListPassesFilter{ ArrivalPassIds: []string{"string"}, ArrivalReason: "string", DropoffPointIds: []int64{123}, OnlyActivePasses: true, WarehouseIds: []int64{456}, }, }, `{ "arrival_passes": [ { "arrival_pass_id": 0, "arrival_reasons": [ "string" ], "arrival_time": "2019-08-24T14:15:22Z", "driver_name": "string", "driver_phone": "string", "dropoff_point_id": 123, "is_active": true, "vehicle_license_plate": "string", "vehicle_model": "string", "warehouse_id": 456 } ], "cursor": "string" }`, }, // Test No Client-Id or Api-Key { http.StatusUnauthorized, map[string]string{}, &ListPassesParams{}, `{ "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.Passes().List(ctx, test.params) if err != nil { t.Error(err) continue } compareJsonResponse(t, test.response, &ListPassesResponse{}) if resp.StatusCode != test.statusCode { t.Errorf("got wrong status code: got: %d, expected: %d", resp.StatusCode, test.statusCode) } if len(resp.ArrivalPasses) != 0 { if resp.ArrivalPasses[0].WarehouseId != test.params.Filter.WarehouseIds[0] { t.Errorf("warehouse id in request and response should be equal") } if resp.ArrivalPasses[0].DropoffPointId != test.params.Filter.DropoffPointIds[0] { t.Errorf("dropoff point id in request and response should be equal") } } } } func TestCreateArrivalPass(t *testing.T) { t.Parallel() tests := []struct { statusCode int headers map[string]string params *CreateCarriageParams response string }{ // Test Ok { http.StatusOK, map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"}, &CreateCarriageParams{ ArrivalPasses: []CarriageArrivalPass{ { DriverName: "string", DriverPhone: "string", VehicleLicensePlate: "string", VehicleModel: "string", WithReturns: true, }, }, CarriageId: 14, }, `{ "arrival_pass_ids": [ "154" ] }`, }, // Test No Client-Id or Api-Key { http.StatusUnauthorized, map[string]string{}, &CreateCarriageParams{}, `{ "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.Passes().CreateCarriage(ctx, test.params) if err != nil { t.Error(err) continue } compareJsonResponse(t, test.response, &CreateCarriageResponse{}) if resp.StatusCode != test.statusCode { t.Errorf("got wrong status code: got: %d, expected: %d", resp.StatusCode, test.statusCode) } } } func TestUpdateArrivalPass(t *testing.T) { t.Parallel() tests := []struct { statusCode int headers map[string]string params *UpdateCarriageParams response string }{ // Test Ok { http.StatusOK, map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"}, &UpdateCarriageParams{ ArrivalPasses: []UpdateCarriageArrivalPass{ { Id: 11, CarriageArrivalPass: CarriageArrivalPass{ DriverName: "string", DriverPhone: "string", VehicleLicensePlate: "string", VehicleModel: "string", WithReturns: true, }, }, }, CarriageId: 14, }, `{}`, }, // Test No Client-Id or Api-Key { http.StatusUnauthorized, map[string]string{}, &UpdateCarriageParams{}, `{ "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.Passes().UpdateCarriage(ctx, test.params) if err != nil { t.Error(err) continue } compareJsonResponse(t, test.response, &UpdateCarriageResponse{}) if resp.StatusCode != test.statusCode { t.Errorf("got wrong status code: got: %d, expected: %d", resp.StatusCode, test.statusCode) } } } func TestDeleteArrivalPass(t *testing.T) { t.Parallel() tests := []struct { statusCode int headers map[string]string params *DeleteCarriageParams response string }{ // Test Ok { http.StatusOK, map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"}, &DeleteCarriageParams{ ArrivalPassIds: []int64{123}, CarriageId: 14, }, `{}`, }, // Test No Client-Id or Api-Key { http.StatusUnauthorized, map[string]string{}, &DeleteCarriageParams{}, `{ "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.Passes().DeleteCarriage(ctx, test.params) if err != nil { t.Error(err) continue } compareJsonResponse(t, test.response, &DeleteCarriageResponse{}) if resp.StatusCode != test.statusCode { t.Errorf("got wrong status code: got: %d, expected: %d", resp.StatusCode, test.statusCode) } } } func TestCreateReturn(t *testing.T) { t.Parallel() tests := []struct { statusCode int headers map[string]string params *CreateReturnParams response string }{ // Test Ok { http.StatusOK, map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"}, &CreateReturnParams{ ArrivalPasses: []ReturnArrivalPass{ { ArrivalTime: time.Now(), DriverName: "string", DriverPhone: "string", VehicleLicensePlate: "string", VehicleModel: "string", DropoffPointId: 11, WarehouseId: 5, }, }, }, `{ "arrival_pass_ids": [ "1111" ] }`, }, // Test No Client-Id or Api-Key { http.StatusUnauthorized, map[string]string{}, &CreateReturnParams{}, `{ "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.Passes().CreateReturn(ctx, test.params) if err != nil { t.Error(err) continue } compareJsonResponse(t, test.response, &CreateReturnResponse{}) if resp.StatusCode != test.statusCode { t.Errorf("got wrong status code: got: %d, expected: %d", resp.StatusCode, test.statusCode) } } } func TestUpdateReturn(t *testing.T) { t.Parallel() tests := []struct { statusCode int headers map[string]string params *UpdateReturnParams response string }{ // Test Ok { http.StatusOK, map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"}, &UpdateReturnParams{ ArrivalPasses: []ReturnArrivalPass{ { ArrivalTime: time.Now(), DriverName: "string", DriverPhone: "string", VehicleLicensePlate: "string", VehicleModel: "string", DropoffPointId: 11, WarehouseId: 5, }, }, }, `{}`, }, // Test No Client-Id or Api-Key { http.StatusUnauthorized, map[string]string{}, &UpdateReturnParams{}, `{ "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.Passes().UpdateReturn(ctx, test.params) if err != nil { t.Error(err) continue } compareJsonResponse(t, test.response, &UpdateReturnResponse{}) if resp.StatusCode != test.statusCode { t.Errorf("got wrong status code: got: %d, expected: %d", resp.StatusCode, test.statusCode) } } } func TestDeleteReturn(t *testing.T) { t.Parallel() tests := []struct { statusCode int headers map[string]string params *DeleteReturnParams response string }{ // Test Ok { http.StatusOK, map[string]string{"Client-Id": "my-client-id", "Api-Key": "my-api-key"}, &DeleteReturnParams{ ArrivalPassIds: []int64{456}, }, `{}`, }, // Test No Client-Id or Api-Key { http.StatusUnauthorized, map[string]string{}, &DeleteReturnParams{}, `{ "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.Passes().DeleteReturn(ctx, test.params) if err != nil { t.Error(err) continue } compareJsonResponse(t, test.response, &DeleteReturnResponse{}) if resp.StatusCode != test.statusCode { t.Errorf("got wrong status code: got: %d, expected: %d", resp.StatusCode, test.statusCode) } } }