diff --git a/internal/server/server_test.go b/internal/server/server_test.go index 2e0f03d..73e0634 100644 --- a/internal/server/server_test.go +++ b/internal/server/server_test.go @@ -89,7 +89,7 @@ func TestServer(t *testing.T) { t.Run("Add training", func(t *testing.T) { newTraining := NewTraining{ - Name: "Testing Training", + Name: "Testing Training: add", Description: "This is a test training", Days: 1, Pricing: []TrainingPrice{ @@ -118,11 +118,13 @@ func TestServer(t *testing.T) { slugString := slug.NewString(newTraining.Name) - rr, _ := doPost(t, app, "/v1/trainings", newTraining) - assert.Equal(t, http.StatusCreated, rr.StatusCode) + createResp, _ := doPost(t, app, "/v1/trainings", newTraining) + defer func() { _ = createResp.Body.Close() }() + + assert.Equal(t, http.StatusCreated, createResp.StatusCode) var resultTraining Training - err := json.NewDecoder(rr.Body).Decode(&resultTraining) + err := json.NewDecoder(createResp.Body).Decode(&resultTraining) assert.NoError(t, err, "error unmarshalling response") assert.Equal(t, newTraining.Name, resultTraining.Name) assert.Equal(t, slugString, resultTraining.Slug) @@ -132,18 +134,49 @@ func TestServer(t *testing.T) { }) t.Run("Training not found", func(t *testing.T) { - rr, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d", 9999999)) - assert.Equal(t, http.StatusNotFound, rr.StatusCode) + getResp, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d", 9999999)) + defer func() { _ = getResp.Body.Close() }() + + assert.Equal(t, http.StatusNotFound, getResp.StatusCode) var trainingError NotFoundError - err := json.NewDecoder(rr.Body).Decode(&trainingError) + err := json.NewDecoder(getResp.Body).Decode(&trainingError) assert.NoError(t, err, "error getting response", err) assert.Equal(t, http.StatusNotFound, trainingError.Status) }) + t.Run("Get training by slug", func(t *testing.T) { + tr := &training.Training{ + Name: "Testing Training: get with slug", + Description: "This is a test training with slug", + Days: 1, + Pricing: []training.Price{ + { + Amount: decimal.NewFromInt(200), + Currency: "EUR", + Type: training.OpenTrainingPrice, + }, + }, + } + + _ = handlers.trainingRepository.Create(tr) + + getResp, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/by-slug/%s", tr.Slug)) + defer func() { _ = getResp.Body.Close() }() + + assert.Equal(t, http.StatusOK, getResp.StatusCode) + + var trr Training + err := json.NewDecoder(getResp.Body).Decode(&trr) + assert.NoError(t, err, "error unmarshalling response") + assert.Equal(t, tr.Name, trr.Name) + assert.Equal(t, tr.ID, trr.Id) + assert.Equal(t, tr.Slug, trr.Slug) + }) + t.Run("List all trainings", func(t *testing.T) { tr := &training.Training{ - Name: "Testing Training", + Name: "Testing Training: list", Description: "This is a test training", Days: 1, Pricing: []training.Price{ @@ -156,11 +189,11 @@ func TestServer(t *testing.T) { } _ = handlers.trainingRepository.Create(tr) - rr, _ := doGet(t, app, "/v1/trainings") - assert.Equal(t, http.StatusOK, rr.StatusCode) + getResp, _ := doGet(t, app, "/v1/trainings") + assert.Equal(t, http.StatusOK, getResp.StatusCode) var trainings []Training - err := json.NewDecoder(rr.Body).Decode(&trainings) + err := json.NewDecoder(getResp.Body).Decode(&trainings) assert.NoError(t, err, "error unmarshalling response") assert.Greater(t, len(trainings), 0) @@ -174,7 +207,7 @@ func TestServer(t *testing.T) { t.Run("Update training", func(t *testing.T) { tr := &training.Training{ - Name: "Testing Training", + Name: "Testing Training: update", Description: "This is a test training", Days: 1, Pricing: []training.Price{ @@ -203,11 +236,13 @@ func TestServer(t *testing.T) { }, } - rr, _ := doPut(t, app, fmt.Sprintf("/v1/trainings/%d", tr.ID), updTr) - assert.Equal(t, http.StatusOK, rr.StatusCode) + updateResp, _ := doPut(t, app, fmt.Sprintf("/v1/trainings/%d", tr.ID), updTr) + defer func() { _ = updateResp.Body.Close() }() + + assert.Equal(t, http.StatusOK, updateResp.StatusCode) var trr Training - err := json.NewDecoder(rr.Body).Decode(&trr) + err := json.NewDecoder(updateResp.Body).Decode(&trr) assert.NoError(t, err, "error unmarshalling response") assert.Equal(t, updTr.Name, trr.Name) assert.Equal(t, updatedSlug, trr.Slug) @@ -215,7 +250,7 @@ func TestServer(t *testing.T) { t.Run("Delete training", func(t *testing.T) { tr := &training.Training{ - Name: "Testing Training", + Name: "Testing Training: delete", Description: "This is a test training", Days: 1, Pricing: []training.Price{ @@ -229,32 +264,35 @@ func TestServer(t *testing.T) { _ = handlers.trainingRepository.Create(tr) - rr, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d", tr.ID)) - assert.Equal(t, http.StatusOK, rr.StatusCode) + getResp, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d", tr.ID)) + defer func() { _ = getResp.Body.Close() }() + + assert.Equal(t, http.StatusOK, getResp.StatusCode) var trr Training - err := json.NewDecoder(rr.Body).Decode(&trr) + err := json.NewDecoder(getResp.Body).Decode(&trr) assert.NoError(t, err, "error unmarshalling response") assert.Equal(t, tr.ID, trr.Id) drr, _ := doDelete(t, app, fmt.Sprintf("/v1/trainings/%d", tr.ID)) + defer func() { _ = drr.Body.Close() }() + assert.Equal(t, http.StatusNoContent, drr.StatusCode) - rr, _ = doGet(t, app, fmt.Sprintf("/v1/trainings/%d", tr.ID)) - assert.Equal(t, http.StatusNotFound, rr.StatusCode) + deletedTrainingResp, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d", tr.ID)) + defer func() { _ = deletedTrainingResp.Body.Close() }() + + assert.Equal(t, http.StatusNotFound, deletedTrainingResp.StatusCode) var trainingError NotFoundError - err = json.NewDecoder(rr.Body).Decode(&trainingError) + err = json.NewDecoder(deletedTrainingResp.Body).Decode(&trainingError) assert.NoError(t, err, "error getting response", err) assert.Equal(t, http.StatusNotFound, trainingError.Status) - - lrr, _ := doGet(t, app, "/v1/trainings") - assert.Equal(t, http.StatusOK, lrr.StatusCode) }) t.Run("Add training date", func(t *testing.T) { tr := &training.Training{ - Name: "Testing Training for training date", + Name: "Testing Training: add date", Description: "This is a test training for training date", Days: 1, Pricing: []training.Price{ @@ -285,12 +323,13 @@ func TestServer(t *testing.T) { }, } - rr, err := doPost(t, app, fmt.Sprintf("/v1/trainings/%d/dates", tr.ID), newTrainingDate) + createResp, err := doPost(t, app, fmt.Sprintf("/v1/trainings/%d/dates", tr.ID), newTrainingDate) + defer func() { _ = createResp.Body.Close() }() - assert.Equal(t, http.StatusCreated, rr.StatusCode) + assert.Equal(t, http.StatusCreated, createResp.StatusCode) var resultTrainingDate TrainingDate - err = json.NewDecoder(rr.Body).Decode(&resultTrainingDate) + err = json.NewDecoder(createResp.Body).Decode(&resultTrainingDate) assert.NoError(t, err, "error unmarshalling response") assert.Equal(t, newTrainingDate.Address, resultTrainingDate.Address) assert.Equal(t, newTrainingDate.Location, resultTrainingDate.Location) @@ -304,7 +343,7 @@ func TestServer(t *testing.T) { t.Run("Training date not found", func(t *testing.T) { tr := &training.Training{ - Name: "Testing Training for training date", + Name: "Testing Training: date not found", Description: "This is a test training for training date", Days: 1, Pricing: []training.Price{ @@ -318,18 +357,20 @@ func TestServer(t *testing.T) { _ = handlers.trainingRepository.Create(tr) - rr, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d", tr.ID, 999999)) - assert.Equal(t, http.StatusNotFound, rr.StatusCode) + getResp, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d", tr.ID, 999999)) + defer func() { _ = getResp.Body.Close() }() + + assert.Equal(t, http.StatusNotFound, getResp.StatusCode) var trainingError NotFoundError - err := json.NewDecoder(rr.Body).Decode(&trainingError) + err := json.NewDecoder(getResp.Body).Decode(&trainingError) assert.NoError(t, err, "error getting response", err) assert.Equal(t, http.StatusNotFound, trainingError.Status) }) t.Run("List all training dates", func(t *testing.T) { tr := &training.Training{ - Name: "Testing Training for training date", + Name: "Testing Training: list dates", Description: "This is a test training for training date", Days: 1, Pricing: []training.Price{ @@ -362,18 +403,20 @@ func TestServer(t *testing.T) { _ = handlers.trainingDateRepository.Create(tr.ID, td) } - rr, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates", tr.ID)) - assert.Equal(t, http.StatusOK, rr.StatusCode) + getResp, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates", tr.ID)) + defer func() { _ = getResp.Body.Close() }() + + assert.Equal(t, http.StatusOK, getResp.StatusCode) var trainingDates []TrainingDate - err := json.NewDecoder(rr.Body).Decode(&trainingDates) + err := json.NewDecoder(getResp.Body).Decode(&trainingDates) assert.NoError(t, err, "error unmarshalling response") assert.Equal(t, len(trainingDates), trainingCount) }) t.Run("Update training date", func(t *testing.T) { tr := &training.Training{ - Name: "Testing Training for training date", + Name: "Testing Training: update date", Description: "This is a test training for training date", Days: 1, Pricing: []training.Price{ @@ -416,11 +459,13 @@ func TestServer(t *testing.T) { }, } - rr, _ := doPut(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d", tr.ID, td.ID), updTd) - assert.Equal(t, http.StatusOK, rr.StatusCode) + updateResp, _ := doPut(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d", tr.ID, td.ID), updTd) + defer func() { _ = updateResp.Body.Close() }() + + assert.Equal(t, http.StatusOK, updateResp.StatusCode) var tdrr TrainingDate - err := json.NewDecoder(rr.Body).Decode(&tdrr) + err := json.NewDecoder(updateResp.Body).Decode(&tdrr) assert.NoError(t, err, "error unmarshalling response") assert.Equal(t, updTd.Address, tdrr.Address) assert.Equal(t, updTd.Capacity, tdrr.Capacity) @@ -434,7 +479,7 @@ func TestServer(t *testing.T) { t.Run("Delete training date", func(t *testing.T) { tr := &training.Training{ - Name: "Testing Training for training date", + Name: "Testing Training: delete date", Description: "This is a test training for training date", Days: 1, Pricing: []training.Price{ @@ -463,26 +508,32 @@ func TestServer(t *testing.T) { _ = handlers.trainingDateRepository.Create(tr.ID, td) - rr, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d", tr.ID, td.ID)) - assert.Equal(t, http.StatusOK, rr.StatusCode) + getResp, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d", tr.ID, td.ID)) + defer func() { _ = getResp.Body.Close() }() + + assert.Equal(t, http.StatusOK, getResp.StatusCode) var tdrr TrainingDate - err := json.NewDecoder(rr.Body).Decode(&tdrr) + err := json.NewDecoder(getResp.Body).Decode(&tdrr) assert.NoError(t, err, "error unmarshalling response") assert.Equal(t, td.ID, tdrr.Id) drr, _ := doDelete(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d", tr.ID, td.ID)) + defer func() { _ = drr.Body.Close() }() assert.Equal(t, http.StatusNoContent, drr.StatusCode) - rr, _ = doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d", tr.ID, td.ID)) - assert.Equal(t, http.StatusNotFound, rr.StatusCode) + deletedTrainingResp, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d", tr.ID, td.ID)) + defer func() { _ = deletedTrainingResp.Body.Close() }() + assert.Equal(t, http.StatusNotFound, deletedTrainingResp.StatusCode) var trainingError NotFoundError - err = json.NewDecoder(rr.Body).Decode(&trainingError) + err = json.NewDecoder(deletedTrainingResp.Body).Decode(&trainingError) assert.NoError(t, err, "error getting response", err) assert.Equal(t, http.StatusNotFound, trainingError.Status) lrr, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates", tr.ID)) + defer func() { _ = lrr.Body.Close() }() + assert.Equal(t, http.StatusOK, lrr.StatusCode) var trainingDates []TrainingDate @@ -493,7 +544,7 @@ func TestServer(t *testing.T) { t.Run("List upcoming training dates for training", func(t *testing.T) { tr := &training.Training{ - Name: "Testing Training for training date", + Name: "Testing Training: list upcoming dates", Description: "This is a test training for training date", Days: 1, Pricing: []training.Price{ @@ -524,18 +575,20 @@ func TestServer(t *testing.T) { _ = handlers.trainingDateRepository.Create(tr.ID, td) } - rr, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d/upcoming-dates", tr.ID)) - assert.Equal(t, http.StatusOK, rr.StatusCode) + getResp, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d/upcoming-dates", tr.ID)) + defer func() { _ = getResp.Body.Close() }() + + assert.Equal(t, http.StatusOK, getResp.StatusCode) var trainingDatesReturned []TrainingDate - err := json.NewDecoder(rr.Body).Decode(&trainingDatesReturned) + err := json.NewDecoder(getResp.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", + Name: "Testing Training: list dates for training id=1", Description: "This is a test training for training date", Days: 1, Pricing: []training.Price{ @@ -622,11 +675,13 @@ func TestServer(t *testing.T) { _ = handlers.trainingDateRepository.Create(tr3.ID, td3) } - rr, _ := doGet(t, app, "/v1/trainings/upcoming-dates") - assert.Equal(t, http.StatusOK, rr.StatusCode) + getResp, _ := doGet(t, app, "/v1/trainings/upcoming-dates") + defer func() { _ = getResp.Body.Close() }() + + assert.Equal(t, http.StatusOK, getResp.StatusCode) var trainingDatesReturned ListAllUpcomingTrainingDatesResponse - err := json.NewDecoder(rr.Body).Decode(&trainingDatesReturned) + err := json.NewDecoder(getResp.Body).Decode(&trainingDatesReturned) assert.NoError(t, err, "error unmarshalling response") assert.Equal(t, len(allTrainings), len(trainingDatesReturned)) @@ -639,7 +694,7 @@ func TestServer(t *testing.T) { t.Run("Training date attendee not found", func(t *testing.T) { tr := &training.Training{ - Name: "Testing Training for training date", + Name: "Testing Training: attendee not found", Description: "This is a test training for training date", Days: 1, Pricing: []training.Price{ @@ -668,18 +723,20 @@ func TestServer(t *testing.T) { } _ = handlers.trainingDateRepository.Create(tr.ID, td) - rr, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees/%d", tr.ID, td.ID, 99999999)) - assert.Equal(t, http.StatusNotFound, rr.StatusCode) + getResp, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees/%d", tr.ID, td.ID, 99999999)) + defer func() { _ = getResp.Body.Close() }() + + assert.Equal(t, http.StatusNotFound, getResp.StatusCode) var notFound NotFoundError - err := json.NewDecoder(rr.Body).Decode(¬Found) + err := json.NewDecoder(getResp.Body).Decode(¬Found) assert.NoError(t, err, "error getting response", err) assert.Equal(t, http.StatusNotFound, notFound.Status) }) t.Run("Add training date attendee", func(t *testing.T) { tr := &training.Training{ - Name: "Testing Training for training date", + Name: "Testing Training: add attendee", Description: "This is a test training for training date", Days: 1, Pricing: []training.Price{ @@ -717,11 +774,13 @@ func TestServer(t *testing.T) { IsStudent: new(bool), } - rr, _ := doPost(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees", tr.ID, td.ID), newTrainingDateAttendee) - assert.Equal(t, http.StatusCreated, rr.StatusCode) + createResp, _ := doPost(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees", tr.ID, td.ID), newTrainingDateAttendee) + defer func() { _ = createResp.Body.Close() }() + + assert.Equal(t, http.StatusCreated, createResp.StatusCode) var attendeeResponse TrainingDateAttendee - err := json.NewDecoder(rr.Body).Decode(&attendeeResponse) + err := json.NewDecoder(createResp.Body).Decode(&attendeeResponse) assert.NoError(t, err, "error getting response", err) assert.Equal(t, newTrainingDateAttendee.Name, attendeeResponse.Name) assert.Equal(t, newTrainingDateAttendee.Email, attendeeResponse.Email) @@ -737,7 +796,7 @@ func TestServer(t *testing.T) { t.Run("List all training date attendees", func(t *testing.T) { tr := &training.Training{ - Name: "Testing Training for training date", + Name: "Testing Training: list attendees", Description: "This is a test training for training date", Days: 1, Pricing: []training.Price{ @@ -785,11 +844,13 @@ func TestServer(t *testing.T) { attendees[i] = *nAtd } - rr, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees", tr.ID, td.ID)) - assert.Equal(t, http.StatusOK, rr.StatusCode) + getResp, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees", tr.ID, td.ID)) + defer func() { _ = getResp.Body.Close() }() + + assert.Equal(t, http.StatusOK, getResp.StatusCode) var attendeesResponse ListTrainingDateAttendeesResponse - err := json.NewDecoder(rr.Body).Decode(&attendeesResponse) + err := json.NewDecoder(getResp.Body).Decode(&attendeesResponse) assert.NoError(t, err, "error getting response", err) assert.Equal(t, attendeeCount, len(attendeesResponse)) @@ -810,7 +871,7 @@ func TestServer(t *testing.T) { t.Run("Get training date attendee", func(t *testing.T) { tr := &training.Training{ - Name: "Testing Training for training date", + Name: "Test training: get attendee", Description: "This is a test training for training date", Days: 1, Pricing: []training.Price{ @@ -854,10 +915,11 @@ func TestServer(t *testing.T) { _ = handlers.trainingDateAttendeeRepository.Create(td.ID, attendee) - rr, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees/%d", tr.ID, td.ID, attendee.ID)) + getResp, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees/%d", tr.ID, td.ID, attendee.ID)) + defer func() { _ = getResp.Body.Close() }() var resultTrainingDateAttendee TrainingDateAttendee - err := json.NewDecoder(rr.Body).Decode(&resultTrainingDateAttendee) + err := json.NewDecoder(getResp.Body).Decode(&resultTrainingDateAttendee) assert.NoError(t, err, "error unmarshalling response") assert.Equal(t, attendee.Name, resultTrainingDateAttendee.Name) assert.Equal(t, attendee.Email, string(resultTrainingDateAttendee.Email)) @@ -873,7 +935,7 @@ func TestServer(t *testing.T) { t.Run("Update training date attendee", func(t *testing.T) { tr := &training.Training{ - Name: "Testing Training for training date", + Name: "Testing Training: update attendee", Description: "This is a test training for training date", Days: 1, Pricing: []training.Price{ @@ -926,11 +988,13 @@ func TestServer(t *testing.T) { IsStudent: new(bool), } - rr, _ := doPut(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees/%d", tr.ID, td.ID, attendee.ID), newTrainingDateAttendee) - assert.Equal(t, http.StatusOK, rr.StatusCode) + updateResp, _ := doPut(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees/%d", tr.ID, td.ID, attendee.ID), newTrainingDateAttendee) + defer func() { _ = updateResp.Body.Close() }() + + assert.Equal(t, http.StatusOK, updateResp.StatusCode) var attendeeResponse UpdateTrainingDateAttendeeResponse - err := json.NewDecoder(rr.Body).Decode(&attendeeResponse) + err := json.NewDecoder(updateResp.Body).Decode(&attendeeResponse) assert.NoError(t, err, "error getting response", err) assert.Equal(t, newTrainingDateAttendee.Name, attendeeResponse.Name) assert.Equal(t, newTrainingDateAttendee.Email, attendeeResponse.Email) @@ -946,7 +1010,7 @@ func TestServer(t *testing.T) { t.Run("Delete training date attendee", func(t *testing.T) { tr := &training.Training{ - Name: "Testing Training for training date", + Name: "Testing Training: delete attendee", Description: "This is a test training for training date", Days: 1, Pricing: []training.Price{ @@ -991,13 +1055,19 @@ func TestServer(t *testing.T) { _ = handlers.trainingDateAttendeeRepository.Create(td.ID, attendee) rr, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees/%d", tr.ID, td.ID, attendee.ID)) + defer func() { _ = rr.Body.Close() }() + assert.Equal(t, http.StatusOK, rr.StatusCode) - rr, _ = doDelete(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees/%d", tr.ID, td.ID, attendee.ID)) - assert.Equal(t, http.StatusNoContent, rr.StatusCode) + deleteResp, _ := doDelete(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees/%d", tr.ID, td.ID, attendee.ID)) + defer func() { _ = deleteResp.Body.Close() }() - rr, _ = doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees/%d", tr.ID, td.ID, attendee.ID)) - assert.Equal(t, http.StatusNotFound, rr.StatusCode) + assert.Equal(t, http.StatusNoContent, deleteResp.StatusCode) + + deletedResp, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees/%d", tr.ID, td.ID, attendee.ID)) + defer func() { _ = deletedResp.Body.Close() }() + + assert.Equal(t, http.StatusNotFound, deletedResp.StatusCode) }) t.Run("Mark training date attendee as paid", func(t *testing.T) { @@ -1051,6 +1121,8 @@ func TestServer(t *testing.T) { _ = handlers.trainingDateAttendeeRepository.Create(td.ID, attendee) rr, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees/%d", tr.ID, td.ID, attendee.ID)) + defer func() { _ = rr.Body.Close() }() + assert.Equal(t, http.StatusOK, rr.StatusCode) var attendeeResponse TrainingDateAttendee @@ -1058,24 +1130,28 @@ func TestServer(t *testing.T) { assert.NoError(t, err, "error unmarshalling response") assert.Equal(t, !paid.Paid, attendeeResponse.HasPaid) - rr, _ = doPut(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees/%d/paid", tr.ID, td.ID, attendee.ID), paid) - assert.Equal(t, http.StatusOK, rr.StatusCode) + updateResp, _ := doPut(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees/%d/paid", tr.ID, td.ID, attendee.ID), paid) + defer func() { _ = updateResp.Body.Close() }() - err = json.NewDecoder(rr.Body).Decode(&attendeeResponse) + assert.Equal(t, http.StatusOK, updateResp.StatusCode) + + err = json.NewDecoder(updateResp.Body).Decode(&attendeeResponse) assert.NoError(t, err, "error unmarshalling response") assert.Equal(t, paid.Paid, attendeeResponse.HasPaid) - rr, _ = doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees/%d", tr.ID, td.ID, attendee.ID)) - assert.Equal(t, http.StatusOK, rr.StatusCode) + getAttendeeResp, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees/%d", tr.ID, td.ID, attendee.ID)) + defer func() { _ = getAttendeeResp.Body.Close() }() - err = json.NewDecoder(rr.Body).Decode(&attendeeResponse) + assert.Equal(t, http.StatusOK, getAttendeeResp.StatusCode) + + err = json.NewDecoder(getAttendeeResp.Body).Decode(&attendeeResponse) assert.NoError(t, err, "error unmarshalling response") assert.Equal(t, paid.Paid, attendeeResponse.HasPaid) }) t.Run("Mark training date attendee as attended", func(t *testing.T) { tr := &training.Training{ - Name: "Testing Training for training date", + Name: "Testing Training: mark attendee as attended", Description: "This is a test training for training date", Days: 1, Pricing: []training.Price{ @@ -1124,6 +1200,8 @@ func TestServer(t *testing.T) { _ = handlers.trainingDateAttendeeRepository.Create(td.ID, attendee) rr, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees/%d", tr.ID, td.ID, attendee.ID)) + defer func() { _ = rr.Body.Close() }() + assert.Equal(t, http.StatusOK, rr.StatusCode) var attendeeResponse TrainingDateAttendee @@ -1131,24 +1209,28 @@ func TestServer(t *testing.T) { assert.NoError(t, err, "error unmarshalling response") assert.Equal(t, !attended.Attended, attendeeResponse.HasAttended) - rr, _ = doPut(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees/%d/attended", tr.ID, td.ID, attendee.ID), attended) - assert.Equal(t, http.StatusOK, rr.StatusCode) + updateResp, _ := doPut(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees/%d/attended", tr.ID, td.ID, attendee.ID), attended) + defer func() { _ = updateResp.Body.Close() }() - err = json.NewDecoder(rr.Body).Decode(&attendeeResponse) + assert.Equal(t, http.StatusOK, updateResp.StatusCode) + + err = json.NewDecoder(updateResp.Body).Decode(&attendeeResponse) assert.NoError(t, err, "error unmarshalling response") assert.Equal(t, attended.Attended, attendeeResponse.HasAttended) - rr, _ = doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees/%d", tr.ID, td.ID, attendee.ID)) - assert.Equal(t, http.StatusOK, rr.StatusCode) + getAttendeeResp, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees/%d", tr.ID, td.ID, attendee.ID)) + defer func() { _ = getAttendeeResp.Body.Close() }() - err = json.NewDecoder(rr.Body).Decode(&attendeeResponse) + assert.Equal(t, http.StatusOK, getAttendeeResp.StatusCode) + + err = json.NewDecoder(getAttendeeResp.Body).Decode(&attendeeResponse) assert.NoError(t, err, "error unmarshalling response") assert.Equal(t, attended.Attended, attendeeResponse.HasAttended) }) t.Run("Get count of training date attendees", func(t *testing.T) { tr := &training.Training{ - Name: "Testing Training for training date", + Name: "Testing Training: get attendee count", Description: "This is a test training for training date", Days: 1, Pricing: []training.Price{ @@ -1195,6 +1277,8 @@ func TestServer(t *testing.T) { } rr, _ := doGet(t, app, fmt.Sprintf("/v1/trainings/%d/dates/%d/attendees/count", tr.ID, td.ID)) + defer func() { _ = rr.Body.Close() }() + assert.Equal(t, http.StatusOK, rr.StatusCode) var attendeesResponse GetTrainingDateAttendeeCountResponse