diff --git a/backend/internal/database/db.go b/backend/internal/database/db.go index e2aa366..82a3551 100644 --- a/backend/internal/database/db.go +++ b/backend/internal/database/db.go @@ -107,10 +107,7 @@ func (d *Db) GetAllProjects() ([]types.Project, error) { // GetProject retrieves a specific project by its ID. func (d *Db) GetProject(projectId int) (types.Project, error) { var project types.Project - err := d.Get(&project, "SELECT * FROM projects WHERE id = ?", projectId) - if err != nil { - println("Error getting project: ", err) - } + err := d.Select(&project, "SELECT * FROM projects WHERE id = ?") return project, err } diff --git a/backend/internal/database/db_test.go b/backend/internal/database/db_test.go index a7f3878..2378b3d 100644 --- a/backend/internal/database/db_test.go +++ b/backend/internal/database/db_test.go @@ -537,32 +537,45 @@ func TestSignWeeklyReportByAnotherProjectManager(t *testing.T) { } } -func TestGetProject(t *testing.T) { +func TestIsSiteAdmin(t *testing.T) { db, err := setupState() if err != nil { t.Error("setupState failed:", err) } - // Add a user - err = db.AddUser("testuser", "password") + // Add a site admin + err = db.AddUser("admin", "password") if err != nil { t.Error("AddUser failed:", err) } - // Add a project - err = db.AddProject("testproject", "description", "testuser") + // Promote the user to site admin + err = db.PromoteToAdmin("admin") if err != nil { - t.Error("AddProject failed:", err) + t.Error("PromoteToAdmin failed:", err) } - // Retrieve the added project - project, err := db.GetProject(1) + // Check if the user is a site admin + isAdmin, err := db.IsSiteAdmin("admin") if err != nil { - t.Error("GetProject failed:", err) + t.Error("IsSiteAdmin failed:", err) + } + if !isAdmin { + t.Error("IsSiteAdmin failed: expected true, got false") } - // Check if the retrieved project matches the expected values - if project.Name != "testproject" { - t.Errorf("Expected Name to be testproject, got %s", project.Name) + // Add a regular user + err = db.AddUser("regularuser", "password") + if err != nil { + t.Error("AddUser failed:", err) + } + + // Check if the regular user is not a site admin + isRegularUserAdmin, err := db.IsSiteAdmin("regularuser") + if err != nil { + t.Error("IsSiteAdmin failed:", err) + } + if isRegularUserAdmin { + t.Error("IsSiteAdmin failed: expected false, got true") } } diff --git a/backend/internal/handlers/global_state.go b/backend/internal/handlers/global_state.go index 566d549..ef7e48d 100644 --- a/backend/internal/handlers/global_state.go +++ b/backend/internal/handlers/global_state.go @@ -17,7 +17,6 @@ type GlobalState interface { SubmitWeeklyReport(c *fiber.Ctx) error GetWeeklyReport(c *fiber.Ctx) error SignReport(c *fiber.Ctx) error - GetProject(c *fiber.Ctx) error AddUserToProjectHandler(c *fiber.Ctx) error PromoteToAdmin(c *fiber.Ctx) error // GetProject(c *fiber.Ctx) error // To get a specific project diff --git a/backend/internal/handlers/handlers_project_related.go b/backend/internal/handlers/handlers_project_related.go index 3732249..74f57f7 100644 --- a/backend/internal/handlers/handlers_project_related.go +++ b/backend/internal/handlers/handlers_project_related.go @@ -66,10 +66,6 @@ func (gs *GState) ProjectRoleChange(c *fiber.Ctx) error { func (gs *GState) GetProject(c *fiber.Ctx) error { // Extract the project ID from the request parameters or body projectID := c.Params("projectID") - if projectID == "" { - return c.Status(400).SendString("No project ID provided") - } - println("Getting project with ID: ", projectID) // Parse the project ID into an integer projectIDInt, err := strconv.Atoi(projectID) @@ -84,7 +80,6 @@ func (gs *GState) GetProject(c *fiber.Ctx) error { } // Return the project as JSON - println("Returning project: ", project.Name) return c.JSON(project) } diff --git a/backend/main.go b/backend/main.go index 3e2fb75..7cf6c9f 100644 --- a/backend/main.go +++ b/backend/main.go @@ -78,7 +78,6 @@ func main() { server.Post("/api/loginrenew", gs.LoginRenew) server.Delete("/api/userdelete/:username", gs.UserDelete) // Perhaps just use POST to avoid headaches server.Post("/api/project", gs.CreateProject) - server.Get("/api/project/:projectId", gs.GetProject) server.Get("/api/getWeeklyReport", gs.GetWeeklyReport) server.Post("/api/signReport", gs.SignReport) server.Put("/api/addUserToProject", gs.AddUserToProjectHandler) diff --git a/frontend/src/API/API.ts b/frontend/src/API/API.ts index b3cb776..7a1ccd0 100644 --- a/frontend/src/API/API.ts +++ b/frontend/src/API/API.ts @@ -29,6 +29,11 @@ interface API { project: NewProject, token: string, ): Promise>; + /** Gets all the projects of a user*/ + getUserProjects( + username: string, + token: string, + ): Promise>; /** Submit a weekly report */ submitWeeklyReport( project: NewWeeklyReport, @@ -41,13 +46,6 @@ interface API { week: string, token: string, ): Promise>; - /** Gets all the projects of a user*/ - getUserProjects( - username: string, - token: string, - ): Promise>; - /** Gets a project from id*/ - getProject(id: number): Promise>; } // Export an instance of the API @@ -255,30 +253,4 @@ export const api: API = { return Promise.resolve({ success: false, message: "Failed to login" }); } }, - - // Gets a projet by id, currently untested since we have no javascript-based tests - async getProject(id: number): Promise> { - try { - const response = await fetch(`/api/project/${id}`, { - method: "GET", - }); - - if (!response.ok) { - return { - success: false, - message: "Failed to get project: Response code " + response.status, - }; - } else { - const data = (await response.json()) as Project; - return { success: true, data }; - } - // The code below is garbage but satisfies the linter - // This needs fixing, do not copy this pattern - } catch (e: unknown) { - return { - success: false, - message: "Failed to get project: " + (e as Error).toString(), - }; - } - }, }; diff --git a/testing.py b/testing.py index e342598..164c64e 100644 --- a/testing.py +++ b/testing.py @@ -22,13 +22,9 @@ loginPath = base_url + "/api/login" addProjectPath = base_url + "/api/project" submitReportPath = base_url + "/api/submitReport" getWeeklyReportPath = base_url + "/api/getWeeklyReport" -<<<<<<< HEAD -getProjectPath = base_url + "/api/project" -======= signReportPath = base_url + "/api/signReport" addUserToProjectPath = base_url + "/api/addUserToProject" promoteToAdminPath = base_url + "/api/promoteToAdmin" ->>>>>>> 9ad89d60636ac6091d71b0bf307982becc9b89fe # Posts the username and password to the register endpoint @@ -106,17 +102,6 @@ def test_get_weekly_report(): params={"username": username, "projectName": projectName , "week": 1} ) print(response.text) - assert response.status_code == 200, "Get weekly report failed" - -# Tests getting a project by id -def test_get_project(): - token = login(username, "always_same").json()["token"] - response = requests.get( - getProjectPath + "/1", # Assumes that the project with id 1 exists - headers={"Authorization": "Bearer " + token}, - ) - print(response.text) - assert response.status_code == 200, "Get project failed" # Test function to add a user to a project def test_add_user_to_project(): @@ -232,9 +217,5 @@ if __name__ == "__main__": test_add_project() test_submit_report() test_get_weekly_report() -<<<<<<< HEAD - test_get_project() -======= test_sign_report() - test_add_user_to_project() ->>>>>>> 9ad89d60636ac6091d71b0bf307982becc9b89fe + test_add_user_to_project() \ No newline at end of file