bummed handler
This commit is contained in:
		
							parent
							
								
									a2a8ccd185
								
							
						
					
					
						commit
						dea802bd91
					
				
					 6 changed files with 158 additions and 0 deletions
				
			
		|  | @ -36,6 +36,7 @@ type Database interface { | ||||||
| 	GetUserRole(username string, projectname string) (string, error) | 	GetUserRole(username string, projectname string) (string, error) | ||||||
| 	GetWeeklyReport(username string, projectName string, week int) (types.WeeklyReport, error) | 	GetWeeklyReport(username string, projectName string, week int) (types.WeeklyReport, error) | ||||||
| 	GetWeeklyReportsUser(username string, projectname string) ([]types.WeeklyReportList, error) | 	GetWeeklyReportsUser(username string, projectname string) ([]types.WeeklyReportList, error) | ||||||
|  | 	GetUnsignedWeeklyReports(projectName string) ([]types.WeeklyReport, error) | ||||||
| 	SignWeeklyReport(reportId int, projectManagerId int) error | 	SignWeeklyReport(reportId int, projectManagerId int) error | ||||||
| 	IsSiteAdmin(username string) (bool, error) | 	IsSiteAdmin(username string) (bool, error) | ||||||
| 	IsProjectManager(username string, projectname string) (bool, error) | 	IsProjectManager(username string, projectname string) (bool, error) | ||||||
|  | @ -353,6 +354,51 @@ func (d *Db) SignWeeklyReport(reportId int, projectManagerId int) error { | ||||||
| 	return err | 	return err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (d *Db) GetUnsignedWeeklyReports(projectName string) ([]types.WeeklyReport, error) { | ||||||
|  | 	// Define the SQL query to fetch unsigned reports for a given user | ||||||
|  | 	query := ` | ||||||
|  | 		SELECT | ||||||
|  | 			report_id, | ||||||
|  | 			user_id, | ||||||
|  | 			project_id, | ||||||
|  | 			week, | ||||||
|  | 			development_time, | ||||||
|  | 			meeting_time, | ||||||
|  | 			admin_time, | ||||||
|  | 			own_work_time, | ||||||
|  | 			study_time, | ||||||
|  | 			testing_time, | ||||||
|  | 			signed_by | ||||||
|  | 		FROM | ||||||
|  | 			weekly_reports | ||||||
|  | 		WHERE | ||||||
|  | 			signed_by IS NULL | ||||||
|  | 			AND project_id = (SELECT id FROM projects WHERE name = ?) | ||||||
|  | 	` | ||||||
|  | 
 | ||||||
|  | 	// Execute the query | ||||||
|  | 	rows, err := d.Queryx(query, projectName) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	defer rows.Close() | ||||||
|  | 
 | ||||||
|  | 	// Iterate over the rows and populate the result slice | ||||||
|  | 	var reports []types.WeeklyReport | ||||||
|  | 	for rows.Next() { | ||||||
|  | 		var report types.WeeklyReport | ||||||
|  | 		if err := rows.StructScan(&report); err != nil { | ||||||
|  | 			return nil, err | ||||||
|  | 		} | ||||||
|  | 		reports = append(reports, report) | ||||||
|  | 	} | ||||||
|  | 	if err := rows.Err(); err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return reports, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // IsSiteAdmin checks if a given username is a site admin | // IsSiteAdmin checks if a given username is a site admin | ||||||
| func (d *Db) IsSiteAdmin(username string) (bool, error) { | func (d *Db) IsSiteAdmin(username string) (bool, error) { | ||||||
| 	// Define the SQL query to check if the user is a site admin | 	// Define the SQL query to check if the user is a site admin | ||||||
|  |  | ||||||
|  | @ -470,6 +470,37 @@ func TestGetWeeklyReport(t *testing.T) { | ||||||
| 	// Check other fields similarly | 	// Check other fields similarly | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func TestGetUnsignedWeeklyReports(t *testing.T) { | ||||||
|  | 	db, err := setupAdvancedState() | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Error("setupState failed:", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	err = db.AddUser("testuser", "password") | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Error("AddUser failed:", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	err = db.AddProject("testproject", "description", "testuser") | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Error("AddProject failed:", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	err = db.AddWeeklyReport("testproject", "testuser", 1, 1, 1, 1, 1, 1, 1) | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Error("AddWeeklyReport failed:", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	reports, err := db.GetUnsignedWeeklyReports("testproject") | ||||||
|  | 	if err != nil { | ||||||
|  | 		t.Error("GetUnsignedWeeklyReports failed:", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if reports == nil { | ||||||
|  | 		t.Error("Expected non-nil reports, got nil") | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // TestSignWeeklyReport tests SignWeeklyReport function of the database | // TestSignWeeklyReport tests SignWeeklyReport function of the database | ||||||
| func TestSignWeeklyReport(t *testing.T) { | func TestSignWeeklyReport(t *testing.T) { | ||||||
| 	db, err := setupState() | 	db, err := setupState() | ||||||
|  |  | ||||||
|  | @ -28,6 +28,7 @@ type GlobalState interface { | ||||||
| 	ProjectRoleChange(c *fiber.Ctx) error   // To change a users role in a project | 	ProjectRoleChange(c *fiber.Ctx) error   // To change a users role in a project | ||||||
| 	ChangeUserName(c *fiber.Ctx) error      // WIP | 	ChangeUserName(c *fiber.Ctx) error      // WIP | ||||||
| 	GetAllUsersProject(c *fiber.Ctx) error  // WIP | 	GetAllUsersProject(c *fiber.Ctx) error  // WIP | ||||||
|  | 	GetUnsignedReports(c *fiber.Ctx) error  //  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // "Constructor" | // "Constructor" | ||||||
|  |  | ||||||
|  | @ -115,6 +115,42 @@ func (gs *GState) SignReport(c *fiber.Ctx) error { | ||||||
| 	return c.Status(200).SendString("Weekly report signed successfully") | 	return c.Status(200).SendString("Weekly report signed successfully") | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (gs *GState) GetUnsignedReports(c *fiber.Ctx) error { | ||||||
|  | 	// Extract the necessary parameters from the token | ||||||
|  | 	user := c.Locals("user").(*jwt.Token) | ||||||
|  | 	claims := user.Claims.(jwt.MapClaims) | ||||||
|  | 	projectManagerUsername := claims["name"].(string) | ||||||
|  | 
 | ||||||
|  | 	// Extract project name and week from query parameters | ||||||
|  | 	projectName := c.Query("projectName") | ||||||
|  | 
 | ||||||
|  | 	log.Info("Getting unsigned reports for") | ||||||
|  | 
 | ||||||
|  | 	if projectName == "" { | ||||||
|  | 		log.Info("Missing project name") | ||||||
|  | 		return c.Status(400).SendString("Missing project name") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// Get the project manager's ID | ||||||
|  | 	isProjectManager, err := gs.Db.IsProjectManager(projectManagerUsername, projectName) | ||||||
|  | 	if err != nil { | ||||||
|  | 		log.Info("Failed to get project manager ID") | ||||||
|  | 		return c.Status(500).SendString("Failed to get project manager ID") | ||||||
|  | 	} | ||||||
|  | 	log.Info("User is Project Manager: ", isProjectManager) | ||||||
|  | 
 | ||||||
|  | 	// Call the database function to get the unsigned weekly reports | ||||||
|  | 	reports, err := gs.Db.GetUnsignedWeeklyReports(projectName) | ||||||
|  | 	if err != nil { | ||||||
|  | 		log.Info("Error getting unsigned weekly reports:", err) | ||||||
|  | 		return c.Status(500).SendString(err.Error()) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	log.Info("Returning unsigned reports") | ||||||
|  | 	// Return the list of unsigned reports | ||||||
|  | 	return c.JSON(reports) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // GetWeeklyReportsUserHandler retrieves all weekly reports for a user in a specific project | // GetWeeklyReportsUserHandler retrieves all weekly reports for a user in a specific project | ||||||
| func (gs *GState) GetWeeklyReportsUserHandler(c *fiber.Ctx) error { | func (gs *GState) GetWeeklyReportsUserHandler(c *fiber.Ctx) error { | ||||||
| 	// Extract the necessary parameters from the token | 	// Extract the necessary parameters from the token | ||||||
|  |  | ||||||
|  | @ -92,6 +92,7 @@ func main() { | ||||||
| 	server.Get("/api/project/:projectId", gs.GetProject) | 	server.Get("/api/project/:projectId", gs.GetProject) | ||||||
| 	server.Get("/api/project/getAllUsers", gs.GetAllUsersProject) | 	server.Get("/api/project/getAllUsers", gs.GetAllUsersProject) | ||||||
| 	server.Get("/api/getWeeklyReport", gs.GetWeeklyReport) | 	server.Get("/api/getWeeklyReport", gs.GetWeeklyReport) | ||||||
|  | 	server.Get("/api/getUnsignedReports", gs.GetUnsignedReports) | ||||||
| 	server.Post("/api/signReport", gs.SignReport) | 	server.Post("/api/signReport", gs.SignReport) | ||||||
| 	server.Put("/api/addUserToProject", gs.AddUserToProjectHandler) | 	server.Put("/api/addUserToProject", gs.AddUserToProjectHandler) | ||||||
| 	server.Put("/api/changeUserName", gs.ChangeUserName) | 	server.Put("/api/changeUserName", gs.ChangeUserName) | ||||||
|  |  | ||||||
							
								
								
									
										43
									
								
								testing.py
									
										
									
									
									
								
							
							
						
						
									
										43
									
								
								testing.py
									
										
									
									
									
								
							|  | @ -41,6 +41,7 @@ getWeeklyReportsUserPath = base_url + "/api/getWeeklyReportsUser" | ||||||
| checkIfProjectManagerPath = base_url + "/api/checkIfProjectManager" | checkIfProjectManagerPath = base_url + "/api/checkIfProjectManager" | ||||||
| ProjectRoleChangePath = base_url + "/api/ProjectRoleChange" | ProjectRoleChangePath = base_url + "/api/ProjectRoleChange" | ||||||
| getUsersProjectPath = base_url + "/api/getUsersProject" | getUsersProjectPath = base_url + "/api/getUsersProject" | ||||||
|  | getUsignedReportsPath = base_url + "/api/getUsignedReports" | ||||||
| 
 | 
 | ||||||
| #ta bort auth i handlern för att få testet att gå igenom | #ta bort auth i handlern för att få testet att gå igenom | ||||||
| def test_ProjectRoleChange(): | def test_ProjectRoleChange(): | ||||||
|  | @ -329,6 +330,47 @@ def test_get_weekly_reports_user(): | ||||||
|     assert response.status_code == 200, "Get weekly reports for user failed" |     assert response.status_code == 200, "Get weekly reports for user failed" | ||||||
|     gprint("test_get_weekly_reports_user successful") |     gprint("test_get_weekly_reports_user successful") | ||||||
| 
 | 
 | ||||||
|  | def test_get_usigned_reports(): | ||||||
|  |     # Log in as the user | ||||||
|  | 
 | ||||||
|  |     token = login(username, "always_same").json()["token"] | ||||||
|  |     response = requests.post( | ||||||
|  |         submitReportPath, | ||||||
|  |         json={ | ||||||
|  |             "projectName": projectName, | ||||||
|  |             "week": 3, | ||||||
|  |             "developmentTime": 10, | ||||||
|  |             "meetingTime": 5, | ||||||
|  |             "adminTime": 5, | ||||||
|  |             "ownWorkTime": 10, | ||||||
|  |             "studyTime": 10, | ||||||
|  |             "testingTime": 10, | ||||||
|  |         }, | ||||||
|  |         headers={"Authorization": "Bearer " + token}, | ||||||
|  |     ) | ||||||
|  |     dprint(response.text) | ||||||
|  |     assert response.status_code == 200, "Submit report failed" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     # Get weekly reports for the user in the project | ||||||
|  |     response = requests.get( | ||||||
|  |         getWeeklyReportsUserPath + "/" + projectName, | ||||||
|  |         headers={"Authorization": "Bearer " + token}, | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     dprint(response.text) | ||||||
|  |     assert response.status_code == 200, "Get weekly reports for user failed" | ||||||
|  | 
 | ||||||
|  |     response = requests.get( | ||||||
|  |         getUsignedReportsPath + "/" + projectName, | ||||||
|  |         headers={"Authorization": "Bearer " + token}, | ||||||
|  |     ) | ||||||
|  |     dprint(response.text) | ||||||
|  |     assert response.status_code == 200, "Get unsigned reports for user failed" | ||||||
|  |     gprint("test_get_usigned_reports successful") | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| # Test function to check if a user is a project manager | # Test function to check if a user is a project manager | ||||||
| def test_check_if_project_manager(): | def test_check_if_project_manager(): | ||||||
|     # Log in as the user |     # Log in as the user | ||||||
|  | @ -369,6 +411,7 @@ def test_ensure_manager_of_created_project(): | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| if __name__ == "__main__": | if __name__ == "__main__": | ||||||
|  |     test_get_usigned_reports() | ||||||
|     test_get_user_projects() |     test_get_user_projects() | ||||||
|     test_create_user() |     test_create_user() | ||||||
|     test_login() |     test_login() | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 al8763be
						al8763be