From ce4cf788ae2beaf148825b0753992cd85498f81f Mon Sep 17 00:00:00 2001 From: dDogge Date: Tue, 19 Mar 2024 19:30:01 +0100 Subject: [PATCH] Added handler and corresponding test for the IsProjectManager function --- backend/internal/handlers/global_state.go | 1 + .../handlers/handlers_project_related.go | 17 ++++++++++++++++ backend/main.go | 1 + testing.py | 20 +++++++++++++++++++ 4 files changed, 39 insertions(+) diff --git a/backend/internal/handlers/global_state.go b/backend/internal/handlers/global_state.go index 0d041b0..5d01368 100644 --- a/backend/internal/handlers/global_state.go +++ b/backend/internal/handlers/global_state.go @@ -21,6 +21,7 @@ type GlobalState interface { AddUserToProjectHandler(c *fiber.Ctx) error PromoteToAdmin(c *fiber.Ctx) error GetWeeklyReportsUserHandler(c *fiber.Ctx) error + IsProjectManagerHandler(c *fiber.Ctx) error // GetProject(c *fiber.Ctx) error // To get a specific project // UpdateProject(c *fiber.Ctx) error // To update a project // DeleteProject(c *fiber.Ctx) error // To delete a project diff --git a/backend/internal/handlers/handlers_project_related.go b/backend/internal/handlers/handlers_project_related.go index f3a7ea0..df9f3e0 100644 --- a/backend/internal/handlers/handlers_project_related.go +++ b/backend/internal/handlers/handlers_project_related.go @@ -154,3 +154,20 @@ func (gs *GState) AddUserToProjectHandler(c *fiber.Ctx) error { log.Info("User added to project successfully:", requestData.Username) return c.SendStatus(fiber.StatusOK) } + +// IsProjectManagerHandler is a handler that checks if a user is a project manager for a given project +func (gs *GState) IsProjectManagerHandler(c *fiber.Ctx) error { + // Extract necessary parameters from the request query string + username := c.Query("username") + projectName := c.Query("projectName") + + // Check if the user is a project manager for the specified project + isManager, err := gs.Db.IsProjectManager(username, projectName) + if err != nil { + log.Info("Error checking project manager status:", err) + return c.Status(500).SendString(err.Error()) + } + + // Return the result as JSON + return c.JSON(map[string]bool{"isProjectManager": isManager}) +} diff --git a/backend/main.go b/backend/main.go index 900e1bd..abdf0db 100644 --- a/backend/main.go +++ b/backend/main.go @@ -95,6 +95,7 @@ func main() { server.Post("/api/promoteToAdmin", gs.PromoteToAdmin) server.Get("/api/users/all", gs.ListAllUsers) server.Get("/api/getWeeklyReportsUser", gs.GetWeeklyReportsUserHandler) + server.Get("api/checkIfProjectManager", gs.IsProjectManagerHandler) // Announce the port we are listening on and start the server err = server.Listen(fmt.Sprintf(":%d", conf.Port)) diff --git a/testing.py b/testing.py index 6b262fe..670abcd 100644 --- a/testing.py +++ b/testing.py @@ -38,6 +38,7 @@ addUserToProjectPath = base_url + "/api/addUserToProject" promoteToAdminPath = base_url + "/api/promoteToAdmin" getUserProjectsPath = base_url + "/api/getUserProjects" getWeeklyReportsUserPath = base_url + "/api/getWeeklyReportsUser" +checkIfProjectManagerPath = base_url + "/api/checkIfProjectManager" def test_get_user_projects(): @@ -292,6 +293,24 @@ def test_get_weekly_reports_user(): assert response.status_code == 200, "Get weekly reports for user failed" gprint("test_get_weekly_reports_user successful") +# Test function to check if a user is a project manager +def test_check_if_project_manager(): + # Log in as the user + token = login(username, "always_same").json()["token"] + + # Check if the user is a project manager for the project + response = requests.get( + checkIfProjectManagerPath, + headers={"Authorization": "Bearer " + token}, + params={"username": username, "projectName": projectName}, + ) + + dprint(response.text) + assert response.status_code == 200, "Check if project manager failed" + gprint("test_check_if_project_manager successful") + + + if __name__ == "__main__": test_get_user_projects() @@ -304,3 +323,4 @@ if __name__ == "__main__": test_sign_report() test_add_user_to_project() test_get_weekly_reports_user() + test_check_if_project_manager()