From 32874f9748e988ceff589a7c0d0e49d94d23b778 Mon Sep 17 00:00:00 2001 From: Vojtech Mares Date: Tue, 14 May 2024 21:52:25 +0200 Subject: [PATCH] test(server): add tests for /upcoming-dates endpoints --- internal/server/server_test.go | 153 +++++++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) diff --git a/internal/server/server_test.go b/internal/server/server_test.go index 88a0b9c..5d9ae72 100644 --- a/internal/server/server_test.go +++ b/internal/server/server_test.go @@ -482,4 +482,157 @@ func TestServer(t *testing.T) { assert.Equal(t, len(trainingDates), 0) }) + t.Run("List upcoming training dates for training", func(t *testing.T) { + tr := &training.Training{ + Name: "Testing Training for training date", + Description: "This is a test training for training date", + Days: 1, + Pricing: []training.TrainingPrice{ + { + Amount: decimal.NewFromInt(200), + Currency: "EUR", + Type: training.OpenTrainingPrice, + }, + }, + } + _ = handlers.trainingRepository.Create(tr) + + now := time.Now() + upcomingTrainingCount := 5 + for i := -4; i <= 5; i++ { + date := now.AddDate(0, 0, i) + td := &training.TrainingDate{ + Address: "Test Address 123, NYC", + Capacity: 12, + Date: date, + Days: tr.Days, + IsOnline: false, + Location: "NYC", + StartTime: date, + Price: money.Price{ + Amount: decimal.NewFromInt(200), + Currency: "EUR", + }, + } + _ = handlers.trainingDateRepository.Create(tr.ID, td) + } + + rr, _ := doGet(t, app, "/v1/trainings/"+tr.ID.String()+"/upcoming-dates") + assert.Equal(t, http.StatusOK, rr.StatusCode) + + var trainingDatesReturned []TrainingDate + err := json.NewDecoder(rr.Body).Decode(&trainingDatesReturned) + assert.NoError(t, err, "error unmarshalling response") + assert.Equal(t, len(trainingDatesReturned), upcomingTrainingCount) + }) + + t.Run("List all upcoming training dates", func(t *testing.T) { + tr1 := &training.Training{ + Name: "Testing Training for training date 1", + Description: "This is a test training for training date", + Days: 1, + Pricing: []training.TrainingPrice{ + { + Amount: decimal.NewFromInt(200), + Currency: "EUR", + Type: training.OpenTrainingPrice, + }, + }, + } + _ = handlers.trainingRepository.Create(tr1) + + tr2 := &training.Training{ + Name: "Testing Training for training date 2", + Description: "This is a test training for training date", + Days: 1, + Pricing: []training.TrainingPrice{ + { + Amount: decimal.NewFromInt(200), + Currency: "EUR", + Type: training.OpenTrainingPrice, + }, + }, + } + _ = handlers.trainingRepository.Create(tr2) + + tr3 := &training.Training{ + Name: "Testing Training for training date 3", + Description: "This is a test training for training date", + Days: 1, + Pricing: []training.TrainingPrice{ + { + Amount: decimal.NewFromInt(200), + Currency: "EUR", + Type: training.OpenTrainingPrice, + }, + }, + } + _ = handlers.trainingRepository.Create(tr3) + + allTrainings, _ := handlers.trainingRepository.FindAll() + + now := time.Now() + upcomingTrainingCount := 5 + for i := -4; i <= upcomingTrainingCount; i++ { + date := now.AddDate(0, 0, i) + td1 := &training.TrainingDate{ + Address: "Test Address 123, NYC", + Capacity: 12, + Date: date, + Days: tr1.Days, + IsOnline: false, + Location: "NYC", + StartTime: date, + Price: money.Price{ + Amount: decimal.NewFromInt(200), + Currency: "EUR", + }, + } + _ = handlers.trainingDateRepository.Create(tr1.ID, td1) + + td2 := &training.TrainingDate{ + Address: "Test Address 123, NYC", + Capacity: 12, + Date: date, + Days: tr2.Days, + IsOnline: false, + Location: "NYC", + StartTime: date, + Price: money.Price{ + Amount: decimal.NewFromInt(200), + Currency: "EUR", + }, + } + _ = handlers.trainingDateRepository.Create(tr2.ID, td2) + + td3 := &training.TrainingDate{ + Address: "Test Address 123, NYC", + Capacity: 12, + Date: date, + Days: tr3.Days, + IsOnline: false, + Location: "NYC", + StartTime: date, + Price: money.Price{ + Amount: decimal.NewFromInt(200), + Currency: "EUR", + }, + } + _ = handlers.trainingDateRepository.Create(tr3.ID, td3) + } + + rr, _ := doGet(t, app, "/v1/trainings/upcoming-dates") + assert.Equal(t, http.StatusOK, rr.StatusCode) + + var trainingDatesReturned ListAllUpcomingTrainingDatesResponse + err := json.NewDecoder(rr.Body).Decode(&trainingDatesReturned) + assert.NoError(t, err, "error unmarshalling response") + assert.Equal(t, len(allTrainings), len(trainingDatesReturned)) + + for _, tdr := range trainingDatesReturned { + if tdr.TrainingID == tr1.ID || tdr.TrainingID == tr2.ID || tdr.TrainingID == tr3.ID { + assert.Equal(t, len(tdr.Dates), upcomingTrainingCount) + } + } + }) }