From eb829bab7bd1c2124bda5451ae6839087063ae1c Mon Sep 17 00:00:00 2001 From: Pierre Camilleri <22995923+pierrecamilleri@users.noreply.github.com> Date: Wed, 7 Dec 2022 16:14:34 +0100 Subject: [PATCH] feat: implementation of regular trips (#52) This PR implements and tests GET /driver_regular_trips and GET /passenger_regular_trips endpoints. It also factorizes testCases for `*_journey` and `*_regular_trips` endpoints. --- README.md | 4 +- cmd/api/journey_api_helpers.go | 225 ++++- cmd/api/regular_trips_api_helpers.go | 11 + cmd/service/api.go | 82 +- cmd/service/api_test.go | 546 +++++------ cmd/service/commands_file_generation.go | 42 +- cmd/service/db/data/testData.gen.json | 1160 ++++++++++++++++++++--- cmd/service/db/db.go | 131 +-- cmd/service/db/db_data_interface.go | 108 +++ cmd/service/helpers.go | 149 +++ cmd/service/testing.go | 398 ++++++-- cmd/test/WIP.md | 1 + cmd/test/assert/testing.go | 5 +- cmd/test/commands/testCommands.gen.sh | 302 +++++- cmd/test/test_implementation.go | 13 + 15 files changed, 2476 insertions(+), 701 deletions(-) create mode 100644 cmd/api/regular_trips_api_helpers.go create mode 100644 cmd/service/db/db_data_interface.go diff --git a/README.md b/README.md index 2ee31d3..3468820 100644 --- a/README.md +++ b/README.md @@ -123,13 +123,13 @@ For an example of a thorough test suite for an API, look at that works together with [this data](./cmd/service/data/testData.gen.json). -### GET /driver_journey and GET /passenger_journey +### GET /driver_journey, GET /passenger_journey, GET /driver_regular_trips, GET/passenger_regular_trips The following assertions are run on these two endpoints : - assert format - assert response status code 200 (optional) - assert header Content-Type:application/json -- assert query parameter "departureRadius" +- assert query parameter "departureRadius" - assert query parameter "arrivalRadius" - assert query parameter "timeDelta" - assert query parameter "count" diff --git a/cmd/api/journey_api_helpers.go b/cmd/api/journey_api_helpers.go index 1733340..0eb6061 100644 --- a/cmd/api/journey_api_helpers.go +++ b/cmd/api/journey_api_helpers.go @@ -2,12 +2,16 @@ package api import ( "fmt" - "net/http" "github.com/fabmob/playground-standard-covoiturage/cmd/util" "github.com/labstack/echo/v4" ) +var ( + ExampleOperator = "example.com" + ExampleJourneyType = DYNAMIC +) + // NewGetDriverJourneysParams returns query parameters, looking for a trip // from "departure" to "arrival" at "departureDate". func NewGetDriverJourneysParams( @@ -39,11 +43,27 @@ func NewGetPassengerJourneysParams( } } +// NewTrip returns a valid Trip +func NewTrip() Trip { + t := Trip{} + t.Operator = ExampleOperator + + return t +} + +// NewJourneySchedule returns a valid JourneySchedule +func NewJourneySchedule() JourneySchedule { + js := JourneySchedule{} + js.Type = ExampleJourneyType + + return js +} + // NewDriverJourney returns a valid DriverJourney func NewDriverJourney() DriverJourney { dj := DriverJourney{} - dj.Type = "DYNAMIC" - dj.Operator = "example.com" + dj.JourneySchedule = NewJourneySchedule() + dj.Trip = NewTrip() return dj } @@ -51,14 +71,56 @@ func NewDriverJourney() DriverJourney { // NewPassengerJourney returns a valid PassengerJourney func NewPassengerJourney() PassengerJourney { pj := PassengerJourney{} + pj.JourneySchedule = NewJourneySchedule() + pj.Trip = NewTrip() + + // despite being a pointer, DriverDepartureDate is required departureDate := int64(0) - pj.Operator = "example.com" pj.DriverDepartureDate = &departureDate - pj.Type = "DYNAMIC" return pj } +// NewSchedule returns a valid Schedule +func NewSchedule() Schedule { + + timeOfDay := "08:00:00" + day := TUE + js := NewJourneySchedule() + // Pickup date compliant with above information + js.PassengerPickupDate = 457200 + + return Schedule{ + PassengerPickupTimeOfDay: &timeOfDay, + PassengerPickupDay: &day, + JourneySchedules: &[]JourneySchedule{js}, + } +} + +// NewDriverRegularTrip returns a valid DriverRegularTrip +func NewDriverRegularTrip() DriverRegularTrip { + drt := DriverRegularTrip{} + drt.Trip = NewTrip() + + drt.Schedules = &[]Schedule{ + NewSchedule(), + } + + return drt +} + +// NewPassengerRegularTrip returns a valid PassengerRegularTrip +func NewPassengerRegularTrip() PassengerRegularTrip { + prt := PassengerRegularTrip{} + prt.Trip = NewTrip() + + prt.Schedules = &[]Schedule{ + NewSchedule(), + } + + return prt +} + func GetJourneys(s ServerInterface, ctx echo.Context, params GetJourneysParams) error { switch v := params.(type) { case *GetPassengerJourneysParams: @@ -74,24 +136,10 @@ func GetJourneys(s ServerInterface, ctx echo.Context, params GetJourneysParams) /////////////////////////////////////////////// -type RequestParams interface { - MakeRequest(server string) (*http.Request, error) -} - -func (p *GetDriverJourneysParams) MakeRequest(server string) (*http.Request, error) { - return NewGetDriverJourneysRequest(server, p) -} - -func (p *GetPassengerJourneysParams) MakeRequest(server string) (*http.Request, error) { - return NewGetPassengerJourneysRequest(server, p) -} - -type GetJourneysParams interface { - RequestParams +type JourneyOrTripPartialParams interface { GetDepartureLat() float64 GetDepartureLng() float64 GetDepartureRadius() float64 - GetDepartureDate() int GetArrivalLat() float64 GetArrivalLng() float64 GetArrivalRadius() float64 @@ -99,10 +147,24 @@ type GetJourneysParams interface { GetCount() *int } +type GetJourneysParams interface { + JourneyOrTripPartialParams + GetDepartureDate() int +} + +type GetRegularTripParams interface { + JourneyOrTripPartialParams + GetDepartureTimeOfDay() string + GetDepartureWeekDays() []string + GetMinDepartureDate() *int + GetMaxDepartureDate() *int +} + var ( - defaultTimeDelta = 900 - defaultDepartureRadius = float32(1.) - defaultArrivalRadius = float32(1.) + defaultTimeDelta = 900 + defaultDepartureRadius = float32(1.) + defaultArrivalRadius = float32(1.) + defaultDepartureWeekdays = []string{"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"} ) // *GetDriverJourneysParams implements GetJourneysParams @@ -149,6 +211,7 @@ func (p *GetDriverJourneysParams) GetCount() *int { return p.Count } +/////////////////////////////////////////////// // *GetPassengerJourneysParams implements GetJourneysParams func (p *GetPassengerJourneysParams) GetDepartureLat() float64 { @@ -193,13 +256,127 @@ func (p *GetPassengerJourneysParams) GetCount() *int { return p.Count } +/////////////////////////////////////////////// +// *GetDriverRegularTripsParams implements GetRegularTripsParams + +func (p *GetDriverRegularTripsParams) GetDepartureLat() float64 { + return float64(p.DepartureLat) +} + +func (p *GetDriverRegularTripsParams) GetDepartureLng() float64 { + return float64(p.DepartureLng) +} + +// GetDepartureRadius returns the value of DepartureRadius if any, or its default value +// otherwise. +func (p *GetDriverRegularTripsParams) GetDepartureRadius() float64 { + return float64(withDefaultValue(p.DepartureRadius, defaultDepartureRadius)) +} + +func (p *GetDriverRegularTripsParams) GetDepartureTimeOfDay() string { + return p.DepartureTimeOfDay +} + +func (p *GetDriverRegularTripsParams) GetDepartureWeekDays() []string { + return withDefaultValue(p.DepartureWeekdays, defaultDepartureWeekdays) +} + +func (p *GetDriverRegularTripsParams) GetArrivalLat() float64 { + return float64(p.ArrivalLat) +} + +func (p *GetDriverRegularTripsParams) GetArrivalLng() float64 { + return float64(p.ArrivalLng) +} + +// GetArrivalRadius returns the value of ArrivalRadius if any, or its default value +// otherwise. +func (p *GetDriverRegularTripsParams) GetArrivalRadius() float64 { + return float64(withDefaultValue(p.ArrivalRadius, defaultArrivalRadius)) +} + +// GetTimeDelta returns the value of TimeDelta if any, or its default value +// otherwise. Implements GetJourneyParams.GetTimeDelta(). +func (p *GetDriverRegularTripsParams) GetTimeDelta() int { + return withDefaultValue(p.TimeDelta, defaultTimeDelta) +} + +func (p *GetDriverRegularTripsParams) GetCount() *int { + return p.Count +} + +func (p *GetDriverRegularTripsParams) GetMinDepartureDate() *int { + return p.MinDepartureDate +} + +func (p *GetDriverRegularTripsParams) GetMaxDepartureDate() *int { + return p.MaxDepartureDate +} + +/////////////////////////////////////////////// +// *GetPassengerRegularTripsParams implements GetRegularTripsParams + +func (p *GetPassengerRegularTripsParams) GetDepartureLat() float64 { + return float64(p.DepartureLat) +} + +func (p *GetPassengerRegularTripsParams) GetDepartureLng() float64 { + return float64(p.DepartureLng) +} + +// GetDepartureRadius returns the value of DepartureRadius if any, or its default value +// otherwise. +func (p *GetPassengerRegularTripsParams) GetDepartureRadius() float64 { + return float64(withDefaultValue(p.DepartureRadius, defaultDepartureRadius)) +} + +func (p *GetPassengerRegularTripsParams) GetDepartureTimeOfDay() string { + return p.DepartureTimeOfDay +} + +func (p *GetPassengerRegularTripsParams) GetDepartureWeekDays() []string { + return withDefaultValue(p.DepartureWeekdays, defaultDepartureWeekdays) +} + +func (p *GetPassengerRegularTripsParams) GetArrivalLat() float64 { + return float64(p.ArrivalLat) +} + +func (p *GetPassengerRegularTripsParams) GetArrivalLng() float64 { + return float64(p.ArrivalLng) +} + +// GetArrivalRadius returns the value of ArrivalRadius if any, or its default value +// otherwise. +func (p *GetPassengerRegularTripsParams) GetArrivalRadius() float64 { + return float64(withDefaultValue(p.ArrivalRadius, defaultArrivalRadius)) +} + +// GetTimeDelta returns the value of TimeDelta if any, or its default value +// otherwise. Implements GetJourneyParams.GetTimeDelta(). +func (p *GetPassengerRegularTripsParams) GetTimeDelta() int { + return withDefaultValue(p.TimeDelta, defaultTimeDelta) +} + +func (p *GetPassengerRegularTripsParams) GetCount() *int { + return p.Count +} + +func (p *GetPassengerRegularTripsParams) GetMinDepartureDate() *int { + return p.MinDepartureDate +} + +func (p *GetPassengerRegularTripsParams) GetMaxDepartureDate() *int { + return p.MaxDepartureDate +} + //////////////////////////////////////////////////// // Helpers //////////////////////////////////////////////////// // withDefaultValue takes a pointer, and returns the value pointed at, or a // default value if the pointer is nil -func withDefaultValue[T int | float32 | float64](t *T, defaultValue T) T { +func withDefaultValue[T any](t *T, defaultValue T) T { if t == nil { return defaultValue } diff --git a/cmd/api/regular_trips_api_helpers.go b/cmd/api/regular_trips_api_helpers.go new file mode 100644 index 0000000..0a82f62 --- /dev/null +++ b/cmd/api/regular_trips_api_helpers.go @@ -0,0 +1,11 @@ +package api + +type DriverRegularTrip struct { + DriverTrip + Schedules *[]Schedule +} + +type PassengerRegularTrip struct { + PassengerTrip + Schedules *[]Schedule +} diff --git a/cmd/service/api.go b/cmd/service/api.go index 698d145..e27f80d 100644 --- a/cmd/service/api.go +++ b/cmd/service/api.go @@ -2,12 +2,10 @@ package service import ( "errors" - "math" "net/http" "github.com/fabmob/playground-standard-covoiturage/cmd/api" "github.com/fabmob/playground-standard-covoiturage/cmd/service/db" - "github.com/fabmob/playground-standard-covoiturage/cmd/util" "github.com/labstack/echo/v4" ) @@ -163,44 +161,33 @@ func (s *StdCovServerImpl) GetDriverJourneys( return ctx.JSON(http.StatusOK, response) } -func keepJourney(params api.GetJourneysParams, trip api.Trip, schedule api.JourneySchedule) bool { - coordsRequestDeparture := util.Coord{ - Lat: float64(params.GetDepartureLat()), - Lon: float64(params.GetDepartureLng()), - } - coordsResponseDeparture := util.Coord{ - Lat: trip.PassengerPickupLat, - Lon: trip.PassengerPickupLng, - } - departureRadiusOK := util.Distance(coordsRequestDeparture, coordsResponseDeparture) <= - params.GetDepartureRadius() - - coordsRequestArrival := util.Coord{ - Lat: float64(params.GetArrivalLat()), - Lon: float64(params.GetArrivalLng()), - } - coordsResponseArrival := util.Coord{ - Lat: trip.PassengerDropLat, - Lon: trip.PassengerDropLng, - } - arrivalRadiusOK := util.Distance(coordsRequestArrival, coordsResponseArrival) <= - params.GetArrivalRadius() - - timeDeltaOK := - math.Abs(float64(schedule.PassengerPickupDate)-float64(params.GetDepartureDate())) < - float64(params.GetTimeDelta()) - - return departureRadiusOK && arrivalRadiusOK && timeDeltaOK -} - // GetDriverRegularTrips searches for matching regular driver trip. // (GET /driver_regular_trips) -func (*StdCovServerImpl) GetDriverRegularTrips( +func (s *StdCovServerImpl) GetDriverRegularTrips( ctx echo.Context, params api.GetDriverRegularTripsParams, ) error { - // Implement me - return nil + response := []api.DriverRegularTrip{} + + for _, drt := range s.db.GetDriverRegularTrips() { + if !keepTrip(¶ms, drt.Trip) { + continue + } + + schedulesOK, err := anyScheduleOK(drt.Schedules, ¶ms) + if err != nil { + return ctx.JSON(http.StatusBadRequest, errorBody(err)) + } + if schedulesOK { + response = append(response, drt) + } + } + + if params.Count != nil { + response = keepNFirst(response, *params.Count) + } + + return ctx.JSON(http.StatusOK, response) } // PostMessages sends a mesage to the owner of a retrieved journey. @@ -245,12 +232,31 @@ func (s *StdCovServerImpl) GetPassengerJourneys( // GetPassengerRegularTrips searches for matching pasenger regular trips. // (GET /passenger_regular_trips) -func (*StdCovServerImpl) GetPassengerRegularTrips( +func (s *StdCovServerImpl) GetPassengerRegularTrips( ctx echo.Context, params api.GetPassengerRegularTripsParams, ) error { - // Implement me - return nil + response := []api.PassengerRegularTrip{} + + for _, prt := range s.db.GetPassengerRegularTrips() { + if !keepTrip(¶ms, prt.Trip) { + continue + } + + schedulesOK, err := anyScheduleOK(prt.Schedules, ¶ms) + if err != nil { + return ctx.JSON(http.StatusBadRequest, errorBody(err)) + } + if schedulesOK { + response = append(response, prt) + } + } + + if params.Count != nil { + response = keepNFirst(response, *params.Count) + } + + return ctx.JSON(http.StatusOK, response) } // GetStatus gives health status of the webservice. diff --git a/cmd/service/api_test.go b/cmd/service/api_test.go index 09fadff..6e178cf 100644 --- a/cmd/service/api_test.go +++ b/cmd/service/api_test.go @@ -21,160 +21,172 @@ func init() { flag.BoolVar(&generateTestData, "generate", false, "Should test data be regenerated") } -func TestDriverJourneys(t *testing.T) { - var ( - coordsIgnore = util.Coord{Lat: 0, Lon: 0} - coordsRef = util.Coord{Lat: 46.1604531, Lon: -1.2219607} // reference - coords900m = util.Coord{Lat: 46.1613442, Lon: -1.2103736} // at ~900m from reference - coords1100m = util.Coord{Lat: 46.1613679, Lon: -1.2086563} // at ~1100m from reference - coords2100m = util.Coord{Lat: 46.1649225, Lon: -1.1954497} // at ~2100m from reference - ) - - testCases := []struct { - name string - testParams api.GetJourneysParams - testData []api.DriverJourney - expectNonEmptyResult bool - }{ - - { - "No data", - &api.GetDriverJourneysParams{}, - []api.DriverJourney{}, - false, - }, - - { - "Departure radius 1", - makeParamsWithDepartureRadius(coordsRef, 1, "driver"), - []api.DriverJourney{ - makeDriverJourneyAtCoords(coords900m, coordsIgnore), - makeDriverJourneyAtCoords(coords1100m, coordsIgnore), - }, - true, - }, - - { - "Departure radius 2", - makeParamsWithDepartureRadius(coordsRef, 2, "driver"), - []api.DriverJourney{ - makeDriverJourneyAtCoords(coords900m, coordsIgnore), - makeDriverJourneyAtCoords(coords2100m, coordsIgnore), - }, - true, - }, - - { - "Departure radius 3", - makeParamsWithDepartureRadius(coordsRef, 1, "driver"), - []api.DriverJourney{ - makeDriverJourneyAtCoords(coords1100m, coordsIgnore), - }, - false, - }, - - { - "Departure radius 3", - makeParamsWithDepartureRadius(coordsRef, 1, "driver"), - []api.DriverJourney{ - makeDriverJourneyAtCoords(coords900m, coordsIgnore), - }, - true, - }, - - { - "Arrival radius 1", - makeParamsWithArrivalRadius(coordsRef, 1, "driver"), - []api.DriverJourney{ - makeDriverJourneyAtCoords(coordsIgnore, coords900m), - makeDriverJourneyAtCoords(coordsIgnore, coords1100m), - }, - true, - }, - - { - "Arrival radius 2", - makeParamsWithArrivalRadius(coordsRef, 2, "driver"), - []api.DriverJourney{ - makeDriverJourneyAtCoords(coordsIgnore, coords2100m), - makeDriverJourneyAtCoords(coordsIgnore, coords900m), - }, - true, - }, - - { - "Arrival radius 3", - makeParamsWithArrivalRadius(coordsRef, 1, "driver"), - []api.DriverJourney{ - makeDriverJourneyAtCoords(coordsIgnore, coords1100m), - }, - false, - }, - - { - "Arrival radius 4", - makeParamsWithArrivalRadius(coordsRef, 1, "driver"), - []api.DriverJourney{ - makeDriverJourneyAtCoords(coordsIgnore, coords900m), - }, - true, - }, - - { - "TimeDelta 1", - makeParamsWithTimeDelta(10, "driver"), - []api.DriverJourney{ - makeDriverJourneyAtDate(5), - }, - true, - }, - - { - "TimeDelta 2", - makeParamsWithTimeDelta(10, "driver"), - []api.DriverJourney{ - makeDriverJourneyAtDate(15), - }, - false, - }, - - { - "TimeDelta 3", - makeParamsWithTimeDelta(20, "driver"), - []api.DriverJourney{ - makeDriverJourneyAtDate(25), - makeDriverJourneyAtDate(15), - }, - true, - }, +var ( + coordsIgnore = util.Coord{Lat: 0, Lon: 0} + coordsRef = util.Coord{Lat: 46.1604531, Lon: -1.2219607} // reference + coords900m = util.Coord{Lat: 46.1613442, Lon: -1.2103736} // at ~900m from reference + coords1100m = util.Coord{Lat: 46.1613679, Lon: -1.2086563} // at ~1100m from reference + coords2100m = util.Coord{Lat: 46.1649225, Lon: -1.1954497} // at ~2100m from reference +) - { - "Count 1", - makeParamsWithCount(1, "driver"), - makeNDriverJourneys(1), - true, - }, +// tripTestCases are common to GET /driver_journeys, GET /passenger_journeys, +// GET /driver_regular_trips and GET /passenger_regular_trips +var tripTestCases = []tripTestCase{ + { + "No data", + &api.GetDriverJourneysParams{}, + []api.Trip{}, + false, + }, + + { + "Departure radius 1", + makeParamsWithDepartureRadius(coordsRef, 1, "driver"), + []api.Trip{ + makeTripAtCoords(coords900m, coordsIgnore), + makeTripAtCoords(coords1100m, coordsIgnore), + }, + true, + }, + + { + "Departure radius 2", + makeParamsWithDepartureRadius(coordsRef, 2, "driver"), + []api.Trip{ + makeTripAtCoords(coords900m, coordsIgnore), + makeTripAtCoords(coords2100m, coordsIgnore), + }, + true, + }, + + { + "Departure radius 3", + makeParamsWithDepartureRadius(coordsRef, 1, "driver"), + []api.Trip{ + makeTripAtCoords(coords1100m, coordsIgnore), + }, + false, + }, + + { + "Departure radius 3", + makeParamsWithDepartureRadius(coordsRef, 1, "driver"), + []api.Trip{ + makeTripAtCoords(coords900m, coordsIgnore), + }, + true, + }, + + { + "Arrival radius 1", + makeParamsWithArrivalRadius(coordsRef, 1, "driver"), + []api.Trip{ + makeTripAtCoords(coordsIgnore, coords900m), + makeTripAtCoords(coordsIgnore, coords1100m), + }, + true, + }, + + { + "Arrival radius 2", + makeParamsWithArrivalRadius(coordsRef, 2, "driver"), + []api.Trip{ + makeTripAtCoords(coordsIgnore, coords2100m), + makeTripAtCoords(coordsIgnore, coords900m), + }, + true, + }, + + { + "Arrival radius 3", + makeParamsWithArrivalRadius(coordsRef, 1, "driver"), + []api.Trip{ + makeTripAtCoords(coordsIgnore, coords1100m), + }, + false, + }, + + { + "Arrival radius 4", + makeParamsWithArrivalRadius(coordsRef, 1, "driver"), + []api.Trip{ + makeTripAtCoords(coordsIgnore, coords900m), + }, + true, + }, + + { + "Count 1", + makeParamsWithCount(1, "driver"), + makeNTrips(1), + true, + }, + + { + "Count 2", + makeParamsWithCount(0, "driver"), + makeNTrips(1), + false, + }, + + { + "Count 3", + makeParamsWithCount(2, "driver"), + makeNTrips(4), + true, + }, + + { + "Count 4 - count > n driver journeys", + makeParamsWithCount(1, "driver"), + makeNTrips(0), + false, + }, +} - { - "Count 2", - makeParamsWithCount(0, "driver"), - makeNDriverJourneys(1), - false, - }, +// journeyScheduleTestCases are test cases common to GET /driver_journeys and +// GET /passenger_journeys +var journeyScheduleTestCases = []journeyScheduleTestCase{ + { + "TimeDelta 1", + makeParamsWithTimeDelta(10, + "driver"), + []api.JourneySchedule{ + makeJourneyScheduleAtDate(5), + }, + true, + }, + + { + "TimeDelta 2", + makeParamsWithTimeDelta(10, + "driver"), + []api.JourneySchedule{ + makeJourneyScheduleAtDate(15), + }, + false, + }, + + { + "TimeDelta 3", + makeParamsWithTimeDelta(20, + "driver"), + []api.JourneySchedule{ + makeJourneyScheduleAtDate(25), + makeJourneyScheduleAtDate(15), + }, + true, + }, +} - { - "Count 3", - makeParamsWithCount(2, "driver"), - makeNDriverJourneys(4), - true, - }, +func TestDriverJourneys(t *testing.T) { + testCases := []driverJourneysTestCase{} - { - "Count 4 - count > n driver journeys", - makeParamsWithCount(1, "driver"), - makeNDriverJourneys(0), - false, - }, + for _, tc := range tripTestCases { + testCases = append(testCases, tc.promoteToDriverJourneysTestCase(t)) + } + for _, tc := range journeyScheduleTestCases { + testCases = append(testCases, tc.promoteToDriverJourneysTestCase(t)) } for _, tc := range testCases { @@ -210,163 +222,105 @@ func TestDriverJourneys(t *testing.T) { } func TestPassengerJourneys(t *testing.T) { - var ( - coordsIgnore = util.Coord{Lat: 0, Lon: 0} - coordsRef = util.Coord{Lat: 46.1604531, Lon: -1.2219607} // reference - coords900m = util.Coord{Lat: 46.1613442, Lon: -1.2103736} // at ~900m from reference - coords1100m = util.Coord{Lat: 46.1613679, Lon: -1.2086563} // at ~1100m from reference - coords2100m = util.Coord{Lat: 46.1649225, Lon: -1.1954497} // at ~2100m from reference - ) + testCases := []passengerJourneysTestCase{} - testCases := []struct { - name string - testParams api.GetJourneysParams - testData []api.PassengerJourney - expectNonEmptyResult bool - }{ + for _, tc := range tripTestCases { + testCases = append(testCases, tc.promoteToPassengerJourneysTestCase(t)) + } + for _, tc := range journeyScheduleTestCases { + testCases = append(testCases, tc.promoteToPassengerJourneysTestCase(t)) + } - { - "No data", - &api.GetPassengerJourneysParams{}, - []api.PassengerJourney{}, - false, - }, + for _, tc := range testCases { - { - "Departure radius 0", - makeParamsWithDepartureRadius(coordsRef, 1, "passenger"), - []api.PassengerJourney{ - makePassengerJourneyAtCoords(coords900m, coordsIgnore), - }, - true, - }, + t.Run(tc.name, func(t *testing.T) { - { - "Departure radius 1", - makeParamsWithDepartureRadius(coordsRef, 1, "passenger"), - []api.PassengerJourney{ - makePassengerJourneyAtCoords(coords900m, coordsIgnore), - makePassengerJourneyAtCoords(coords1100m, coordsIgnore), - }, - true, - }, + // If data is generated, then the test data and the requests date + // properties are shifted, so that there are no two tests falling the + // same week. The aim is to isolate the tests. + if generateTestData { + shiftToNextWeek() - { - "Departure radius 2", - makeParamsWithDepartureRadius(coordsRef, 2, "passenger"), - []api.PassengerJourney{ - makePassengerJourneyAtCoords(coords900m, coordsIgnore), - makePassengerJourneyAtCoords(coords2100m, coordsIgnore), - }, - true, - }, + for i := range tc.testData { + setJourneyDatesForGeneration(&tc.testData[i].JourneySchedule) + } - { - "Departure radius 3", - makeParamsWithDepartureRadius(coordsRef, 1, "passenger"), - []api.PassengerJourney{ - makePassengerJourneyAtCoords(coords1100m, coordsIgnore), - }, - false, - }, + setParamDatesForGeneration(tc.testParams) + } - { - "Arrival radius 1", - makeParamsWithArrivalRadius(coordsRef, 1, "passenger"), - []api.PassengerJourney{ - makePassengerJourneyAtCoords(coordsIgnore, coords900m), - makePassengerJourneyAtCoords(coordsIgnore, coords1100m), - }, - true, - }, + mockDB := db.NewMockDB() + mockDB.PassengerJourneys = tc.testData - { - "Arrival radius 2", - makeParamsWithArrivalRadius(coordsRef, 2, "passenger"), - []api.PassengerJourney{ - makePassengerJourneyAtCoords(coordsIgnore, coords2100m), - makePassengerJourneyAtCoords(coordsIgnore, coords900m), - }, - true, - }, + flags := test.NewFlags() + flags.ExpectNonEmpty = tc.expectNonEmptyResult - { - "Arrival radius 3", - makeParamsWithArrivalRadius(coordsRef, 1, "passenger"), - []api.PassengerJourney{ - makePassengerJourneyAtCoords(coordsIgnore, coords1100m), - }, - false, - }, + TestGetPassengerJourneysHelper( + t, + mockDB, + tc.testParams.(*api.GetPassengerJourneysParams), + flags, + ) + }) + } +} - { - "Arrival radius 4", - makeParamsWithArrivalRadius(coordsRef, 1, "passenger"), - []api.PassengerJourney{ - makePassengerJourneyAtCoords(coordsIgnore, coords900m), - }, - true, - }, +func TestGetDriverRegularTrips(t *testing.T) { + testCases := []driverRegularTripsTestCase{} - { - "TimeDelta 1", - makeParamsWithTimeDelta(10, "passenger"), - []api.PassengerJourney{ - makePassengerJourneyAtDate(5), - }, - true, - }, + for _, tc := range tripTestCases { + testCases = append(testCases, tc.promoteToDriverRegularTripsTestCase(t)) + } - { - "TimeDelta 2", - makeParamsWithTimeDelta(10, "passenger"), - []api.PassengerJourney{ - makePassengerJourneyAtDate(15), - }, - false, - }, + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { - { - "TimeDelta 3", - makeParamsWithTimeDelta(20, "passenger"), - []api.PassengerJourney{ - makePassengerJourneyAtDate(25), - makePassengerJourneyAtDate(15), - }, - true, - }, + // If data is generated, then the test data and the requests date + // properties are shifted, so that there are no two tests falling the + // same week. The aim is to isolate the tests. + if generateTestData { + shiftToNextWeek() - { - "Count 1", - makeParamsWithCount(1, "passenger"), - makeNPassengerJourneys(1), - true, - }, + for i := range tc.testData { + if tc.testData[i].Schedules != nil { + schedules := *tc.testData[i].Schedules + for _, schedule := range schedules { + if schedule.JourneySchedules != nil { + jschedules := *schedule.JourneySchedules + for i := range jschedules { + setJourneyDatesForGeneration(&jschedules[i]) + } + } + } + } + } - { - "Count 2", - makeParamsWithCount(0, "passenger"), - makeNPassengerJourneys(1), - false, - }, + setParamDatesForGeneration(tc.testParams) + } - { - "Count 3", - makeParamsWithCount(2, "passenger"), - makeNPassengerJourneys(4), - true, - }, + mockDB := db.NewMockDB() + mockDB.DriverRegularTrips = tc.testData - { - "Count 4 - count > n passenger journeys", - makeParamsWithCount(1, "passenger"), - makeNPassengerJourneys(0), - false, - }, + flags := test.NewFlags() + flags.ExpectNonEmpty = tc.expectNonEmptyResult + + TestGetDriverRegularTripsHelper( + t, + mockDB, + tc.testParams.(*api.GetDriverRegularTripsParams), + flags, + ) + }) } +} - for _, tc := range testCases { +func TestGetPassengerRegularTrips(t *testing.T) { + testCases := []passengerRegularTripsTestCase{} + + for _, tc := range tripTestCases { + testCases = append(testCases, tc.promoteToPassengerRegularTripsTestCase(t)) + } + for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { // If data is generated, then the test data and the requests date @@ -376,22 +330,32 @@ func TestPassengerJourneys(t *testing.T) { shiftToNextWeek() for i := range tc.testData { - setJourneyDatesForGeneration(&tc.testData[i].JourneySchedule) + if tc.testData[i].Schedules != nil { + schedules := *tc.testData[i].Schedules + for _, schedule := range schedules { + if schedule.JourneySchedules != nil { + jschedules := *schedule.JourneySchedules + for i := range jschedules { + setJourneyDatesForGeneration(&jschedules[i]) + } + } + } + } } setParamDatesForGeneration(tc.testParams) } mockDB := db.NewMockDB() - mockDB.PassengerJourneys = tc.testData + mockDB.PassengerRegularTrips = tc.testData flags := test.NewFlags() flags.ExpectNonEmpty = tc.expectNonEmptyResult - TestGetPassengerJourneysHelper( + TestGetPassengerRegularTripsHelper( t, mockDB, - tc.testParams.(*api.GetPassengerJourneysParams), + tc.testParams.(*api.GetPassengerRegularTripsParams), flags, ) }) diff --git a/cmd/service/commands_file_generation.go b/cmd/service/commands_file_generation.go index 3c6073b..036e866 100644 --- a/cmd/service/commands_file_generation.go +++ b/cmd/service/commands_file_generation.go @@ -76,6 +76,16 @@ func appendData(from *db.Mock, to *db.Mock) { from.GetUsers()..., ) + to.DriverRegularTrips = append( + to.GetDriverRegularTrips(), + from.GetDriverRegularTrips()..., + ) + + to.PassengerRegularTrips = append( + to.GetPassengerRegularTrips(), + from.GetPassengerRegularTrips()..., + ) + for _, booking := range from.GetBookings() { err := to.AddBooking(*booking) util.PanicIf(err) @@ -145,12 +155,42 @@ func setJourneyDatesForGeneration(schedule *api.JourneySchedule) { } } -func setParamDatesForGeneration(params api.GetJourneysParams) { +func setParamDatesForGeneration(params api.JourneyOrTripPartialParams) { switch p := params.(type) { case *api.GetDriverJourneysParams: p.DepartureDate += int(unixEpochCounter) case *api.GetPassengerJourneysParams: p.DepartureDate += int(unixEpochCounter) + + case *api.GetDriverRegularTripsParams: + if p.MinDepartureDate != nil { + *p.MinDepartureDate += int(unixEpochCounter) + } else { + a := int(unixEpochCounter) + p.MinDepartureDate = &a + } + + if p.MaxDepartureDate != nil { + *p.MaxDepartureDate += int(unixEpochCounter) + weekInSeconds + } else { + a := int(unixEpochCounter) + weekInSeconds + p.MaxDepartureDate = &a + } + + case *api.GetPassengerRegularTripsParams: + if p.MinDepartureDate != nil { + *p.MinDepartureDate += int(unixEpochCounter) + } else { + a := int(unixEpochCounter) + p.MinDepartureDate = &a + } + + if p.MaxDepartureDate != nil { + *p.MaxDepartureDate += int(unixEpochCounter) + weekInSeconds + } else { + a := int(unixEpochCounter) + weekInSeconds + p.MaxDepartureDate = &a + } } } diff --git a/cmd/service/db/data/testData.gen.json b/cmd/service/db/data/testData.gen.json index 36a1b43..5555b24 100644 --- a/cmd/service/db/data/testData.gen.json +++ b/cmd/service/db/data/testData.gen.json @@ -192,7 +192,7 @@ "id": "", "operator": "" }, - "passengerPickupDate": 6048005, + "passengerPickupDate": 6048000, "type": "DYNAMIC" }, { @@ -207,7 +207,7 @@ "id": "", "operator": "" }, - "passengerPickupDate": 6652815, + "passengerPickupDate": 6652800, "type": "DYNAMIC" }, { @@ -222,7 +222,7 @@ "id": "", "operator": "" }, - "passengerPickupDate": 7257625, + "passengerPickupDate": 7257600, "type": "DYNAMIC" }, { @@ -237,7 +237,7 @@ "id": "", "operator": "" }, - "passengerPickupDate": 7257615, + "passengerPickupDate": 7257600, "type": "DYNAMIC" }, { @@ -252,7 +252,7 @@ "id": "", "operator": "" }, - "passengerPickupDate": 7862400, + "passengerPickupDate": 7257600, "type": "DYNAMIC" }, { @@ -267,7 +267,7 @@ "id": "", "operator": "" }, - "passengerPickupDate": 8467200, + "passengerPickupDate": 7257600, "type": "DYNAMIC" }, { @@ -282,7 +282,8 @@ "id": "", "operator": "" }, - "passengerPickupDate": 9072000, + "driverDepartureDate": 26611200, + "passengerPickupDate": 8467205, "type": "DYNAMIC" }, { @@ -297,7 +298,8 @@ "id": "", "operator": "" }, - "passengerPickupDate": 9072000, + "driverDepartureDate": 27820800, + "passengerPickupDate": 9072015, "type": "DYNAMIC" }, { @@ -312,7 +314,8 @@ "id": "", "operator": "" }, - "passengerPickupDate": 9072000, + "driverDepartureDate": 29030400, + "passengerPickupDate": 9676825, "type": "DYNAMIC" }, { @@ -327,7 +330,8 @@ "id": "", "operator": "" }, - "passengerPickupDate": 9072000, + "driverDepartureDate": 29030400, + "passengerPickupDate": 9676815, "type": "DYNAMIC" } ], @@ -348,6 +352,70 @@ "passengerPickupDate": 10886400, "type": "DYNAMIC" }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 46.1613679, + "passengerPickupLng": -1.2086563, + "passenger": { + "alias": "", + "id": "", + "operator": "" + }, + "driverDepartureDate": 10886400, + "passengerPickupDate": 10886400, + "type": "DYNAMIC" + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 46.1613442, + "passengerPickupLng": -1.2103736, + "passenger": { + "alias": "", + "id": "", + "operator": "" + }, + "driverDepartureDate": 11491200, + "passengerPickupDate": 11491200, + "type": "DYNAMIC" + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 46.1649225, + "passengerPickupLng": -1.1954497, + "passenger": { + "alias": "", + "id": "", + "operator": "" + }, + "driverDepartureDate": 11491200, + "passengerPickupDate": 11491200, + "type": "DYNAMIC" + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 46.1613679, + "passengerPickupLng": -1.2086563, + "passenger": { + "alias": "", + "id": "", + "operator": "" + }, + "driverDepartureDate": 12096000, + "passengerPickupDate": 12096000, + "type": "DYNAMIC" + }, { "duration": 0, "operator": "example.com", @@ -360,57 +428,744 @@ "id": "", "operator": "" }, - "driverDepartureDate": 11491200, - "passengerPickupDate": 11491200, - "type": "DYNAMIC" + "driverDepartureDate": 12700800, + "passengerPickupDate": 12700800, + "type": "DYNAMIC" + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 46.1613442, + "passengerDropLng": -1.2103736, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "passenger": { + "alias": "", + "id": "", + "operator": "" + }, + "driverDepartureDate": 13305600, + "passengerPickupDate": 13305600, + "type": "DYNAMIC" + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 46.1613679, + "passengerDropLng": -1.2086563, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "passenger": { + "alias": "", + "id": "", + "operator": "" + }, + "driverDepartureDate": 13305600, + "passengerPickupDate": 13305600, + "type": "DYNAMIC" + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 46.1649225, + "passengerDropLng": -1.1954497, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "passenger": { + "alias": "", + "id": "", + "operator": "" + }, + "driverDepartureDate": 13910400, + "passengerPickupDate": 13910400, + "type": "DYNAMIC" + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 46.1613442, + "passengerDropLng": -1.2103736, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "passenger": { + "alias": "", + "id": "", + "operator": "" + }, + "driverDepartureDate": 13910400, + "passengerPickupDate": 13910400, + "type": "DYNAMIC" + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 46.1613679, + "passengerDropLng": -1.2086563, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "passenger": { + "alias": "", + "id": "", + "operator": "" + }, + "driverDepartureDate": 14515200, + "passengerPickupDate": 14515200, + "type": "DYNAMIC" + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 46.1613442, + "passengerDropLng": -1.2103736, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "passenger": { + "alias": "", + "id": "", + "operator": "" + }, + "driverDepartureDate": 15120000, + "passengerPickupDate": 15120000, + "type": "DYNAMIC" + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "passenger": { + "alias": "", + "id": "", + "operator": "" + }, + "driverDepartureDate": 15724800, + "passengerPickupDate": 15724800, + "type": "DYNAMIC" + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "passenger": { + "alias": "", + "id": "", + "operator": "" + }, + "driverDepartureDate": 16329600, + "passengerPickupDate": 16329600, + "type": "DYNAMIC" + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "passenger": { + "alias": "", + "id": "", + "operator": "" + }, + "driverDepartureDate": 16934400, + "passengerPickupDate": 16934400, + "type": "DYNAMIC" + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "passenger": { + "alias": "", + "id": "", + "operator": "" + }, + "driverDepartureDate": 16934400, + "passengerPickupDate": 16934400, + "type": "DYNAMIC" + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "passenger": { + "alias": "", + "id": "", + "operator": "" + }, + "driverDepartureDate": 16934400, + "passengerPickupDate": 16934400, + "type": "DYNAMIC" + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "passenger": { + "alias": "", + "id": "", + "operator": "" + }, + "driverDepartureDate": 16934400, + "passengerPickupDate": 16934400, + "type": "DYNAMIC" + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "passenger": { + "alias": "", + "id": "", + "operator": "" + }, + "driverDepartureDate": 26611200, + "passengerPickupDate": 18144005, + "type": "DYNAMIC" + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "passenger": { + "alias": "", + "id": "", + "operator": "" + }, + "driverDepartureDate": 27820800, + "passengerPickupDate": 18748815, + "type": "DYNAMIC" + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "passenger": { + "alias": "", + "id": "", + "operator": "" + }, + "driverDepartureDate": 29030400, + "passengerPickupDate": 19353625, + "type": "DYNAMIC" + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "passenger": { + "alias": "", + "id": "", + "operator": "" + }, + "driverDepartureDate": 29030400, + "passengerPickupDate": 19353615, + "type": "DYNAMIC" + } + ], + "driverRegularTrips": [ + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 46.1613442, + "passengerPickupLng": -1.2103736, + "driver": { + "alias": "", + "id": "", + "operator": "" + }, + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 21020400, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 46.1613679, + "passengerPickupLng": -1.2086563, + "driver": { + "alias": "", + "id": "", + "operator": "" + }, + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 21020400, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 46.1613442, + "passengerPickupLng": -1.2103736, + "driver": { + "alias": "", + "id": "", + "operator": "" + }, + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 21625200, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 46.1649225, + "passengerPickupLng": -1.1954497, + "driver": { + "alias": "", + "id": "", + "operator": "" + }, + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 21625200, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 46.1613679, + "passengerPickupLng": -1.2086563, + "driver": { + "alias": "", + "id": "", + "operator": "" + }, + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 22230000, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 46.1613442, + "passengerPickupLng": -1.2103736, + "driver": { + "alias": "", + "id": "", + "operator": "" + }, + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 22834800, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 46.1613442, + "passengerDropLng": -1.2103736, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "driver": { + "alias": "", + "id": "", + "operator": "" + }, + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 23439600, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 46.1613679, + "passengerDropLng": -1.2086563, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "driver": { + "alias": "", + "id": "", + "operator": "" + }, + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 23439600, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 46.1649225, + "passengerDropLng": -1.1954497, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "driver": { + "alias": "", + "id": "", + "operator": "" + }, + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 24044400, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 46.1613442, + "passengerDropLng": -1.2103736, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "driver": { + "alias": "", + "id": "", + "operator": "" + }, + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 24044400, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 46.1613679, + "passengerDropLng": -1.2086563, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "driver": { + "alias": "", + "id": "", + "operator": "" + }, + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 24649200, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 46.1613442, + "passengerDropLng": -1.2103736, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "driver": { + "alias": "", + "id": "", + "operator": "" + }, + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 25254000, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] }, { "duration": 0, "operator": "example.com", "passengerDropLat": 0, "passengerDropLng": 0, - "passengerPickupLat": 46.1613679, - "passengerPickupLng": -1.2086563, - "passenger": { + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "driver": { "alias": "", "id": "", "operator": "" }, - "driverDepartureDate": 11491200, - "passengerPickupDate": 11491200, - "type": "DYNAMIC" + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 25858800, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] }, { "duration": 0, "operator": "example.com", "passengerDropLat": 0, "passengerDropLng": 0, - "passengerPickupLat": 46.1613442, - "passengerPickupLng": -1.2103736, - "passenger": { + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "driver": { "alias": "", "id": "", "operator": "" }, - "driverDepartureDate": 12096000, - "passengerPickupDate": 12096000, - "type": "DYNAMIC" + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 26463600, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] }, { "duration": 0, "operator": "example.com", "passengerDropLat": 0, "passengerDropLng": 0, - "passengerPickupLat": 46.1649225, - "passengerPickupLng": -1.1954497, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "driver": { + "alias": "", + "id": "", + "operator": "" + }, + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 27068400, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "driver": { + "alias": "", + "id": "", + "operator": "" + }, + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 27068400, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "driver": { + "alias": "", + "id": "", + "operator": "" + }, + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 27068400, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] + }, + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 0, + "passengerPickupLng": 0, + "driver": { + "alias": "", + "id": "", + "operator": "" + }, + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 27068400, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] + } + ], + "passengerRegularTrips": [ + { + "duration": 0, + "operator": "example.com", + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 46.1613442, + "passengerPickupLng": -1.2103736, "passenger": { "alias": "", "id": "", "operator": "" }, - "driverDepartureDate": 12096000, - "passengerPickupDate": 12096000, - "type": "DYNAMIC" + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 28882800, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] }, { "duration": 0, @@ -424,79 +1179,124 @@ "id": "", "operator": "" }, - "driverDepartureDate": 12700800, - "passengerPickupDate": 12700800, - "type": "DYNAMIC" + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 28882800, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] }, { "duration": 0, "operator": "example.com", - "passengerDropLat": 46.1613442, - "passengerDropLng": -1.2103736, - "passengerPickupLat": 0, - "passengerPickupLng": 0, + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 46.1613442, + "passengerPickupLng": -1.2103736, "passenger": { "alias": "", "id": "", "operator": "" }, - "driverDepartureDate": 13305600, - "passengerPickupDate": 13305600, - "type": "DYNAMIC" + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 29487600, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] }, { "duration": 0, "operator": "example.com", - "passengerDropLat": 46.1613679, - "passengerDropLng": -1.2086563, - "passengerPickupLat": 0, - "passengerPickupLng": 0, + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 46.1649225, + "passengerPickupLng": -1.1954497, "passenger": { "alias": "", "id": "", "operator": "" }, - "driverDepartureDate": 13305600, - "passengerPickupDate": 13305600, - "type": "DYNAMIC" + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 29487600, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] }, { "duration": 0, "operator": "example.com", - "passengerDropLat": 46.1649225, - "passengerDropLng": -1.1954497, - "passengerPickupLat": 0, - "passengerPickupLng": 0, + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 46.1613679, + "passengerPickupLng": -1.2086563, "passenger": { "alias": "", "id": "", "operator": "" }, - "driverDepartureDate": 13910400, - "passengerPickupDate": 13910400, - "type": "DYNAMIC" + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 30092400, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] }, { "duration": 0, "operator": "example.com", - "passengerDropLat": 46.1613442, - "passengerDropLng": -1.2103736, - "passengerPickupLat": 0, - "passengerPickupLng": 0, + "passengerDropLat": 0, + "passengerDropLng": 0, + "passengerPickupLat": 46.1613442, + "passengerPickupLng": -1.2103736, "passenger": { "alias": "", "id": "", "operator": "" }, - "driverDepartureDate": 13910400, - "passengerPickupDate": 13910400, - "type": "DYNAMIC" + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 30697200, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] }, { "duration": 0, "operator": "example.com", - "passengerDropLat": 46.1613679, - "passengerDropLng": -1.2086563, + "passengerDropLat": 46.1613442, + "passengerDropLng": -1.2103736, "passengerPickupLat": 0, "passengerPickupLng": 0, "passenger": { @@ -504,15 +1304,24 @@ "id": "", "operator": "" }, - "driverDepartureDate": 14515200, - "passengerPickupDate": 14515200, - "type": "DYNAMIC" + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 31302000, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] }, { "duration": 0, "operator": "example.com", - "passengerDropLat": 46.1613442, - "passengerDropLng": -1.2103736, + "passengerDropLat": 46.1613679, + "passengerDropLng": -1.2086563, "passengerPickupLat": 0, "passengerPickupLng": 0, "passenger": { @@ -520,15 +1329,24 @@ "id": "", "operator": "" }, - "driverDepartureDate": 15120000, - "passengerPickupDate": 15120000, - "type": "DYNAMIC" + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 31302000, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] }, { "duration": 0, "operator": "example.com", - "passengerDropLat": 0, - "passengerDropLng": 0, + "passengerDropLat": 46.1649225, + "passengerDropLng": -1.1954497, "passengerPickupLat": 0, "passengerPickupLng": 0, "passenger": { @@ -536,15 +1354,24 @@ "id": "", "operator": "" }, - "driverDepartureDate": 15724800, - "passengerPickupDate": 15724805, - "type": "DYNAMIC" + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 31906800, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] }, { "duration": 0, "operator": "example.com", - "passengerDropLat": 0, - "passengerDropLng": 0, + "passengerDropLat": 46.1613442, + "passengerDropLng": -1.2103736, "passengerPickupLat": 0, "passengerPickupLng": 0, "passenger": { @@ -552,15 +1379,24 @@ "id": "", "operator": "" }, - "driverDepartureDate": 16329600, - "passengerPickupDate": 16329615, - "type": "DYNAMIC" + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 31906800, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] }, { "duration": 0, "operator": "example.com", - "passengerDropLat": 0, - "passengerDropLng": 0, + "passengerDropLat": 46.1613679, + "passengerDropLng": -1.2086563, "passengerPickupLat": 0, "passengerPickupLng": 0, "passenger": { @@ -568,15 +1404,24 @@ "id": "", "operator": "" }, - "driverDepartureDate": 16934400, - "passengerPickupDate": 16934425, - "type": "DYNAMIC" + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 32511600, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] }, { "duration": 0, "operator": "example.com", - "passengerDropLat": 0, - "passengerDropLng": 0, + "passengerDropLat": 46.1613442, + "passengerDropLng": -1.2103736, "passengerPickupLat": 0, "passengerPickupLng": 0, "passenger": { @@ -584,9 +1429,18 @@ "id": "", "operator": "" }, - "driverDepartureDate": 16934400, - "passengerPickupDate": 16934415, - "type": "DYNAMIC" + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 33116400, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] }, { "duration": 0, @@ -600,9 +1454,18 @@ "id": "", "operator": "" }, - "driverDepartureDate": 17539200, - "passengerPickupDate": 17539200, - "type": "DYNAMIC" + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 33721200, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] }, { "duration": 0, @@ -616,9 +1479,18 @@ "id": "", "operator": "" }, - "driverDepartureDate": 18144000, - "passengerPickupDate": 18144000, - "type": "DYNAMIC" + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 34326000, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] }, { "duration": 0, @@ -632,9 +1504,18 @@ "id": "", "operator": "" }, - "driverDepartureDate": 18748800, - "passengerPickupDate": 18748800, - "type": "DYNAMIC" + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 34930800, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] }, { "duration": 0, @@ -648,9 +1529,18 @@ "id": "", "operator": "" }, - "driverDepartureDate": 18748800, - "passengerPickupDate": 18748800, - "type": "DYNAMIC" + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 34930800, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] }, { "duration": 0, @@ -664,9 +1554,18 @@ "id": "", "operator": "" }, - "driverDepartureDate": 18748800, - "passengerPickupDate": 18748800, - "type": "DYNAMIC" + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 34930800, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] }, { "duration": 0, @@ -680,9 +1579,18 @@ "id": "", "operator": "" }, - "driverDepartureDate": 18748800, - "passengerPickupDate": 18748800, - "type": "DYNAMIC" + "Schedules": [ + { + "journeySchedules": [ + { + "passengerPickupDate": 34930800, + "type": "DYNAMIC" + } + ], + "passengerPickupDay": "TUE", + "passengerPickupTimeOfDay": "08:00:00" + } + ] } ], "bookings": [ @@ -692,7 +1600,7 @@ "id": "", "operator": "" }, - "id": "0ad346f9-e692-3ab1-d2f0-91785e9ca0ea", + "id": "85fbe72b-6064-2890-04a5-31f967898df5", "passenger": { "alias": "", "id": "", @@ -712,7 +1620,7 @@ "id": "", "operator": "" }, - "id": "68087cc0-282c-35d9-ad8b-51bf6a35a933", + "id": "590c1440-9888-b5b0-7d51-a817ee07c3f2", "passenger": { "alias": "", "id": "", @@ -732,7 +1640,7 @@ "id": "", "operator": "" }, - "id": "1b06f7b5-67c7-f231-9bf3-9f28aa391537", + "id": "0ad346f9-e692-3ab1-d2f0-91785e9ca0ea", "passenger": { "alias": "", "id": "", @@ -744,7 +1652,7 @@ "passengerPickupLat": 0, "passengerPickupLng": 0, "price": {}, - "status": "VALIDATED" + "status": "WAITING_CONFIRMATION" }, { "driver": { @@ -752,7 +1660,7 @@ "id": "", "operator": "" }, - "id": "ce140275-2398-b471-e9a9-4ddcec56059b", + "id": "68087cc0-282c-35d9-ad8b-51bf6a35a933", "passenger": { "alias": "", "id": "", @@ -792,7 +1700,7 @@ "id": "", "operator": "" }, - "id": "2f8282cb-e2f9-696f-3144-c0aa4ced56db", + "id": "ffda9299-b1d9-fafa-3d47-844c536f73c2", "passenger": { "alias": "", "id": "", @@ -804,7 +1712,7 @@ "passengerPickupLat": 0, "passengerPickupLng": 0, "price": {}, - "status": "WAITING_CONFIRMATION" + "status": "CONFIRMED" }, { "driver": { @@ -812,7 +1720,7 @@ "id": "", "operator": "" }, - "id": "e2807d9c-1dce-26af-00ca-81d4fe11c23e", + "id": "2f8282cb-e2f9-696f-3144-c0aa4ced56db", "passenger": { "alias": "", "id": "", @@ -832,7 +1740,7 @@ "id": "", "operator": "" }, - "id": "590c1440-9888-b5b0-7d51-a817ee07c3f2", + "id": "e2807d9c-1dce-26af-00ca-81d4fe11c23e", "passenger": { "alias": "", "id": "", @@ -852,7 +1760,7 @@ "id": "", "operator": "" }, - "id": "b2892d57-f402-cd4a-2c11-08cc823ae0c5", + "id": "1b06f7b5-67c7-f231-9bf3-9f28aa391537", "passenger": { "alias": "", "id": "", @@ -864,7 +1772,7 @@ "passengerPickupLat": 0, "passengerPickupLng": 0, "price": {}, - "status": "CANCELLED" + "status": "VALIDATED" }, { "driver": { @@ -872,7 +1780,7 @@ "id": "", "operator": "" }, - "id": "85fbe72b-6064-2890-04a5-31f967898df5", + "id": "f84f0c93-2990-ae59-ee94-8e4413ce4e81", "passenger": { "alias": "", "id": "", @@ -884,7 +1792,7 @@ "passengerPickupLat": 0, "passengerPickupLng": 0, "price": {}, - "status": "WAITING_CONFIRMATION" + "status": "CANCELLED" }, { "driver": { @@ -892,7 +1800,7 @@ "id": "", "operator": "" }, - "id": "f84f0c93-2990-ae59-ee94-8e4413ce4e81", + "id": "ce140275-2398-b471-e9a9-4ddcec56059b", "passenger": { "alias": "", "id": "", @@ -904,7 +1812,7 @@ "passengerPickupLat": 0, "passengerPickupLng": 0, "price": {}, - "status": "CANCELLED" + "status": "WAITING_CONFIRMATION" }, { "driver": { @@ -912,7 +1820,7 @@ "id": "", "operator": "" }, - "id": "ffda9299-b1d9-fafa-3d47-844c536f73c2", + "id": "b2892d57-f402-cd4a-2c11-08cc823ae0c5", "passenger": { "alias": "", "id": "", @@ -924,7 +1832,7 @@ "passengerPickupLat": 0, "passengerPickupLng": 0, "price": {}, - "status": "CONFIRMED" + "status": "CANCELLED" } ], "users": [ diff --git a/cmd/service/db/db.go b/cmd/service/db/db.go index baef5fe..db64e72 100644 --- a/cmd/service/db/db.go +++ b/cmd/service/db/db.go @@ -9,14 +9,8 @@ package db import ( - "bytes" "fmt" - // for the go:embed directive - _ "embed" - "encoding/json" - "io" - "github.com/fabmob/playground-standard-covoiturage/cmd/api" "github.com/google/uuid" ) @@ -25,6 +19,9 @@ type DB interface { // Getters should never return nil. GetDriverJourneys() []api.DriverJourney GetPassengerJourneys() []api.PassengerJourney + GetDriverRegularTrips() []api.DriverRegularTrip + GetPassengerRegularTrips() []api.PassengerRegularTrip + GetUsers() []api.User GetBookings() BookingsByID @@ -38,10 +35,12 @@ type DB interface { // Mock stores the data of the server in memory type Mock struct { - DriverJourneys []api.DriverJourney - PassengerJourneys []api.PassengerJourney - Bookings BookingsByID - Users []api.User + DriverJourneys []api.DriverJourney + PassengerJourneys []api.PassengerJourney + DriverRegularTrips []api.DriverRegularTrip + PassengerRegularTrips []api.PassengerRegularTrip + Bookings BookingsByID + Users []api.User } type BookingsByID map[api.BookingId]*api.Booking @@ -51,6 +50,8 @@ func NewMockDB() *Mock { m := Mock{} m.DriverJourneys = []api.DriverJourney{} m.PassengerJourneys = []api.PassengerJourney{} + m.DriverRegularTrips = []api.DriverRegularTrip{} + m.PassengerRegularTrips = []api.PassengerRegularTrip{} m.Bookings = BookingsByID{} m.Users = []api.User{} @@ -73,6 +74,22 @@ func (m *Mock) GetPassengerJourneys() []api.PassengerJourney { return m.PassengerJourneys } +func (m *Mock) GetDriverRegularTrips() []api.DriverRegularTrip { + if m.DriverRegularTrips == nil { + m.DriverRegularTrips = []api.DriverRegularTrip{} + } + + return m.DriverRegularTrips +} + +func (m *Mock) GetPassengerRegularTrips() []api.PassengerRegularTrip { + if m.PassengerRegularTrips == nil { + m.PassengerRegularTrips = []api.PassengerRegularTrip{} + } + + return m.PassengerRegularTrips +} + func (m *Mock) GetBookings() BookingsByID { if m.Bookings == nil { m.Bookings = BookingsByID{} @@ -119,97 +136,3 @@ type MissingBookingErr struct{} func (err MissingBookingErr) Error() string { return "missing_booking" } - -////////////////////////////////////////////////////////// -// MockDB from data -////////////////////////////////////////////////////////// - -type MockDBDataInterface struct { - DriverJourneys []api.DriverJourney `json:"driverJourneys"` - PassengerJourneys []api.PassengerJourney `json:"passengerJourneys"` - Bookings []*api.Booking `json:"bookings"` - Users []api.User `json:"users"` - Messages []api.PostMessagesJSONBody `json:"messages"` -} - -func toOutputData(m *Mock) MockDBDataInterface { - outputData := MockDBDataInterface{} - - outputData.DriverJourneys = m.DriverJourneys - outputData.PassengerJourneys = m.PassengerJourneys - outputData.Users = m.Users - - outputData.Bookings = make([]*api.Booking, 0, len(m.Bookings)) - for _, booking := range m.Bookings { - outputData.Bookings = append(outputData.Bookings, booking) - } - - return outputData -} - -func WriteData(m *Mock, w io.Writer) error { - outputData := toOutputData(m) - - jsonData, err := json.MarshalIndent(outputData, "", " ") - if err != nil { - return err - } - - _, err = w.Write(jsonData) - if err != nil { - return err - } - - return nil -} - -func fromInputData(inputData MockDBDataInterface) *Mock { - var m = NewMockDB() - - m.DriverJourneys = inputData.DriverJourneys - m.PassengerJourneys = inputData.PassengerJourneys - m.Users = inputData.Users - - m.Bookings = make(BookingsByID, len(inputData.Bookings)) - - for _, booking := range inputData.Bookings { - m.Bookings[booking.Id] = booking - } - - return m -} - -// NewMockDBWithDefaultData initiates a MockDB with default data -func NewMockDBWithDefaultData() *Mock { - return MustReadDefaultData() -} - -// NewMockDBWithData reads journey data from io.Reader with json data. -// It does not validate data against the standard. -func NewMockDBWithData(r io.Reader) (*Mock, error) { - var data MockDBDataInterface - - bytes, readErr := io.ReadAll(r) - if readErr != nil { - return nil, readErr - } - - err := json.Unmarshal(bytes, &data) - - return fromInputData(data), err -} - -// DefaultData stores default json data -// -//go:embed data/defaultData.json -var DefaultData []byte - -// MustReadDefaultData reads default data, and panics if any error occurs -func MustReadDefaultData() *Mock { - mockDB, err := NewMockDBWithData(bytes.NewReader(DefaultData)) - if err != nil { - panic(err) - } - - return mockDB -} diff --git a/cmd/service/db/db_data_interface.go b/cmd/service/db/db_data_interface.go new file mode 100644 index 0000000..10991f3 --- /dev/null +++ b/cmd/service/db/db_data_interface.go @@ -0,0 +1,108 @@ +package db + +import ( + "bytes" + "encoding/json" + "io" + + // for the go:embed directive + _ "embed" + + "github.com/fabmob/playground-standard-covoiturage/cmd/api" +) + +type MockDBDataInterface struct { + DriverJourneys []api.DriverJourney `json:"driverJourneys"` + PassengerJourneys []api.PassengerJourney `json:"passengerJourneys"` + DriverRegularTrips []api.DriverRegularTrip `json:"driverRegularTrips"` + PassengerRegularTrips []api.PassengerRegularTrip `json:"passengerRegularTrips"` + Bookings []*api.Booking `json:"bookings"` + Users []api.User `json:"users"` + Messages []api.PostMessagesJSONBody `json:"messages"` +} + +func toOutputData(m *Mock) MockDBDataInterface { + outputData := MockDBDataInterface{} + + outputData.DriverJourneys = m.DriverJourneys + outputData.PassengerJourneys = m.PassengerJourneys + outputData.DriverRegularTrips = m.DriverRegularTrips + outputData.PassengerRegularTrips = m.PassengerRegularTrips + outputData.Users = m.Users + + outputData.Bookings = make([]*api.Booking, 0, len(m.Bookings)) + for _, booking := range m.Bookings { + outputData.Bookings = append(outputData.Bookings, booking) + } + + return outputData +} + +func WriteData(m *Mock, w io.Writer) error { + outputData := toOutputData(m) + + jsonData, err := json.MarshalIndent(outputData, "", " ") + if err != nil { + return err + } + + _, err = w.Write(jsonData) + if err != nil { + return err + } + + return nil +} + +func fromInputData(inputData MockDBDataInterface) *Mock { + var m = NewMockDB() + + m.DriverJourneys = inputData.DriverJourneys + m.PassengerJourneys = inputData.PassengerJourneys + m.DriverRegularTrips = inputData.DriverRegularTrips + m.PassengerRegularTrips = inputData.PassengerRegularTrips + m.Users = inputData.Users + + m.Bookings = make(BookingsByID, len(inputData.Bookings)) + + for _, booking := range inputData.Bookings { + m.Bookings[booking.Id] = booking + } + + return m +} + +// NewMockDBWithDefaultData initiates a MockDB with default data +func NewMockDBWithDefaultData() *Mock { + return MustReadDefaultData() +} + +// NewMockDBWithData reads journey data from io.Reader with json data. +// It does not validate data against the standard. +func NewMockDBWithData(r io.Reader) (*Mock, error) { + var data MockDBDataInterface + + bytes, readErr := io.ReadAll(r) + if readErr != nil { + return nil, readErr + } + + err := json.Unmarshal(bytes, &data) + + return fromInputData(data), err +} + +// DefaultData stores default json data +// +//go:embed data/defaultData.json +var DefaultData []byte + +// MustReadDefaultData reads default data, and panics if any error occurs +func MustReadDefaultData() *Mock { + mockDB, err := NewMockDBWithData(bytes.NewReader(DefaultData)) + if err != nil { + panic(err) + } + + return mockDB +} diff --git a/cmd/service/helpers.go b/cmd/service/helpers.go index b56caa5..f61f666 100644 --- a/cmd/service/helpers.go +++ b/cmd/service/helpers.go @@ -2,9 +2,12 @@ package service import ( "fmt" + "math" + "time" "github.com/fabmob/playground-standard-covoiturage/cmd/api" "github.com/fabmob/playground-standard-covoiturage/cmd/service/db" + "github.com/fabmob/playground-standard-covoiturage/cmd/util" "github.com/google/uuid" ) @@ -95,3 +98,149 @@ func userExists(user api.User, users []api.User) bool { return false } + +// keepJourney checks a journey's trip and schedule (common properties to +// passenger and driver journeys) against the query parameters. +func keepJourney(params api.GetJourneysParams, trip api.Trip, schedule api.JourneySchedule) bool { + tripOK := keepTrip(params, trip) + + var ( + expectedDate = float64(params.GetDepartureDate()) + gotDate = float64(schedule.PassengerPickupDate) + maxDiff = float64(params.GetTimeDelta()) + ) + + timeDeltaOK := math.Abs(gotDate-expectedDate) < maxDiff + + return tripOK && timeDeltaOK +} + +// filterSchedules filters schedules for regular trips given query parameters. +// Expects non-nil "schedules" argument. +func keepSchedule(params api.GetRegularTripParams, schedule api.Schedule) (bool, error) { + + if schedule.PassengerPickupDay == nil || schedule.PassengerPickupTimeOfDay == nil { + return false, nil + } + + passengerPickupDay := *schedule.PassengerPickupDay + passengerPickupTimeOfDay := *schedule.PassengerPickupTimeOfDay + + validWeekDay := isAllowedWeekday(passengerPickupDay, params.GetDepartureWeekDays()) + + d, err := durationBetweenTimeOfDays(passengerPickupTimeOfDay, params.GetDepartureTimeOfDay()) + if err != nil { + return false, err + } + validTimeOfDay := int(d) <= params.GetTimeDelta() + + validPeriod := true + + if schedule.JourneySchedules != nil { + validPeriod = anyJourneyScheduleInMinMax(*schedule.JourneySchedules, + params.GetMinDepartureDate(), params.GetMaxDepartureDate(), + ) + } + + return validWeekDay && validTimeOfDay && validPeriod, nil +} + +// anyScheduleOK checks that at least one schedule is compliant to the query +// parameters. +func anyScheduleOK(schedules *[]api.Schedule, params api.GetRegularTripParams) (bool, error) { + if schedules == nil { + return false, nil + } + + for _, sch := range *schedules { + scheduleOK, err := keepSchedule(params, sch) + if err != nil { + return false, err + } + + if scheduleOK { + return true, nil + } + } + + return false, nil +} + +// isAllowedWeekday checks if day is in allowedDays +func isAllowedWeekday(day api.SchedulePassengerPickupDay, allowedDays []string) bool { + validDay := false + + for _, allowedDay := range allowedDays { + if string(day) == allowedDay { + validDay = true + break + } + } + + return validDay +} + +// anyJourneyScheduleInMinMax checks if any JourneySchedule has a UNIX +// passenger pickup date in between min and max UNIX dates. +func anyJourneyScheduleInMinMax(journeySchedules []api.JourneySchedule, min, max *int) bool { + for _, js := range journeySchedules { + if min != nil { + if belowMin := js.PassengerPickupDate < int64(*min); belowMin { + continue + } + } + + if max != nil { + if aboveMax := js.PassengerPickupDate > int64(*max); aboveMax { + continue + } + } + + return true + } + + return false +} + +// durationBetweenTimeOfDays returns the duration between two partial times, +// considering them on the same day. +func durationBetweenTimeOfDays(t1, t2 string) (float64, error) { + time1, err := time.Parse("15:04:05", t1) + if err != nil { + return 0, err + } + + time2, err := time.Parse("15:04:05", t2) + if err != nil { + return 0, err + } + + return time1.Sub(time2).Abs().Seconds(), nil +} + +// keepTrip checks if a trip object is compliant with the query parameters +func keepTrip(params api.JourneyOrTripPartialParams, trip api.Trip) bool { + coordsRequestDeparture := util.Coord{ + Lat: float64(params.GetDepartureLat()), + Lon: float64(params.GetDepartureLng()), + } + coordsResponseDeparture := util.Coord{ + Lat: trip.PassengerPickupLat, + Lon: trip.PassengerPickupLng, + } + departureRadiusOK := util.Distance(coordsRequestDeparture, coordsResponseDeparture) <= + params.GetDepartureRadius() + + coordsRequestArrival := util.Coord{ + Lat: float64(params.GetArrivalLat()), + Lon: float64(params.GetArrivalLng()), + } + coordsResponseArrival := util.Coord{ + Lat: trip.PassengerDropLat, + Lon: trip.PassengerDropLng, + } + arrivalRadiusOK := util.Distance(coordsRequestArrival, coordsResponseArrival) <= + params.GetArrivalRadius() + + return arrivalRadiusOK && departureRadiusOK +} diff --git a/cmd/service/testing.go b/cmd/service/testing.go index 3c7e6f0..4053b41 100644 --- a/cmd/service/testing.go +++ b/cmd/service/testing.go @@ -37,38 +37,21 @@ func setupTestServer( return handler, ctx, rec } -func makeNDriverJourneys(n int) []api.DriverJourney { - driverJourneys := make([]api.DriverJourney, 0, n) +func makeNTrips(n int) []api.Trip { + trips := make([]api.Trip, 0, n) for i := 0; i < n; i++ { - driverJourneys = append(driverJourneys, api.NewDriverJourney()) + trips = append(trips, api.NewTrip()) } - return driverJourneys + return trips } -func makeNPassengerJourneys(n int) []api.PassengerJourney { - passengerJourneys := make([]api.PassengerJourney, 0, n) +func makeTripAtCoords(coordPickup, coordDrop util.Coord) api.Trip { + t := api.NewTrip() + updateTripCoords(&t, coordPickup, coordDrop) - for i := 0; i < n; i++ { - passengerJourneys = append(passengerJourneys, api.NewPassengerJourney()) - } - - return passengerJourneys -} - -func makeDriverJourneyAtCoords(coordPickup, coordDrop util.Coord) api.DriverJourney { - dj := api.NewDriverJourney() - updateTripCoords(&dj.Trip, coordPickup, coordDrop) - - return dj -} - -func makePassengerJourneyAtCoords(coordPickup, coordDrop util.Coord) api.PassengerJourney { - pj := api.NewPassengerJourney() - updateTripCoords(&pj.Trip, coordPickup, coordDrop) - - return pj + return t } func updateTripCoords(t *api.Trip, coordPickup, coordDrop util.Coord) { @@ -78,26 +61,32 @@ func updateTripCoords(t *api.Trip, coordPickup, coordDrop util.Coord) { t.PassengerDropLng = coordDrop.Lon } -func makeDriverJourneyAtDate(date int64) api.DriverJourney { - dj := api.NewDriverJourney() - dj.PassengerPickupDate = date +func makeJourneyScheduleAtDate(date int64) api.JourneySchedule { + js := api.NewJourneySchedule() + js.PassengerPickupDate = date - return dj + // DriverDepartureDate required for passenger journeys + dep := int64(0) + js.DriverDepartureDate = &dep + + return js } -func makePassengerJourneyAtDate(date int64) api.PassengerJourney { - pj := api.NewPassengerJourney() - pj.PassengerPickupDate = date +func castDriverToPassengerJourney(p *api.GetDriverJourneysParams) *api.GetPassengerJourneysParams { + if p == nil { + return nil + } - return pj + castedP := api.GetPassengerJourneysParams(*p) + return &castedP } -func castDriverToPassenger(p *api.GetDriverJourneysParams) *api.GetPassengerJourneysParams { +func castDriverToPassengerTrip(p *api.GetDriverRegularTripsParams) *api.GetPassengerRegularTripsParams { if p == nil { return nil } - castedP := api.GetPassengerJourneysParams(*p) + castedP := api.GetPassengerRegularTripsParams(*p) return &castedP } @@ -106,7 +95,7 @@ func makeParamsWithDepartureRadius(departureCoord util.Coord, departureRadius fl params.DepartureRadius = &departureRadius if driverOrPassenger == "passenger" { - return castDriverToPassenger(params) + return castDriverToPassengerJourney(params) } return params @@ -117,7 +106,7 @@ func makeParamsWithArrivalRadius(arrivalCoord util.Coord, arrivalRadius float32, params.ArrivalRadius = &arrivalRadius if driverOrPassenger == "passenger" { - return castDriverToPassenger(params) + return castDriverToPassengerJourney(params) } return params @@ -128,7 +117,7 @@ func makeParamsWithTimeDelta(date int, driverOrPassenger string) api.GetJourneys params.TimeDelta = &date if driverOrPassenger == "passenger" { - return castDriverToPassenger(params) + return castDriverToPassengerJourney(params) } return params @@ -139,7 +128,7 @@ func makeParamsWithCount(count int, driverOrPassenger string) api.GetJourneysPar params.Count = &count if driverOrPassenger == "passenger" { - return castDriverToPassenger(params) + return castDriverToPassengerJourney(params) } return params @@ -238,6 +227,38 @@ func checkAssertionResults(t *testing.T, assertionResults []testassert.Result) { } } +func requestAll(t *testing.T, driverOrPassenger string) api.GetJourneysParams { + t.Helper() + + var ( + largeTimeDelta = int(1e9) + largeRadius = float32(1e6) + ) + + switch driverOrPassenger { + case "driver": + params := api.GetDriverJourneysParams{} + params.DepartureDate = 1e9 + params.TimeDelta = &largeTimeDelta + params.DepartureRadius = &largeRadius + params.ArrivalRadius = &largeRadius + + return ¶ms + + case "passenger": + params := api.GetPassengerJourneysParams{} + params.DepartureDate = 1e9 + params.TimeDelta = &largeTimeDelta + params.DepartureRadius = &largeRadius + params.ArrivalRadius = &largeRadius + + return ¶ms + + default: + panic("invalid driverOrPassenger parameter") + } +} + ////////////////////////////////////////////////////////// type apiTestHelper interface { @@ -480,34 +501,289 @@ func TestGetPassengerJourneysHelper( ////////////////////////////////////////////////////////// -func requestAll(t *testing.T, driverOrPassenger string) api.GetJourneysParams { +type getDriverRegularTripsTestHelper struct { + params *api.GetDriverRegularTripsParams +} + +func (h getDriverRegularTripsTestHelper) makeRequest() (*http.Request, error) { + return api.NewGetDriverRegularTripsRequest(localServer, h.params) +} + +func (h getDriverRegularTripsTestHelper) callAPI(handler *StdCovServerImpl, ctx echo.Context) error { + return handler.GetDriverRegularTrips(ctx, *h.params) +} + +func (h getDriverRegularTripsTestHelper) testResponse(request *http.Request, response *http.Response, flags test.Flags) []testassert.Result { + return test.TestGetDriverRegularTripsResponse(request, response, flags) +} + +func TestGetDriverRegularTripsHelper( + t *testing.T, + mockDB *db.Mock, + params *api.GetDriverRegularTripsParams, + flags test.Flags, +) { + testAPI(t, getDriverRegularTripsTestHelper{params}, mockDB, flags) +} + +////////////////////////////////////////////////////////// + +type getPassengerRegularTripsTestHelper struct { + params *api.GetPassengerRegularTripsParams +} + +func (h getPassengerRegularTripsTestHelper) makeRequest() (*http.Request, error) { + return api.NewGetPassengerRegularTripsRequest(localServer, h.params) +} + +func (h getPassengerRegularTripsTestHelper) callAPI(handler *StdCovServerImpl, ctx echo.Context) error { + return handler.GetPassengerRegularTrips(ctx, *h.params) +} + +func (h getPassengerRegularTripsTestHelper) testResponse(request *http.Request, response *http.Response, flags test.Flags) []testassert.Result { + return test.TestGetPassengerRegularTripsResponse(request, response, flags) +} + +func TestGetPassengerRegularTripsHelper( + t *testing.T, + mockDB *db.Mock, + params *api.GetPassengerRegularTripsParams, + flags test.Flags, +) { + testAPI(t, getPassengerRegularTripsTestHelper{params}, mockDB, flags) +} + +type tripTestCase struct { + name string + testParams api.JourneyOrTripPartialParams + testData []api.Trip + expectNonEmptyResult bool +} + +type journeyScheduleTestCase struct { + name string + testParams api.GetJourneysParams + testData []api.JourneySchedule + expectNonEmptyResult bool +} + +type driverJourneysTestCase struct { + name string + testParams api.GetJourneysParams + testData []api.DriverJourney + expectNonEmptyResult bool +} + +func promotePartialParamsToJourneysParams(testParams api.JourneyOrTripPartialParams, typeStr string) api.GetJourneysParams { + + timeDelta := testParams.GetTimeDelta() + departureRadius := float32(testParams.GetDepartureRadius()) + arrivalRadius := float32(testParams.GetArrivalRadius()) + + promotedParams := &api.GetDriverJourneysParams{ + DepartureLat: float32(testParams.GetDepartureLat()), + DepartureLng: float32(testParams.GetDepartureLng()), + ArrivalLat: float32(testParams.GetArrivalLat()), + ArrivalLng: float32(testParams.GetArrivalLng()), + TimeDelta: &timeDelta, + DepartureRadius: &departureRadius, + ArrivalRadius: &arrivalRadius, + Count: testParams.GetCount(), + DepartureDate: 0, + } + + if typeStr == "passenger" { + return castDriverToPassengerJourney(promotedParams) + } + + return promotedParams +} + +func promotePartialParamsToTripParams(testParams api.JourneyOrTripPartialParams, typeStr string) api.GetRegularTripParams { + + timeDelta := testParams.GetTimeDelta() + departureRadius := float32(testParams.GetDepartureRadius()) + arrivalRadius := float32(testParams.GetArrivalRadius()) + + promotedParams := &api.GetDriverRegularTripsParams{ + DepartureLat: float32(testParams.GetDepartureLat()), + DepartureLng: float32(testParams.GetDepartureLng()), + ArrivalLat: float32(testParams.GetArrivalLat()), + ArrivalLng: float32(testParams.GetArrivalLng()), + TimeDelta: &timeDelta, + DepartureRadius: &departureRadius, + ArrivalRadius: &arrivalRadius, + Count: testParams.GetCount(), + MinDepartureDate: nil, + MaxDepartureDate: nil, + DepartureTimeOfDay: "08:00:00", + DepartureWeekdays: nil, + } + + if typeStr == "passenger" { + return castDriverToPassengerTrip(promotedParams) + } + + return promotedParams +} + +func (tc tripTestCase) promoteToDriverJourneysTestCase(t *testing.T) driverJourneysTestCase { t.Helper() - var ( - largeTimeDelta = int(1e9) - largeRadius = float32(1e6) - ) + promotedParams := promotePartialParamsToJourneysParams(tc.testParams, + "driver").(*api.GetDriverJourneysParams) - switch driverOrPassenger { - case "driver": - params := api.GetDriverJourneysParams{} - params.DepartureDate = 1e9 - params.TimeDelta = &largeTimeDelta - params.DepartureRadius = &largeRadius - params.ArrivalRadius = &largeRadius + promotedData := []api.DriverJourney{} - return ¶ms + for _, d := range tc.testData { + promotedTrip := api.NewDriverJourney() + promotedTrip.Trip = d - case "passenger": - params := api.GetPassengerJourneysParams{} - params.DepartureDate = 1e9 - params.TimeDelta = &largeTimeDelta - params.DepartureRadius = &largeRadius - params.ArrivalRadius = &largeRadius + promotedData = append(promotedData, promotedTrip) + } - return ¶ms + return driverJourneysTestCase{ + name: tc.name, + testParams: promotedParams, + testData: promotedData, + expectNonEmptyResult: tc.expectNonEmptyResult, + } +} - default: - panic("invalid driverOrPassenger parameter") +func (tc journeyScheduleTestCase) promoteToDriverJourneysTestCase(t *testing.T) driverJourneysTestCase { + t.Helper() + + promotedParams := promotePartialParamsToJourneysParams(tc.testParams, + "driver").(*api.GetDriverJourneysParams) + promotedParams.DepartureDate = tc.testParams.GetDepartureDate() + + promotedData := []api.DriverJourney{} + + for _, d := range tc.testData { + promotedTrip := api.NewDriverJourney() + promotedTrip.JourneySchedule = d + + promotedData = append(promotedData, promotedTrip) + } + + return driverJourneysTestCase{ + name: tc.name, + testParams: promotedParams, + testData: promotedData, + expectNonEmptyResult: tc.expectNonEmptyResult, + } +} + +type passengerJourneysTestCase struct { + name string + testParams api.GetJourneysParams + testData []api.PassengerJourney + expectNonEmptyResult bool +} + +func (tc tripTestCase) promoteToPassengerJourneysTestCase(t *testing.T) passengerJourneysTestCase { + t.Helper() + + promotedParams := promotePartialParamsToJourneysParams(tc.testParams, + "passenger").(*api.GetPassengerJourneysParams) + + promotedData := []api.PassengerJourney{} + + for _, d := range tc.testData { + promotedTrip := api.NewPassengerJourney() + promotedTrip.Trip = d + + promotedData = append(promotedData, promotedTrip) + } + + return passengerJourneysTestCase{ + name: tc.name, + testParams: promotedParams, + testData: promotedData, + expectNonEmptyResult: tc.expectNonEmptyResult, + } +} + +func (tc journeyScheduleTestCase) promoteToPassengerJourneysTestCase(t *testing.T) passengerJourneysTestCase { + t.Helper() + + promotedParams := promotePartialParamsToJourneysParams(tc.testParams, + "passenger").(*api.GetPassengerJourneysParams) + promotedParams.DepartureDate = tc.testParams.GetDepartureDate() + + promotedData := []api.PassengerJourney{} + + for _, d := range tc.testData { + promotedTrip := api.NewPassengerJourney() + promotedTrip.JourneySchedule = d + + promotedData = append(promotedData, promotedTrip) + } + + return passengerJourneysTestCase{ + name: tc.name, + testParams: promotedParams, + testData: promotedData, + expectNonEmptyResult: tc.expectNonEmptyResult, + } +} + +type driverRegularTripsTestCase struct { + name string + testParams api.GetRegularTripParams + testData []api.DriverRegularTrip + expectNonEmptyResult bool +} + +type passengerRegularTripsTestCase struct { + name string + testParams api.GetRegularTripParams + testData []api.PassengerRegularTrip + expectNonEmptyResult bool +} + +func (tc tripTestCase) promoteToDriverRegularTripsTestCase(t *testing.T) driverRegularTripsTestCase { + t.Helper() + + promotedParams := promotePartialParamsToTripParams(tc.testParams, + "driver").(*api.GetDriverRegularTripsParams) + + promotedData := []api.DriverRegularTrip{} + + for _, d := range tc.testData { + promotedTrip := api.NewDriverRegularTrip() + promotedTrip.Trip = d + + promotedData = append(promotedData, promotedTrip) + } + + return driverRegularTripsTestCase{ + name: tc.name, + testParams: promotedParams, + testData: promotedData, + expectNonEmptyResult: tc.expectNonEmptyResult, + } +} + +func (tc tripTestCase) promoteToPassengerRegularTripsTestCase(t *testing.T) passengerRegularTripsTestCase { + t.Helper() + + promotedParams := promotePartialParamsToTripParams(tc.testParams, + "passenger").(*api.GetPassengerRegularTripsParams) + + promotedData := []api.PassengerRegularTrip{} + + for _, d := range tc.testData { + promotedTrip := api.NewPassengerRegularTrip() + promotedTrip.Trip = d + + promotedData = append(promotedData, promotedTrip) + } + + return passengerRegularTripsTestCase{ + name: tc.name, + testParams: promotedParams, + testData: promotedData, + expectNonEmptyResult: tc.expectNonEmptyResult, } } diff --git a/cmd/test/WIP.md b/cmd/test/WIP.md index 315fe78..3a02d8b 100644 --- a/cmd/test/WIP.md +++ b/cmd/test/WIP.md @@ -47,3 +47,4 @@ Issues: - Reuse CarpoolBooking object in Booking object - DriverCarpoolBooking / FormatCarpoolBooking id format uuid - postConnections as operationId +- Schedule object: no required field ? diff --git a/cmd/test/assert/testing.go b/cmd/test/assert/testing.go index 022b9c9..bd36dfd 100644 --- a/cmd/test/assert/testing.go +++ b/cmd/test/assert/testing.go @@ -81,11 +81,12 @@ func makeJourneyRequestWithRadius( switch driverOrPassenger { case "driver": - request, err = params.MakeRequest("localhost:1323") + castedParams := api.GetDriverJourneysParams(params) + request, err = api.NewGetDriverJourneysRequest(localServer, &castedParams) util.PanicIf(err) case "passenger": castedParams := api.GetPassengerJourneysParams(params) - request, err = castedParams.MakeRequest("localhost:1323") + request, err = api.NewGetPassengerJourneysRequest(localServer, &castedParams) util.PanicIf(err) case "default": panic(errors.New("wrong value in test: driverOrPassenger")) diff --git a/cmd/test/commands/testCommands.gen.sh b/cmd/test/commands/testCommands.gen.sh index 3b44d6f..99f3cfb 100644 --- a/cmd/test/commands/testCommands.gen.sh +++ b/cmd/test/commands/testCommands.gen.sh @@ -7,14 +7,14 @@ export API_TOKEN="" echo "TestDriverJourneys/No_data" go run main.go test \ --method=GET \ - --url="$SERVER/driver_journeys?arrivalLat=0&arrivalLng=0&departureDate=604800&departureLat=0&departureLng=0" \ + --url="$SERVER/driver_journeys?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureDate=604800&departureLat=0&departureLng=0&departureRadius=1&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" echo "TestDriverJourneys/Departure_radius_1" go run main.go test \ --method=GET \ - --url="$SERVER/driver_journeys?arrivalLat=0&arrivalLng=0&departureDate=1209600&departureLat=46.160454&departureLng=-1.2219607&departureRadius=1" \ + --url="$SERVER/driver_journeys?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureDate=1209600&departureLat=46.160454&departureLng=-1.2219607&departureRadius=1&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" \ --expectNonEmpty @@ -22,7 +22,7 @@ go run main.go test \ echo "TestDriverJourneys/Departure_radius_2" go run main.go test \ --method=GET \ - --url="$SERVER/driver_journeys?arrivalLat=0&arrivalLng=0&departureDate=1814400&departureLat=46.160454&departureLng=-1.2219607&departureRadius=2" \ + --url="$SERVER/driver_journeys?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureDate=1814400&departureLat=46.160454&departureLng=-1.2219607&departureRadius=2&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" \ --expectNonEmpty @@ -30,14 +30,14 @@ go run main.go test \ echo "TestDriverJourneys/Departure_radius_3" go run main.go test \ --method=GET \ - --url="$SERVER/driver_journeys?arrivalLat=0&arrivalLng=0&departureDate=2419200&departureLat=46.160454&departureLng=-1.2219607&departureRadius=1" \ + --url="$SERVER/driver_journeys?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureDate=2419200&departureLat=46.160454&departureLng=-1.2219607&departureRadius=1&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" echo "TestDriverJourneys/Departure_radius_3#01" go run main.go test \ --method=GET \ - --url="$SERVER/driver_journeys?arrivalLat=0&arrivalLng=0&departureDate=3024000&departureLat=46.160454&departureLng=-1.2219607&departureRadius=1" \ + --url="$SERVER/driver_journeys?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureDate=3024000&departureLat=46.160454&departureLng=-1.2219607&departureRadius=1&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" \ --expectNonEmpty @@ -45,7 +45,7 @@ go run main.go test \ echo "TestDriverJourneys/Arrival_radius_1" go run main.go test \ --method=GET \ - --url="$SERVER/driver_journeys?arrivalLat=46.160454&arrivalLng=-1.2219607&arrivalRadius=1&departureDate=3628800&departureLat=0&departureLng=0" \ + --url="$SERVER/driver_journeys?arrivalLat=46.160454&arrivalLng=-1.2219607&arrivalRadius=1&departureDate=3628800&departureLat=0&departureLng=0&departureRadius=1&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" \ --expectNonEmpty @@ -53,7 +53,7 @@ go run main.go test \ echo "TestDriverJourneys/Arrival_radius_2" go run main.go test \ --method=GET \ - --url="$SERVER/driver_journeys?arrivalLat=46.160454&arrivalLng=-1.2219607&arrivalRadius=2&departureDate=4233600&departureLat=0&departureLng=0" \ + --url="$SERVER/driver_journeys?arrivalLat=46.160454&arrivalLng=-1.2219607&arrivalRadius=2&departureDate=4233600&departureLat=0&departureLng=0&departureRadius=1&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" \ --expectNonEmpty @@ -61,144 +61,174 @@ go run main.go test \ echo "TestDriverJourneys/Arrival_radius_3" go run main.go test \ --method=GET \ - --url="$SERVER/driver_journeys?arrivalLat=46.160454&arrivalLng=-1.2219607&arrivalRadius=1&departureDate=4838400&departureLat=0&departureLng=0" \ + --url="$SERVER/driver_journeys?arrivalLat=46.160454&arrivalLng=-1.2219607&arrivalRadius=1&departureDate=4838400&departureLat=0&departureLng=0&departureRadius=1&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" echo "TestDriverJourneys/Arrival_radius_4" go run main.go test \ --method=GET \ - --url="$SERVER/driver_journeys?arrivalLat=46.160454&arrivalLng=-1.2219607&arrivalRadius=1&departureDate=5443200&departureLat=0&departureLng=0" \ + --url="$SERVER/driver_journeys?arrivalLat=46.160454&arrivalLng=-1.2219607&arrivalRadius=1&departureDate=5443200&departureLat=0&departureLng=0&departureRadius=1&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" \ --expectNonEmpty -echo "TestDriverJourneys/TimeDelta_1" +echo "TestDriverJourneys/Count_1" go run main.go test \ --method=GET \ - --url="$SERVER/driver_journeys?arrivalLat=0&arrivalLng=0&departureDate=6048000&departureLat=0&departureLng=0&timeDelta=10" \ + --url="$SERVER/driver_journeys?arrivalLat=0&arrivalLng=0&arrivalRadius=1&count=1&departureDate=6048000&departureLat=0&departureLng=0&departureRadius=1&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" \ --expectNonEmpty -echo "TestDriverJourneys/TimeDelta_2" +echo "TestDriverJourneys/Count_2" go run main.go test \ --method=GET \ - --url="$SERVER/driver_journeys?arrivalLat=0&arrivalLng=0&departureDate=6652800&departureLat=0&departureLng=0&timeDelta=10" \ + --url="$SERVER/driver_journeys?arrivalLat=0&arrivalLng=0&arrivalRadius=1&count=0&departureDate=6652800&departureLat=0&departureLng=0&departureRadius=1&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" -echo "TestDriverJourneys/TimeDelta_3" +echo "TestDriverJourneys/Count_3" go run main.go test \ --method=GET \ - --url="$SERVER/driver_journeys?arrivalLat=0&arrivalLng=0&departureDate=7257600&departureLat=0&departureLng=0&timeDelta=20" \ + --url="$SERVER/driver_journeys?arrivalLat=0&arrivalLng=0&arrivalRadius=1&count=2&departureDate=7257600&departureLat=0&departureLng=0&departureRadius=1&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" \ --expectNonEmpty -echo "TestDriverJourneys/Count_1" +echo "TestDriverJourneys/Count_4_-_count_>_n_driver_journeys" go run main.go test \ --method=GET \ - --url="$SERVER/driver_journeys?arrivalLat=0&arrivalLng=0&count=1&departureDate=7862400&departureLat=0&departureLng=0" \ + --url="$SERVER/driver_journeys?arrivalLat=0&arrivalLng=0&arrivalRadius=1&count=1&departureDate=7862400&departureLat=0&departureLng=0&departureRadius=1&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" + +echo "TestDriverJourneys/TimeDelta_1" +go run main.go test \ + --method=GET \ + --url="$SERVER/driver_journeys?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureDate=8467200&departureLat=0&departureLng=0&departureRadius=1&timeDelta=10" \ --expectResponseCode=200 \ --auth="$API_TOKEN" \ --expectNonEmpty -echo "TestDriverJourneys/Count_2" +echo "TestDriverJourneys/TimeDelta_2" go run main.go test \ --method=GET \ - --url="$SERVER/driver_journeys?arrivalLat=0&arrivalLng=0&count=0&departureDate=8467200&departureLat=0&departureLng=0" \ + --url="$SERVER/driver_journeys?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureDate=9072000&departureLat=0&departureLng=0&departureRadius=1&timeDelta=10" \ --expectResponseCode=200 \ --auth="$API_TOKEN" -echo "TestDriverJourneys/Count_3" +echo "TestDriverJourneys/TimeDelta_3" go run main.go test \ --method=GET \ - --url="$SERVER/driver_journeys?arrivalLat=0&arrivalLng=0&count=2&departureDate=9072000&departureLat=0&departureLng=0" \ + --url="$SERVER/driver_journeys?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureDate=9676800&departureLat=0&departureLng=0&departureRadius=1&timeDelta=20" \ --expectResponseCode=200 \ --auth="$API_TOKEN" \ --expectNonEmpty -echo "TestDriverJourneys/Count_4_-_count_>_n_driver_journeys" +echo "TestPassengerJourneys/No_data" go run main.go test \ --method=GET \ - --url="$SERVER/driver_journeys?arrivalLat=0&arrivalLng=0&count=1&departureDate=9676800&departureLat=0&departureLng=0" \ + --url="$SERVER/passenger_journeys?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureDate=10281600&departureLat=0&departureLng=0&departureRadius=1&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" -echo "TestPassengerJourneys/No_data" +echo "TestPassengerJourneys/Departure_radius_1" +go run main.go test \ + --method=GET \ + --url="$SERVER/passenger_journeys?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureDate=10886400&departureLat=46.160454&departureLng=-1.2219607&departureRadius=1&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" \ + --expectNonEmpty + +echo "TestPassengerJourneys/Departure_radius_2" go run main.go test \ --method=GET \ - --url="$SERVER/passenger_journeys?arrivalLat=0&arrivalLng=0&departureDate=10281600&departureLat=0&departureLng=0" \ + --url="$SERVER/passenger_journeys?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureDate=11491200&departureLat=46.160454&departureLng=-1.2219607&departureRadius=2&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" \ + --expectNonEmpty + +echo "TestPassengerJourneys/Departure_radius_3" +go run main.go test \ + --method=GET \ + --url="$SERVER/passenger_journeys?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureDate=12096000&departureLat=46.160454&departureLng=-1.2219607&departureRadius=1&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" -echo "TestPassengerJourneys/Departure_radius_0" +echo "TestPassengerJourneys/Departure_radius_3#01" go run main.go test \ --method=GET \ - --url="$SERVER/passenger_journeys?arrivalLat=0&arrivalLng=0&departureDate=10886400&departureLat=46.160454&departureLng=-1.2219607&departureRadius=1" \ + --url="$SERVER/passenger_journeys?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureDate=12700800&departureLat=46.160454&departureLng=-1.2219607&departureRadius=1&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" \ --expectNonEmpty -echo "TestPassengerJourneys/Departure_radius_1" +echo "TestPassengerJourneys/Arrival_radius_1" go run main.go test \ --method=GET \ - --url="$SERVER/passenger_journeys?arrivalLat=0&arrivalLng=0&departureDate=11491200&departureLat=46.160454&departureLng=-1.2219607&departureRadius=1" \ + --url="$SERVER/passenger_journeys?arrivalLat=46.160454&arrivalLng=-1.2219607&arrivalRadius=1&departureDate=13305600&departureLat=0&departureLng=0&departureRadius=1&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" \ --expectNonEmpty -echo "TestPassengerJourneys/Departure_radius_2" +echo "TestPassengerJourneys/Arrival_radius_2" go run main.go test \ --method=GET \ - --url="$SERVER/passenger_journeys?arrivalLat=0&arrivalLng=0&departureDate=12096000&departureLat=46.160454&departureLng=-1.2219607&departureRadius=2" \ + --url="$SERVER/passenger_journeys?arrivalLat=46.160454&arrivalLng=-1.2219607&arrivalRadius=2&departureDate=13910400&departureLat=0&departureLng=0&departureRadius=1&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" \ --expectNonEmpty -echo "TestPassengerJourneys/Departure_radius_3" +echo "TestPassengerJourneys/Arrival_radius_3" go run main.go test \ --method=GET \ - --url="$SERVER/passenger_journeys?arrivalLat=0&arrivalLng=0&departureDate=12700800&departureLat=46.160454&departureLng=-1.2219607&departureRadius=1" \ + --url="$SERVER/passenger_journeys?arrivalLat=46.160454&arrivalLng=-1.2219607&arrivalRadius=1&departureDate=14515200&departureLat=0&departureLng=0&departureRadius=1&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" -echo "TestPassengerJourneys/Arrival_radius_1" +echo "TestPassengerJourneys/Arrival_radius_4" go run main.go test \ --method=GET \ - --url="$SERVER/passenger_journeys?arrivalLat=46.160454&arrivalLng=-1.2219607&arrivalRadius=1&departureDate=13305600&departureLat=0&departureLng=0" \ + --url="$SERVER/passenger_journeys?arrivalLat=46.160454&arrivalLng=-1.2219607&arrivalRadius=1&departureDate=15120000&departureLat=0&departureLng=0&departureRadius=1&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" \ --expectNonEmpty -echo "TestPassengerJourneys/Arrival_radius_2" +echo "TestPassengerJourneys/Count_1" go run main.go test \ --method=GET \ - --url="$SERVER/passenger_journeys?arrivalLat=46.160454&arrivalLng=-1.2219607&arrivalRadius=2&departureDate=13910400&departureLat=0&departureLng=0" \ + --url="$SERVER/passenger_journeys?arrivalLat=0&arrivalLng=0&arrivalRadius=1&count=1&departureDate=15724800&departureLat=0&departureLng=0&departureRadius=1&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" \ --expectNonEmpty -echo "TestPassengerJourneys/Arrival_radius_3" +echo "TestPassengerJourneys/Count_2" go run main.go test \ --method=GET \ - --url="$SERVER/passenger_journeys?arrivalLat=46.160454&arrivalLng=-1.2219607&arrivalRadius=1&departureDate=14515200&departureLat=0&departureLng=0" \ + --url="$SERVER/passenger_journeys?arrivalLat=0&arrivalLng=0&arrivalRadius=1&count=0&departureDate=16329600&departureLat=0&departureLng=0&departureRadius=1&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" -echo "TestPassengerJourneys/Arrival_radius_4" +echo "TestPassengerJourneys/Count_3" go run main.go test \ --method=GET \ - --url="$SERVER/passenger_journeys?arrivalLat=46.160454&arrivalLng=-1.2219607&arrivalRadius=1&departureDate=15120000&departureLat=0&departureLng=0" \ + --url="$SERVER/passenger_journeys?arrivalLat=0&arrivalLng=0&arrivalRadius=1&count=2&departureDate=16934400&departureLat=0&departureLng=0&departureRadius=1&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" \ --expectNonEmpty +echo "TestPassengerJourneys/Count_4_-_count_>_n_driver_journeys" +go run main.go test \ + --method=GET \ + --url="$SERVER/passenger_journeys?arrivalLat=0&arrivalLng=0&arrivalRadius=1&count=1&departureDate=17539200&departureLat=0&departureLng=0&departureRadius=1&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" + echo "TestPassengerJourneys/TimeDelta_1" go run main.go test \ --method=GET \ - --url="$SERVER/passenger_journeys?arrivalLat=0&arrivalLng=0&departureDate=15724800&departureLat=0&departureLng=0&timeDelta=10" \ + --url="$SERVER/passenger_journeys?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureDate=18144000&departureLat=0&departureLng=0&departureRadius=1&timeDelta=10" \ --expectResponseCode=200 \ --auth="$API_TOKEN" \ --expectNonEmpty @@ -206,45 +236,213 @@ go run main.go test \ echo "TestPassengerJourneys/TimeDelta_2" go run main.go test \ --method=GET \ - --url="$SERVER/passenger_journeys?arrivalLat=0&arrivalLng=0&departureDate=16329600&departureLat=0&departureLng=0&timeDelta=10" \ + --url="$SERVER/passenger_journeys?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureDate=18748800&departureLat=0&departureLng=0&departureRadius=1&timeDelta=10" \ --expectResponseCode=200 \ --auth="$API_TOKEN" echo "TestPassengerJourneys/TimeDelta_3" go run main.go test \ --method=GET \ - --url="$SERVER/passenger_journeys?arrivalLat=0&arrivalLng=0&departureDate=16934400&departureLat=0&departureLng=0&timeDelta=20" \ + --url="$SERVER/passenger_journeys?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureDate=19353600&departureLat=0&departureLng=0&departureRadius=1&timeDelta=20" \ --expectResponseCode=200 \ --auth="$API_TOKEN" \ --expectNonEmpty -echo "TestPassengerJourneys/Count_1" +echo "TestGetDriverRegularTrips/No_data" go run main.go test \ --method=GET \ - --url="$SERVER/passenger_journeys?arrivalLat=0&arrivalLng=0&count=1&departureDate=17539200&departureLat=0&departureLng=0" \ + --url="$SERVER/driver_regular_trips?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureLat=0&departureLng=0&departureRadius=1&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=20563200&minDepartureDate=19958400&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" + +echo "TestGetDriverRegularTrips/Departure_radius_1" +go run main.go test \ + --method=GET \ + --url="$SERVER/driver_regular_trips?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureLat=46.160454&departureLng=-1.2219607&departureRadius=1&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=21168000&minDepartureDate=20563200&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" \ --expectNonEmpty -echo "TestPassengerJourneys/Count_2" +echo "TestGetDriverRegularTrips/Departure_radius_2" go run main.go test \ --method=GET \ - --url="$SERVER/passenger_journeys?arrivalLat=0&arrivalLng=0&count=0&departureDate=18144000&departureLat=0&departureLng=0" \ + --url="$SERVER/driver_regular_trips?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureLat=46.160454&departureLng=-1.2219607&departureRadius=2&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=21772800&minDepartureDate=21168000&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" \ + --expectNonEmpty + +echo "TestGetDriverRegularTrips/Departure_radius_3" +go run main.go test \ + --method=GET \ + --url="$SERVER/driver_regular_trips?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureLat=46.160454&departureLng=-1.2219607&departureRadius=1&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=22377600&minDepartureDate=21772800&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" -echo "TestPassengerJourneys/Count_3" +echo "TestGetDriverRegularTrips/Departure_radius_3#01" +go run main.go test \ + --method=GET \ + --url="$SERVER/driver_regular_trips?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureLat=46.160454&departureLng=-1.2219607&departureRadius=1&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=22982400&minDepartureDate=22377600&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" \ + --expectNonEmpty + +echo "TestGetDriverRegularTrips/Arrival_radius_1" +go run main.go test \ + --method=GET \ + --url="$SERVER/driver_regular_trips?arrivalLat=46.160454&arrivalLng=-1.2219607&arrivalRadius=1&departureLat=0&departureLng=0&departureRadius=1&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=23587200&minDepartureDate=22982400&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" \ + --expectNonEmpty + +echo "TestGetDriverRegularTrips/Arrival_radius_2" +go run main.go test \ + --method=GET \ + --url="$SERVER/driver_regular_trips?arrivalLat=46.160454&arrivalLng=-1.2219607&arrivalRadius=2&departureLat=0&departureLng=0&departureRadius=1&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=24192000&minDepartureDate=23587200&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" \ + --expectNonEmpty + +echo "TestGetDriverRegularTrips/Arrival_radius_3" +go run main.go test \ + --method=GET \ + --url="$SERVER/driver_regular_trips?arrivalLat=46.160454&arrivalLng=-1.2219607&arrivalRadius=1&departureLat=0&departureLng=0&departureRadius=1&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=24796800&minDepartureDate=24192000&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" + +echo "TestGetDriverRegularTrips/Arrival_radius_4" +go run main.go test \ + --method=GET \ + --url="$SERVER/driver_regular_trips?arrivalLat=46.160454&arrivalLng=-1.2219607&arrivalRadius=1&departureLat=0&departureLng=0&departureRadius=1&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=25401600&minDepartureDate=24796800&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" \ + --expectNonEmpty + +echo "TestGetDriverRegularTrips/Count_1" +go run main.go test \ + --method=GET \ + --url="$SERVER/driver_regular_trips?arrivalLat=0&arrivalLng=0&arrivalRadius=1&count=1&departureLat=0&departureLng=0&departureRadius=1&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=26006400&minDepartureDate=25401600&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" \ + --expectNonEmpty + +echo "TestGetDriverRegularTrips/Count_2" +go run main.go test \ + --method=GET \ + --url="$SERVER/driver_regular_trips?arrivalLat=0&arrivalLng=0&arrivalRadius=1&count=0&departureLat=0&departureLng=0&departureRadius=1&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=26611200&minDepartureDate=26006400&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" + +echo "TestGetDriverRegularTrips/Count_3" +go run main.go test \ + --method=GET \ + --url="$SERVER/driver_regular_trips?arrivalLat=0&arrivalLng=0&arrivalRadius=1&count=2&departureLat=0&departureLng=0&departureRadius=1&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=27216000&minDepartureDate=26611200&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" \ + --expectNonEmpty + +echo "TestGetDriverRegularTrips/Count_4_-_count_>_n_driver_journeys" +go run main.go test \ + --method=GET \ + --url="$SERVER/driver_regular_trips?arrivalLat=0&arrivalLng=0&arrivalRadius=1&count=1&departureLat=0&departureLng=0&departureRadius=1&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=27820800&minDepartureDate=27216000&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" + +echo "TestGetPassengerRegularTrips/No_data" +go run main.go test \ + --method=GET \ + --url="$SERVER/passenger_regular_trips?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureLat=0&departureLng=0&departureRadius=1&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=28425600&minDepartureDate=27820800&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" + +echo "TestGetPassengerRegularTrips/Departure_radius_1" +go run main.go test \ + --method=GET \ + --url="$SERVER/passenger_regular_trips?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureLat=46.160454&departureLng=-1.2219607&departureRadius=1&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=29030400&minDepartureDate=28425600&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" \ + --expectNonEmpty + +echo "TestGetPassengerRegularTrips/Departure_radius_2" +go run main.go test \ + --method=GET \ + --url="$SERVER/passenger_regular_trips?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureLat=46.160454&departureLng=-1.2219607&departureRadius=2&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=29635200&minDepartureDate=29030400&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" \ + --expectNonEmpty + +echo "TestGetPassengerRegularTrips/Departure_radius_3" +go run main.go test \ + --method=GET \ + --url="$SERVER/passenger_regular_trips?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureLat=46.160454&departureLng=-1.2219607&departureRadius=1&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=30240000&minDepartureDate=29635200&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" + +echo "TestGetPassengerRegularTrips/Departure_radius_3#01" +go run main.go test \ + --method=GET \ + --url="$SERVER/passenger_regular_trips?arrivalLat=0&arrivalLng=0&arrivalRadius=1&departureLat=46.160454&departureLng=-1.2219607&departureRadius=1&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=30844800&minDepartureDate=30240000&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" \ + --expectNonEmpty + +echo "TestGetPassengerRegularTrips/Arrival_radius_1" +go run main.go test \ + --method=GET \ + --url="$SERVER/passenger_regular_trips?arrivalLat=46.160454&arrivalLng=-1.2219607&arrivalRadius=1&departureLat=0&departureLng=0&departureRadius=1&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=31449600&minDepartureDate=30844800&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" \ + --expectNonEmpty + +echo "TestGetPassengerRegularTrips/Arrival_radius_2" +go run main.go test \ + --method=GET \ + --url="$SERVER/passenger_regular_trips?arrivalLat=46.160454&arrivalLng=-1.2219607&arrivalRadius=2&departureLat=0&departureLng=0&departureRadius=1&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=32054400&minDepartureDate=31449600&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" \ + --expectNonEmpty + +echo "TestGetPassengerRegularTrips/Arrival_radius_3" +go run main.go test \ + --method=GET \ + --url="$SERVER/passenger_regular_trips?arrivalLat=46.160454&arrivalLng=-1.2219607&arrivalRadius=1&departureLat=0&departureLng=0&departureRadius=1&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=32659200&minDepartureDate=32054400&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" + +echo "TestGetPassengerRegularTrips/Arrival_radius_4" +go run main.go test \ + --method=GET \ + --url="$SERVER/passenger_regular_trips?arrivalLat=46.160454&arrivalLng=-1.2219607&arrivalRadius=1&departureLat=0&departureLng=0&departureRadius=1&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=33264000&minDepartureDate=32659200&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" \ + --expectNonEmpty + +echo "TestGetPassengerRegularTrips/Count_1" +go run main.go test \ + --method=GET \ + --url="$SERVER/passenger_regular_trips?arrivalLat=0&arrivalLng=0&arrivalRadius=1&count=1&departureLat=0&departureLng=0&departureRadius=1&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=33868800&minDepartureDate=33264000&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" \ + --expectNonEmpty + +echo "TestGetPassengerRegularTrips/Count_2" +go run main.go test \ + --method=GET \ + --url="$SERVER/passenger_regular_trips?arrivalLat=0&arrivalLng=0&arrivalRadius=1&count=0&departureLat=0&departureLng=0&departureRadius=1&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=34473600&minDepartureDate=33868800&timeDelta=900" \ + --expectResponseCode=200 \ + --auth="$API_TOKEN" + +echo "TestGetPassengerRegularTrips/Count_3" go run main.go test \ --method=GET \ - --url="$SERVER/passenger_journeys?arrivalLat=0&arrivalLng=0&count=2&departureDate=18748800&departureLat=0&departureLng=0" \ + --url="$SERVER/passenger_regular_trips?arrivalLat=0&arrivalLng=0&arrivalRadius=1&count=2&departureLat=0&departureLng=0&departureRadius=1&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=35078400&minDepartureDate=34473600&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" \ --expectNonEmpty -echo "TestPassengerJourneys/Count_4_-_count_>_n_passenger_journeys" +echo "TestGetPassengerRegularTrips/Count_4_-_count_>_n_driver_journeys" go run main.go test \ --method=GET \ - --url="$SERVER/passenger_journeys?arrivalLat=0&arrivalLng=0&count=1&departureDate=19353600&departureLat=0&departureLng=0" \ + --url="$SERVER/passenger_regular_trips?arrivalLat=0&arrivalLng=0&arrivalRadius=1&count=1&departureLat=0&departureLng=0&departureRadius=1&departureTimeOfDay=08%3A00%3A00&maxDepartureDate=35683200&minDepartureDate=35078400&timeDelta=900" \ --expectResponseCode=200 \ --auth="$API_TOKEN" diff --git a/cmd/test/test_implementation.go b/cmd/test/test_implementation.go index aa70f1a..fcfd7e5 100644 --- a/cmd/test/test_implementation.go +++ b/cmd/test/test_implementation.go @@ -60,6 +60,15 @@ func testGetDriverRegularTrips( ) { assert.CriticFormat(a, request, response) assert.StatusCode(a, response, flags.ExpectedResponseCode) + + if flags.ExpectNonEmpty { + assert.CriticArrayNotEmpty(a, response) + } + + assert.JourneysDepartureRadius(a, request, response) + assert.JourneysArrivalRadius(a, request, response) + assert.JourneysCount(a, request, response) + assert.OperatorFieldFormat(a, response) } func testGetPassengerRegularTrips( @@ -70,6 +79,10 @@ func testGetPassengerRegularTrips( ) { assert.CriticFormat(a, request, response) assert.StatusCode(a, response, flags.ExpectedResponseCode) + + if flags.ExpectNonEmpty { + assert.CriticArrayNotEmpty(a, response) + } } //////////////////////////////////////////////////////////////