test(server): repeating slug in test caused race conditions: segfault: nil ptr dereference
This commit is contained in:
parent
f2bab62e08
commit
0c9cbc9d7a
1 changed files with 178 additions and 94 deletions
|
|
@ -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
|
||||
|
|
|
|||
Reference in a new issue