package handlers_test import ( "bytes" "context" "net/http" "net/http/httptest" "otaupdate/handlers" "otaupdate/services" "testing" "github.com/fiskerinc/cloud-services/pkg/clickhouse" "github.com/julienschmidt/httprouter" "github.com/stretchr/testify/assert" ) var chExpectedResult = []handlers.ChGpsRow{ {"1G1FP87S1GN000445", 33.901499, -118.379155}, {"1G1FP87S1GN000445", 33.101599, -118.189155}, {"1G1FP87S1GN000446", 50.231084, 11.344868}, {"1G1FP87S1GN000446", 50.141084, 11.145868}, } var expectedPathBody string = "" + "{" + `"1G1FP87S1GN000445":[[33.901499,-118.379155],[33.101599,-118.189155]],` + `"1G1FP87S1GN000446":[[50.231084,11.344868],[50.141084,11.145868]]` + "}" func TestHandleVehiclePathPost(t *testing.T) { validQuery := "?lookback_hours=24" validBody := "{\"vins\":[\"1G1FP87S1GN000445\", \"1G1FP87S1GN000446\"]}" validVins := `["1G1FP87S1GN000445","1G1FP87S1GN000446"]` tests := map[string]struct { q string b string conn clickhouse.ConnInterface expStatus int expBody string }{ "correct": { q: validQuery, b: validBody, conn: &clickhouse.MockConn{ExpectedResult: chExpectedResult}, expStatus: http.StatusOK, expBody: expectedPathBody, }, "missing_vins": { q: "", b: "", expStatus: http.StatusBadRequest, expBody: `{"message":"VINs required","error":"Bad Request"}`, }, } for tname, tt := range tests { t.Run(tname, func(t *testing.T) { services.SetClickhouseConn(tt.conn) w := httptest.NewRecorder() p := httprouter.Params{ {Key: "vins", Value: validVins}, } ctx := context.WithValue(context.Background(), httprouter.ParamsKey, p) reader := bytes.NewReader([]byte(tt.b)) r := httptest.NewRequest(http.MethodGet, "http://example.com/ota_update/vehicle_paths"+tt.q, reader). WithContext(ctx) handlers.HandleVehiclePathsPost(w, r) assert.Equal(t, tt.expStatus, w.Code) assert.Equal(t, tt.expBody, w.Body.String()) }) } }