diff --git a/testing/helpers.py b/testing/helpers.py index 1dba7f0..20b00b1 100644 --- a/testing/helpers.py +++ b/testing/helpers.py @@ -1,6 +1,7 @@ import requests import string import random +import json # Helper function for the TTime API testing suite @@ -34,7 +35,7 @@ getUpdateWeeklyReportPath = base_url + "/api/updateWeeklyReport" removeProjectPath = base_url + "/api/removeProject" promoteToPmPath = base_url + "/api/promoteToPm" -debug_output = False +debug_output = True def gprint(*args, **kwargs): @@ -82,7 +83,9 @@ def register_and_login(username: string, password: string) -> string: return response.json()["token"] -def create_project(token: string, project_name: string, description: string = "Test description"): +def create_project( + token: string, project_name: string, description: string = "Test description" +): dprint("Creating project with name: ", project_name) response = requests.post( addProjectPath, @@ -119,3 +122,30 @@ def promoteToManager(token: string, username: string, project_name: string): ) dprint(response.text) return response + + +def submitReport(token: string, report): + dprint("Submitting report: ", report) + response = requests.post( + submitReportPath, + json=report, + headers={"Authorization": "Bearer " + token}, + ) + return response + + +def getReport(token: string, username: string, projectName: string): + # Retrieve the report ID + response = requests.get( + getWeeklyReportPath, + headers={"Authorization": "Bearer " + token}, + params={"username": username, "projectName": projectName, "week": 1}, + ) + return response.json() + + +def signReport(project_manager_token: string, report_id: int): + return requests.put( + signReportPath + "/" + str(report_id), + headers={"Authorization": "Bearer " + project_manager_token}, + ) diff --git a/testing/testing.py b/testing/testing.py index 7cc5e9d..a2dfb64 100644 --- a/testing/testing.py +++ b/testing/testing.py @@ -1,5 +1,4 @@ import requests -import string # This modules contains helper functions for the tests from helpers import * @@ -10,16 +9,15 @@ print("Running Tests...") username = "user_" + randomString() projectName = "project_" + randomString() -#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(): dprint("Testing ProjectRoleChange") localUsername = randomString() localProjectName = randomString() register(localUsername, "username_password") - token = login(localUsername, "username_password").json()[ - "token" - ] + token = login(localUsername, "username_password").json()["token"] # Just checking since this test is built somewhat differently than the others assert token != None, "Login failed" @@ -44,14 +42,14 @@ def test_ProjectRoleChange(): assert response.status_code == 200, "ProjectRoleChange failed" gprint("test_ProjectRoleChange successful") - + def test_get_user_projects(): username = "user2" password = "123" dprint("Testing get user projects") - loginResponse = login(username, password) + loginResponse = login(username, password) # Check if the user is added to the project response = requests.get( getUserProjectsPath + "/" + username, @@ -78,6 +76,7 @@ def test_create_user(): assert response.status_code == 200, "Registration failed" gprint("test_create_user successful") + # Test function to add a project def test_add_project(): loginResponse = login(username, "always_same") @@ -91,6 +90,7 @@ def test_add_project(): assert response.status_code == 200, "Add project failed" gprint("test_add_project successful") + # Test function to submit a report def test_submit_report(): token = login(username, "always_same").json()["token"] @@ -112,6 +112,7 @@ def test_submit_report(): assert response.status_code == 200, "Submit report failed" gprint("test_submit_report successful") + # Test function to get a weekly report def test_get_weekly_report(): token = login(username, "always_same").json()["token"] @@ -140,15 +141,15 @@ def test_get_project(): # Test function to add a user to a project def test_add_user_to_project(): # User to create - pm_user = "user"+randomString() + pm_user = "user" + randomString() pm_passwd = "password" # User to add - member_user = "member"+randomString() + member_user = "member" + randomString() member_passwd = "password" # Name of the project to be created - project_name = "project"+randomString() + project_name = "project" + randomString() pm_token = register_and_login(pm_user, pm_passwd) register(member_user, member_passwd) @@ -160,51 +161,37 @@ def test_add_user_to_project(): response = addToProject(pm_token, member_user, project_name) assert response.status_code == 200, "Add user to project failed" + # Test function to sign a report def test_sign_report(): - # Create a project manager user - project_manager = randomString() - register(project_manager, "project_manager_password") + # Pm user + pm_username = "pm" + randomString() + pm_password = "admin_password2" - # Register an admin - admin_username = randomString() - admin_password = "admin_password2" - dprint( - "Registering with username: ", admin_username, " and password: ", admin_password - ) - response = requests.post( - registerPath, json={"username": admin_username, "password": admin_password} - ) - dprint(response.text) + # User to add + member_user = "member" + randomString() + member_passwd = "password" - # Log in as the admin - admin_token = login(admin_username, admin_password).json()["token"] - response = requests.post( - promoteToAdminPath, - json={"username": admin_username}, - headers={"Authorization": "Bearer " + admin_token}, - ) + # Name of the project to be created + project_name = "project" + randomString() - response = requests.put( - addUserToProjectPath + "/" + projectName, - headers={"Authorization": "Bearer " + admin_token}, - params={"userName": project_manager} - ) - assert response.status_code == 200, "Add project manager to project failed" - dprint("Project manager added to project successfully") + # Register and get the tokens for both users + pm_token = register_and_login(pm_username, pm_password) + member_token = register_and_login(member_user, member_passwd) - # Log in as the project manager - project_manager_token = login(project_manager, "project_manager_password").json()[ - "token" - ] + # Create the project + response = create_project(pm_token, project_name) + assert response.status_code == 200, "Create project failed" + + # Add the user to the project + response = addToProject(pm_token, member_user, project_name) # Submit a report for the project - token = login(username, "always_same").json()["token"] - response = requests.post( - submitReportPath, - json={ - "projectName": projectName, - "week": 2, + response = submitReport( + member_token, + { + "projectName": project_name, + "week": 1, "developmentTime": 10, "meetingTime": 5, "adminTime": 5, @@ -212,37 +199,23 @@ def test_sign_report(): "studyTime": 10, "testingTime": 10, }, - headers={"Authorization": "Bearer " + token}, ) assert response.status_code == 200, "Submit report failed" - dprint("Submit report successful") # Retrieve the report ID - response = requests.get( - getWeeklyReportPath, - headers={"Authorization": "Bearer " + token}, - params={"username": username, "projectName": projectName, "week": 1}, - ) - dprint(response.text) - report_id = response.json()["reportId"] + report_id = getReport(member_token, member_user, project_name)["reportId"] # Sign the report as the project manager - response = requests.put( - signReportPath + "/" + str(report_id), - headers={"Authorization": "Bearer " + project_manager_token}, - ) + response = signReport(pm_token, report_id) assert response.status_code == 200, "Sign report failed" dprint("Sign report successful") # Retrieve the report ID again for confirmation - response = requests.get( - getWeeklyReportPath, - headers={"Authorization": "Bearer " + token}, - params={"username": username, "projectName": projectName, "week": 1}, - ) - dprint(response.text) + report_id = getReport(member_token, member_user, project_name)["reportId"] + assert report_id != None, "Get report failed" gprint("test_sign_report successful") + # Test function to get weekly reports for a user in a project def test_get_weekly_reports_user(): # Log in as the user @@ -253,13 +226,12 @@ def test_get_weekly_reports_user(): getWeeklyReportsUserPath + "/" + projectName, headers={"Authorization": "Bearer " + token}, ) - + dprint(response.text) 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 @@ -270,11 +242,12 @@ def test_check_if_project_manager(): checkIfProjectManagerPath + "/" + projectName, headers={"Authorization": "Bearer " + token}, ) - + dprint(response.text) assert response.status_code == 200, "Check if project manager failed" gprint("test_check_if_project_manager successful") + def test_ensure_manager_of_created_project(): # Create a new user to add to the project newUser = "karen_" + randomString() @@ -298,6 +271,7 @@ def test_ensure_manager_of_created_project(): assert response.json()["isProjectManager"] == True, "User is not project manager" gprint("test_ensure_admin_of_created_project successful") + def test_change_user_name(): # Register a new user new_user = randomString() @@ -317,7 +291,7 @@ def test_change_user_name(): ) admin_token = login(admin_username, admin_password).json()["token"] - # Promote to admin + # Promote to admin response = requests.post( promoteToAdminPath, json={"username": admin_username}, @@ -335,6 +309,7 @@ def test_change_user_name(): assert response.status_code == 200, "Change user name failed" gprint("test_change_user_name successful") + def test_list_all_users_project(): # Log in as a user who is a member of the project admin_username = randomString() @@ -358,11 +333,12 @@ def test_list_all_users_project(): # Make a request to list all users associated with the project response = requests.get( getUsersProjectPath + "/" + projectName, - headers={"Authorization": "Bearer " + admin_token}, + headers={"Authorization": "Bearer " + admin_token}, ) assert response.status_code == 200, "List all users project failed" gprint("test_list_all_users_project sucessful") + def test_update_weekly_report(): # Log in as the user token = login(username, "always_same").json()["token"] @@ -428,17 +404,19 @@ def test_remove_project(): assert response.status_code == 200, "Remove project failed" gprint("test_remove_project successful") + def test_get_unsigned_reports(): # Log in as the user - token = login("user2", "123").json()["token"] + token = login("user2", "123").json()["token"] + + # Make a request to get all unsigned reports + response = requests.get( + getUnsignedReportsPath + "/" + projectName, + headers={"Authorization": "Bearer " + token}, + ) + assert response.status_code == 200, "Get unsigned reports failed" + gprint("test_get_unsigned_reports successful") - # Make a request to get all unsigned reports - response = requests.get( - getUnsignedReportsPath + "/" + projectName, - headers={"Authorization": "Bearer " + token}, - ) - assert response.status_code == 200, "Get unsigned reports failed" - gprint("test_get_unsigned_reports successful") def test_get_other_users_report_as_pm(): # Create user @@ -463,7 +441,7 @@ def test_get_other_users_report_as_pm(): # Add other user to project response = requests.put( addUserToProjectPath + "/" + project, - headers={"Authorization": "Bearer " + pm_token}, # note pm_token + headers={"Authorization": "Bearer " + pm_token}, # note pm_token params={"userName": other_user}, ) assert response.status_code == 200, "Add user to project failed" @@ -493,17 +471,18 @@ def test_get_other_users_report_as_pm(): ) assert response.status_code == 200, "Get weekly report failed" + def test_promote_to_manager(): # User to create - pm_user = "user"+randomString() + pm_user = "user" + randomString() pm_passwd = "password" # User to promote - member_user = "member"+randomString() + member_user = "member" + randomString() member_passwd = "password" # Name of the project to be created - project_name = "project"+randomString() + project_name = "project" + randomString() pm_token = register_and_login(pm_user, pm_passwd) member_token = register_and_login(member_user, member_passwd) @@ -526,7 +505,7 @@ if __name__ == "__main__": test_submit_report() test_get_weekly_report() test_get_project() - #test_sign_report() + test_sign_report() test_add_user_to_project() test_get_weekly_reports_user() test_check_if_project_manager() @@ -537,4 +516,3 @@ if __name__ == "__main__": test_change_user_name() test_update_weekly_report() test_get_other_users_report_as_pm() - \ No newline at end of file