diff options
Diffstat (limited to '')
-rw-r--r-- | pkg/navitia_api_client/departures_test.go | 75 |
1 files changed, 56 insertions, 19 deletions
diff --git a/pkg/navitia_api_client/departures_test.go b/pkg/navitia_api_client/departures_test.go index 9b2f52c..3cf9eab 100644 --- a/pkg/navitia_api_client/departures_test.go +++ b/pkg/navitia_api_client/departures_test.go @@ -3,35 +3,72 @@ package navitia_api_client import ( "net/http" "net/http/httptest" + "reflect" "testing" + + "git.adyxax.org/adyxax/trains/pkg/model" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestGetDepartures(t *testing.T) { - // invalid characters in token - client := NewClient("}") - _, err := client.GetDepartures("test") - if err == nil { - t.Fatalf("invalid characters in token should raise an error because the url is invalid") + // Simple Test cases + testCases := []struct { + name string + inputNewCLient string + inputGetDepartures string + expected []model.Departure + expectedError interface{} + }{ + {"invalid characters in token should fail", "}", "test", nil, &HttpClientError{}}, + {"unreachable server should fail", "https://", "test", nil, &HttpClientError{}}, } - // unreachable server - client = NewClient("https://") - _, err = client.GetDepartures("test") - if err == nil { - t.Fatalf("unreachable server should raise an error") + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + client := NewClient(tc.inputNewCLient) + valid, err := client.GetDepartures(tc.inputGetDepartures) + if tc.expectedError != nil { + require.Error(t, err) + assert.Equalf(t, reflect.TypeOf(err), reflect.TypeOf(tc.expectedError), "Invalid error type. Got %s but expected %s", reflect.TypeOf(err), reflect.TypeOf(tc.expectedError)) + assert.Equal(t, tc.expected, valid) + } else { + require.NoError(t, err) + assert.Equal(t, tc.expected, valid) + } + }) } - // invalid json - client, ts := newTestClientFromFilename(t, "test_data/invalid.json") - defer ts.Close() - _, err = client.GetDepartures("test") - if err == nil { - t.Fatalf("invalid json should raise an error") + // Test cases with a filename + testCasesFilename := []struct { + name string + inputFilename string + inputGetDepartures string + expected []model.Departure + expectedError interface{} + }{ + {"invalid json should fail", "test_data/invalid.json", "test", nil, &JsonDecodeError{}}, + {"invalid date should fail", "test_data/invalid_date.json", "test", nil, &DateParsingError{}}, + } + for _, tc := range testCasesFilename { + t.Run(tc.name, func(t *testing.T) { + client, ts := newTestClientFromFilename(t, tc.inputFilename) + defer ts.Close() + valid, err := client.GetDepartures(tc.inputGetDepartures) + if tc.expectedError != nil { + require.Error(t, err) + assert.Equalf(t, reflect.TypeOf(err), reflect.TypeOf(tc.expectedError), "Invalid error type. Got %s but expected %s", reflect.TypeOf(err), reflect.TypeOf(tc.expectedError)) + assert.Equal(t, tc.expected, valid) + } else { + require.NoError(t, err) + assert.Equal(t, tc.expected, valid) + } + }) } // http error - ts = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusNotFound) })) - client = newTestClient(ts) - _, err = client.GetDepartures("test") + client := newTestClient(ts) + _, err := client.GetDepartures("test") if err == nil { t.Fatalf("404 should raise an error") } |