From 95a1f802b0f7d7ab00e942732153782eb89655cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20Andr=C3=A9s=20Chaparro=20Quintero?= <62714297+PedroChaparro@users.noreply.github.com> Date: Tue, 3 Oct 2023 19:50:48 -0500 Subject: [PATCH] release: v0.13.1 (#59) * fix: Send course information when an student joins using invitation code (#58) * docs(openapi): Update spec * fix(courses): Return course information in endpoint to join using invitation code * test(accounts): Update tests --- CHANGELOG.md | 30 ++++++++++++++----- __tests__/integration/courses_test.go | 20 +++++++++---- docs/openapi/spec.openapi.yaml | 10 ++++++- src/courses/application/use_cases.go | 12 ++++---- .../infrastructure/http/http_controllers.go | 10 +++++-- version.json | 2 +- 6 files changed, 61 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d24e335..33a5d75 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,29 +1,45 @@ +## [0.13.1](https://github.com/upb-code-labs/main-api/compare/v0.13.0...v0.13.1) (2023-10-04) + + +### Bug Fixes + +* Send course information when an student joins using invitation code ([#58](https://github.com/upb-code-labs/main-api/issues/58)) ([c534e71](https://github.com/upb-code-labs/main-api/commit/c534e711f12fbb78d674dc3ff50cddc0fe4ec416)) + + + # [0.13.0](https://github.com/upb-code-labs/main-api/compare/v0.12.0...v0.13.0) (2023-09-30) + ### Features -- Toggle course visibility ([#55](https://github.com/upb-code-labs/main-api/issues/55)) ([28ec783](https://github.com/upb-code-labs/main-api/commit/28ec7836685f0b69502f3313245ba5c276229d44)) +* Toggle course visibility ([#55](https://github.com/upb-code-labs/main-api/issues/55)) ([28ec783](https://github.com/upb-code-labs/main-api/commit/28ec7836685f0b69502f3313245ba5c276229d44)) + + # [0.12.0](https://github.com/upb-code-labs/main-api/compare/v0.11.0...v0.12.0) (2023-09-30) + ### Features -- Get teachers and students courses ([#52](https://github.com/upb-code-labs/main-api/issues/52)) ([2265a05](https://github.com/upb-code-labs/main-api/commit/2265a0550fc11c18e8eedd66bcc4d25ab07f5f50)) +* Get teachers and students courses ([#52](https://github.com/upb-code-labs/main-api/issues/52)) ([2265a05](https://github.com/upb-code-labs/main-api/commit/2265a0550fc11c18e8eedd66bcc4d25ab07f5f50)) + + # [0.11.0](https://github.com/upb-code-labs/main-api/compare/v0.10.0...v0.11.0) (2023-09-29) + ### Features -- Join course using invitation code ([#51](https://github.com/upb-code-labs/main-api/issues/51)) ([6206f3c](https://github.com/upb-code-labs/main-api/commit/6206f3c78b7a6ff9bb2f10c6704a01ad75358d3b)) +* Join course using invitation code ([#51](https://github.com/upb-code-labs/main-api/issues/51)) ([6206f3c](https://github.com/upb-code-labs/main-api/commit/6206f3c78b7a6ff9bb2f10c6704a01ad75358d3b)) + + # [0.10.0](https://github.com/upb-code-labs/main-api/compare/v0.9.0...v0.10.0) (2023-09-29) + ### Features -- Get invitation code ([#50](https://github.com/upb-code-labs/main-api/issues/50)) ([35af762](https://github.com/upb-code-labs/main-api/commit/35af7627d6f51ac8a167b80db6ff25019e12a28c)) +* Get invitation code ([#50](https://github.com/upb-code-labs/main-api/issues/50)) ([35af762](https://github.com/upb-code-labs/main-api/commit/35af7627d6f51ac8a167b80db6ff25019e12a28c)) -# [0.9.0](https://github.com/upb-code-labs/main-api/compare/v0.8.0...v0.9.0) (2023-09-27) -### Features -- Create courses ([#43](https://github.com/upb-code-labs/main-api/issues/43)) ([09e15f8](https://github.com/upb-code-labs/main-api/commit/09e15f8c9460404a04eb30aa5417ca252f477a97)) diff --git a/__tests__/integration/courses_test.go b/__tests__/integration/courses_test.go index d2c5d06..f553820 100644 --- a/__tests__/integration/courses_test.go +++ b/__tests__/integration/courses_test.go @@ -227,7 +227,7 @@ func TestJoinCourse(t *testing.T) { }, { InvitationCode: invitationCode, - ExpectedStatusCode: http.StatusNoContent, + ExpectedStatusCode: http.StatusOK, }, { InvitationCode: invitationCode, // Already joined @@ -238,8 +238,16 @@ func TestJoinCourse(t *testing.T) { // --- 1. Try with a student account --- for _, testCase := range testCases { - code := AddStudentToCourse(testCase.InvitationCode) + response, code := AddStudentToCourse(testCase.InvitationCode) c.Equal(testCase.ExpectedStatusCode, code) + + // Check the response fields + if code == http.StatusOK { + c.NotEmpty(response["course"]) + c.NotEmpty(response["course"].(map[string]interface{})["uuid"]) + c.NotEmpty(response["course"].(map[string]interface{})["name"]) + c.NotEmpty(response["course"].(map[string]interface{})["color"]) + } } // --- 2. Try with a teacher account --- @@ -259,7 +267,7 @@ func TestJoinCourse(t *testing.T) { } } -func AddStudentToCourse(invitationCode string) (statusCode int) { +func AddStudentToCourse(invitationCode string) (response map[string]interface{}, statusCode int) { // Login as a student w, r := PrepareRequest("POST", "/api/v1/session/login", map[string]interface{}{ "email": registeredStudentEmail, @@ -274,7 +282,7 @@ func AddStudentToCourse(invitationCode string) (statusCode int) { r.AddCookie(cookie) router.ServeHTTP(w, r) - return w.Code + return ParseJsonResponse(w.Body), w.Code } func TestGetCourses(t *testing.T) { @@ -358,8 +366,8 @@ func TestToggleCourseVisibility(t *testing.T) { invitationCode, code := GetInvitationCode(courseUUID) c.Equal(http.StatusOK, code) c.NotEmpty(invitationCode) - code = AddStudentToCourse(invitationCode) - c.Equal(http.StatusNoContent, code) + _, code = AddStudentToCourse(invitationCode) + c.Equal(http.StatusOK, code) // Assertion> Hide the course json, code := ToggleCourseVisibility(cookie, courseUUID) diff --git a/docs/openapi/spec.openapi.yaml b/docs/openapi/spec.openapi.yaml index ea6e1ae..fafaefb 100644 --- a/docs/openapi/spec.openapi.yaml +++ b/docs/openapi/spec.openapi.yaml @@ -423,8 +423,16 @@ paths: example: "8_JI4bFA7" required: true responses: - "204": + "200": description: The student joined the course successfully. + content: + application/json: + schema: + type: object + properties: + course: + allOf: + - $ref: "#/components/schemas/public_course_fields" "400": description: The invitation code is not valid. content: diff --git a/src/courses/application/use_cases.go b/src/courses/application/use_cases.go index e165451..25fd7d6 100644 --- a/src/courses/application/use_cases.go +++ b/src/courses/application/use_cases.go @@ -84,33 +84,33 @@ func (useCases *CoursesUseCases) SaveCourse(dto *dtos.CreateCourseDTO) (*entitie return useCases.Repository.SaveCourse(dto) } -func (useCases *CoursesUseCases) JoinCourseUsingInvitationCode(dto *dtos.JoinCourseUsingInvitationCodeDTO) error { +func (useCases *CoursesUseCases) JoinCourseUsingInvitationCode(dto *dtos.JoinCourseUsingInvitationCodeDTO) (*entities.Course, error) { // Get the course by the invitation code course, err := useCases.Repository.GetCourseByInvitationCode(dto.InvitationCode) if err != nil { // Throw a domain error if no course with the given invitation code was found if err == sql.ErrNoRows { - return errors.NoCourseWithInvitationCodeError{ + return nil, errors.NoCourseWithInvitationCodeError{ Code: dto.InvitationCode, } } - return err + return nil, err } // Check if the student is already in the course isStudentInCourse, err := useCases.Repository.IsStudentInCourse(dto.StudentUUID, course.UUID) if err != nil { - return err + return nil, err } if isStudentInCourse { - return errors.StudentAlreadyInCourse{ + return nil, errors.StudentAlreadyInCourse{ CourseName: course.Name, } } err = useCases.Repository.AddStudentToCourse(dto.StudentUUID, course.UUID) - return err + return course, err } func (useCases *CoursesUseCases) GetEnrolledCourses(userUUID string) (*dtos.EnrolledCoursesDto, error) { diff --git a/src/courses/infrastructure/http/http_controllers.go b/src/courses/infrastructure/http/http_controllers.go index 8b2de8a..20629e1 100644 --- a/src/courses/infrastructure/http/http_controllers.go +++ b/src/courses/infrastructure/http/http_controllers.go @@ -102,7 +102,7 @@ func (controller *CoursesController) HandleJoinCourse(c *gin.Context) { } // Join course - err := controller.UseCases.JoinCourseUsingInvitationCode(&dtos.JoinCourseUsingInvitationCodeDTO{ + course, err := controller.UseCases.JoinCourseUsingInvitationCode(&dtos.JoinCourseUsingInvitationCodeDTO{ StudentUUID: studentUUID, InvitationCode: invitationCode, }) @@ -111,7 +111,13 @@ func (controller *CoursesController) HandleJoinCourse(c *gin.Context) { return } - c.JSON(http.StatusNoContent, nil) + c.JSON(http.StatusOK, gin.H{ + "course": gin.H{ + "uuid": course.UUID, + "name": course.Name, + "color": course.Color, + }, + }) } func (controller *CoursesController) HandleGetEnrolledCourses(c *gin.Context) { diff --git a/version.json b/version.json index bedde2c..a59a3dc 100644 --- a/version.json +++ b/version.json @@ -1,3 +1,3 @@ { - "version": "0.13.0" + "version": "0.13.1" }