1
0
Fork 0

test(server): repeating slug in test caused race conditions: segfault: nil ptr dereference

This commit is contained in:
Vojtěch Mareš 2024-06-27 19:20:40 +02:00
parent f2bab62e08
commit 0c9cbc9d7a
Signed by: vojtech.mares
GPG key ID: C6827B976F17240D

View file

@ -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(&notFound)
err := json.NewDecoder(getResp.Body).Decode(&notFound)
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