Compare commits

..

4 commits

Author SHA1 Message Date
Imbus
dbb2ff84e5 WeeklyReport testing 2024-03-17 04:16:54 +01:00
Imbus
0d053add5e Add some sanity checking in SubmitWeeklyReport route 2024-03-17 04:16:26 +01:00
Imbus
23dd22eab5 Json field alias for WeeklyReport 2024-03-17 04:14:40 +01:00
Imbus
b69f8d82ff Better testing comments 2024-03-17 03:46:16 +01:00
3 changed files with 42 additions and 12 deletions

View file

@ -267,6 +267,14 @@ func (gs *GState) SubmitWeeklyReport(c *fiber.Ctx) error {
return c.Status(400).SendString(err.Error()) return c.Status(400).SendString(err.Error())
} }
// Make sure all the fields of the report are valid
if report.Week < 1 || report.Week > 52 {
return c.Status(400).SendString("Invalid week number")
}
if report.DevelopmentTime < 0 || report.MeetingTime < 0 || report.AdminTime < 0 || report.OwnWorkTime < 0 || report.StudyTime < 0 || report.TestingTime < 0 {
return c.Status(400).SendString("Invalid time report")
}
if err := gs.Db.AddWeeklyReport(report.ProjectName, username, report.Week, report.DevelopmentTime, report.MeetingTime, report.AdminTime, report.OwnWorkTime, report.StudyTime, report.TestingTime); err != nil { if err := gs.Db.AddWeeklyReport(report.ProjectName, username, report.Week, report.DevelopmentTime, report.MeetingTime, report.AdminTime, report.OwnWorkTime, report.StudyTime, report.TestingTime); err != nil {
return c.Status(500).SendString(err.Error()) return c.Status(500).SendString(err.Error())
} }

View file

@ -3,19 +3,19 @@ package types
// This is what should be submitted to the server, the username will be derived from the JWT token // This is what should be submitted to the server, the username will be derived from the JWT token
type NewWeeklyReport struct { type NewWeeklyReport struct {
// The name of the project, as it appears in the database // The name of the project, as it appears in the database
ProjectName string ProjectName string `json:"projectName"`
// The week number // The week number
Week int Week int `json:"week"`
// Total time spent on development // Total time spent on development
DevelopmentTime int DevelopmentTime int `json:"developmentTime"`
// Total time spent in meetings // Total time spent in meetings
MeetingTime int MeetingTime int `json:"meetingTime"`
// Total time spent on administrative tasks // Total time spent on administrative tasks
AdminTime int AdminTime int `json:"adminTime"`
// Total time spent on personal projects // Total time spent on personal projects
OwnWorkTime int OwnWorkTime int `json:"ownWorkTime"`
// Total time spent on studying // Total time spent on studying
StudyTime int StudyTime int `json:"studyTime"`
// Total time spent on testing // Total time spent on testing
TestingTime int TestingTime int `json:"testingTime"`
} }

View file

@ -11,7 +11,7 @@ def randomString(len=10):
# Defined once per test run # Defined once per test run
username = randomString() username = randomString()
token = None projectName = randomString()
# The base URL of the API # The base URL of the API
base_url = "http://localhost:8080" base_url = "http://localhost:8080"
@ -20,9 +20,10 @@ base_url = "http://localhost:8080"
registerPath = base_url + "/api/register" registerPath = base_url + "/api/register"
loginPath = base_url + "/api/login" loginPath = base_url + "/api/login"
addProjectPath = base_url + "/api/project" addProjectPath = base_url + "/api/project"
submitReportPath = base_url + "/api/submitReport"
# Define a function to prform POST request with data and return response # Posts the username and password to the register endpoint
def register(username: string, password: string): def register(username: string, password: string):
print("Registering with username: ", username, " and password: ", password) print("Registering with username: ", username, " and password: ", password)
response = requests.post( response = requests.post(
@ -32,6 +33,7 @@ def register(username: string, password: string):
return response return response
# Posts the username and password to the login endpoint
def login(username: string, password: string): def login(username: string, password: string):
print("Logging in with username: ", username, " and password: ", password) print("Logging in with username: ", username, " and password: ", password)
response = requests.post( response = requests.post(
@ -48,7 +50,6 @@ def test_login():
return response.json()["token"] return response.json()["token"]
# Define a function to test the POST request
def test_create_user(): def test_create_user():
response = register(username, "always_same") response = register(username, "always_same")
assert response.status_code == 200, "Registration failed" assert response.status_code == 200, "Registration failed"
@ -58,7 +59,6 @@ def test_create_user():
def test_add_project(): def test_add_project():
loginResponse = login(username, "always_same") loginResponse = login(username, "always_same")
token = loginResponse.json()["token"] token = loginResponse.json()["token"]
projectName = randomString()
response = requests.post( response = requests.post(
addProjectPath, addProjectPath,
json={"name": projectName, "description": "This is a project"}, json={"name": projectName, "description": "This is a project"},
@ -69,7 +69,29 @@ def test_add_project():
print("Add project successful") print("Add project successful")
def test_submit_report():
token = login(username, "always_same").json()["token"]
response = requests.post(
submitReportPath,
json={
"projectName": "report1",
"week": 1,
"developmentTime": 10,
"meetingTime": 5,
"adminTime": 5,
"ownWorkTime": 10,
"studyTime": 10,
"testingTime": 10,
},
headers={"Authorization": "Bearer " + token},
)
print(response.text)
assert response.status_code == 200, "Submit report failed"
print("Submit report successful")
if __name__ == "__main__": if __name__ == "__main__":
test_create_user() test_create_user()
test_login() test_login()
test_add_project() test_add_project()
test_submit_report()