2024-04-03 15:53:52 +02:00
|
|
|
import requests
|
|
|
|
import string
|
|
|
|
import random
|
2024-04-03 17:06:08 +02:00
|
|
|
import json
|
2024-04-03 15:53:52 +02:00
|
|
|
|
|
|
|
# Helper function for the TTime API testing suite
|
|
|
|
|
|
|
|
# For style guide, see:
|
|
|
|
# https://peps.python.org/pep-0008/#function-and-variable-names
|
|
|
|
# https://google.github.io/styleguide/pyguide.html#316-naming
|
|
|
|
|
|
|
|
##################
|
|
|
|
## Static Paths ##
|
|
|
|
##################
|
|
|
|
|
|
|
|
base_url = "http://localhost:8080"
|
|
|
|
|
|
|
|
registerPath = base_url + "/api/register"
|
|
|
|
loginPath = base_url + "/api/login"
|
|
|
|
addProjectPath = base_url + "/api/project"
|
|
|
|
submitReportPath = base_url + "/api/submitWeeklyReport"
|
|
|
|
getWeeklyReportPath = base_url + "/api/getWeeklyReport"
|
|
|
|
getProjectPath = base_url + "/api/project"
|
|
|
|
signReportPath = base_url + "/api/signReport"
|
|
|
|
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"
|
|
|
|
ProjectRoleChangePath = base_url + "/api/ProjectRoleChange"
|
|
|
|
getUsersProjectPath = base_url + "/api/getUsersProject"
|
|
|
|
getUnsignedReportsPath = base_url + "/api/getUnsignedReports"
|
|
|
|
getChangeUserNamePath = base_url + "/api/changeUserName"
|
|
|
|
getUpdateWeeklyReportPath = base_url + "/api/updateWeeklyReport"
|
|
|
|
removeProjectPath = base_url + "/api/removeProject"
|
|
|
|
promoteToPmPath = base_url + "/api/promoteToPm"
|
|
|
|
|
2024-04-03 17:06:08 +02:00
|
|
|
debug_output = True
|
2024-04-03 15:53:52 +02:00
|
|
|
|
|
|
|
|
|
|
|
def gprint(*args, **kwargs):
|
|
|
|
print("\033[92m", *args, "\033[00m", **kwargs)
|
|
|
|
|
|
|
|
|
|
|
|
def dprint(*args, **kwargs):
|
|
|
|
if debug_output:
|
|
|
|
print(*args, **kwargs)
|
|
|
|
|
|
|
|
|
|
|
|
def randomString(len=10):
|
|
|
|
"""Generate a random string of fixed length"""
|
|
|
|
letters = string.ascii_lowercase
|
|
|
|
return "".join(random.choice(letters) for i in range(len))
|
|
|
|
|
|
|
|
|
|
|
|
############ ############ ############ ############ ############
|
|
|
|
|
|
|
|
|
|
|
|
# Posts the username and password to the register endpoint
|
|
|
|
def register(username: string, password: string):
|
|
|
|
dprint("Registering with username: ", username, " and password: ", password)
|
|
|
|
response = requests.post(
|
|
|
|
registerPath, json={"username": username, "password": password}
|
|
|
|
)
|
|
|
|
dprint(response.text)
|
|
|
|
return response
|
|
|
|
|
|
|
|
|
|
|
|
# Posts the username and password to the login endpoint
|
|
|
|
def login(username: string, password: string):
|
|
|
|
dprint("Logging in with username: ", username, " and password: ", password)
|
|
|
|
response = requests.post(
|
|
|
|
loginPath, json={"username": username, "password": password}
|
|
|
|
)
|
|
|
|
dprint(response.text)
|
|
|
|
return response
|
|
|
|
|
|
|
|
|
|
|
|
# Register a user and return the token
|
|
|
|
def register_and_login(username: string, password: string) -> string:
|
|
|
|
register(username, password)
|
|
|
|
response = login(username, password)
|
|
|
|
return response.json()["token"]
|
|
|
|
|
|
|
|
|
2024-04-03 17:06:08 +02:00
|
|
|
def create_project(
|
|
|
|
token: string, project_name: string, description: string = "Test description"
|
|
|
|
):
|
2024-04-03 15:53:52 +02:00
|
|
|
dprint("Creating project with name: ", project_name)
|
|
|
|
response = requests.post(
|
|
|
|
addProjectPath,
|
|
|
|
headers={"Authorization": "Bearer " + token},
|
|
|
|
json={"name": project_name, "description": description},
|
|
|
|
)
|
|
|
|
dprint(response.text)
|
|
|
|
return response
|
|
|
|
|
|
|
|
|
|
|
|
# Add a user to a project, requires the user withing the token to be a project manager of said project
|
|
|
|
def addToProject(token: string, username: string, project_name: string):
|
|
|
|
dprint("Adding user with username: ", username, " to project: ", project_name)
|
|
|
|
response = requests.put(
|
|
|
|
addUserToProjectPath + "/" + project_name,
|
|
|
|
headers={"Authorization": "Bearer " + token},
|
|
|
|
params={"userName": username},
|
|
|
|
)
|
|
|
|
dprint(response.text)
|
|
|
|
return response
|
|
|
|
|
|
|
|
|
|
|
|
def promoteToManager(token: string, username: string, project_name: string):
|
|
|
|
dprint(
|
|
|
|
"Promoting user with username: ",
|
|
|
|
username,
|
|
|
|
" to project manager of project: ",
|
|
|
|
project_name,
|
|
|
|
)
|
|
|
|
response = requests.put(
|
|
|
|
promoteToPmPath + "/" + project_name,
|
|
|
|
headers={"Authorization": "Bearer " + token},
|
|
|
|
params={"userName": username},
|
|
|
|
)
|
|
|
|
dprint(response.text)
|
|
|
|
return response
|
2024-04-03 17:06:08 +02:00
|
|
|
|
|
|
|
|
|
|
|
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},
|
|
|
|
)
|