GetProjectTimes och tester till det

This commit is contained in:
Melker 2024-03-20 23:49:55 +01:00
parent 03f6edd320
commit e7acfb37b1
2 changed files with 105 additions and 39 deletions

View file

@ -39,7 +39,9 @@ type Database interface {
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)
GetTotalTimePerActivity(projectName string) (map[string]int, error) GetProjectTimes(projectName string) (map[string]int, error)
} }
// This struct is a wrapper type that holds the database connection // This struct is a wrapper type that holds the database connection
@ -491,36 +493,36 @@ func (d *Db) MigrateSampleData() error {
return nil return nil
} }
func (d *Db) GetTotalTimePerActivity(projectName string) (map[string]int, error) { // GetProjectTimes retrieves a map with times per "Activity" for a given project
func (d *Db) GetProjectTimes(projectName string) (map[string]int, error) {
query := ` query := `
SELECT development_time, meeting_time, admin_time, own_work_time, study_time, testing_time SELECT development_time, meeting_time, admin_time, own_work_time, study_time, testing_time
FROM weekly_reports FROM weekly_reports
JOIN projects ON weekly_reports.project_id = projects.id JOIN projects ON weekly_reports.project_id = projects.id
WHERE projects.name = ? WHERE projects.name = ?
` `
rows, err := d.DB.Query(query, projectName) rows, err := d.DB.Query(query, projectName)
if err != nil { if err != nil {
return nil, err return nil, err
} }
defer rows.Close() defer rows.Close()
totalTime := make(map[string]int) totalTime := make(map[string]int)
for rows.Next() { for rows.Next() {
var developmentTime, meetingTime, adminTime, ownWorkTime, studyTime, testingTime int var developmentTime, meetingTime, adminTime, ownWorkTime, studyTime, testingTime int
if err := rows.Scan(&developmentTime, &meetingTime, &adminTime, &ownWorkTime, &studyTime, &testingTime); err != nil { if err := rows.Scan(&developmentTime, &meetingTime, &adminTime, &ownWorkTime, &studyTime, &testingTime); err != nil {
return nil, err return nil, err
} }
totalTime["development"] += developmentTime totalTime["development"] += developmentTime
totalTime["meeting"] += meetingTime totalTime["meeting"] += meetingTime
totalTime["admin"] += adminTime totalTime["admin"] += adminTime
totalTime["own_work"] += ownWorkTime totalTime["own_work"] += ownWorkTime
totalTime["study"] += studyTime totalTime["study"] += studyTime
totalTime["testing"] += testingTime totalTime["testing"] += testingTime
} }
if err := rows.Err(); err != nil { if err := rows.Err(); err != nil {
return nil, err return nil, err

View file

@ -729,27 +729,91 @@ func TestIsProjectManager(t *testing.T) {
} }
} }
func TestGetTotalTimePerActivity(t *testing.T) {
// Initialize your test database connection
db, err := setupState()
if err != nil {
t.Error("setupState failed:", err)
}
// Run the query to get total time per activity func TestGetProjectTimes(t *testing.T) {
totalTime, err := db.GetTotalTimePerActivity("projecttest") // Initialize
if err != nil { db, err := setupState()
t.Error("GetTotalTimePerActivity failed:", err) if err != nil {
} t.Error("setupState failed:", err)
return
}
// Check if the totalTime map is not nil // Create a user
if totalTime == nil { user := "TeaUser"
t.Error("Expected non-nil totalTime map, got nil") password := "Vanilla"
} err = db.AddUser(user, password)
if err != nil {
t.Error("AddUser failed:", err)
return
}
// ska lägga till fler assertions // Create a project
projectName := "ProjectVanilla"
projectDescription := "When tea tastes its best"
err = db.AddProject(projectName, projectDescription, user) // Fix the variable name here
if err != nil {
t.Error("AddProject failed:", err)
return
}
// Tests the func in db.go
totalTime, err := db.GetProjectTimes(projectName)
if err != nil {
t.Error("GetTotalTimePerActivity failed:", err)
return
}
// Check if the totalTime map is not nil
if totalTime == nil {
t.Error("Expected non-nil totalTime map, got nil")
return
}
// Define the expected valeus
expectedTotalTime := map[string]int{
"development": 0,
"meeting": 0,
"admin": 0,
"own_work": 0,
"study": 0,
"testing": 0,
}
// Compare the expectedTotalTime with the totalTime retrieved from the database
for activity, expectedTime := range expectedTotalTime {
if totalTime[activity] != expectedTime {
t.Errorf("Expected %s time to be %d, got %d", activity, expectedTime, totalTime[activity])
}
}
// Insert some data into the database for different activities
err = db.AddWeeklyReport(projectName, user, 1, 1, 3, 2, 1, 4, 5)
if err != nil {
t.Error("Failed to insert data into the database:", err)
return
}
newTotalTime, err := db.GetProjectTimes(projectName)
if err != nil {
t.Error("GetTotalTimePerActivity failed:", err)
return
}
newExpectedTotalTime := map[string]int{
"development": 1,
"meeting": 3,
"admin": 2,
"own_work": 1,
"study": 4,
"testing": 5,
}
for activity, newExpectedTime := range newExpectedTotalTime {
if newTotalTime[activity] != newExpectedTime {
t.Errorf("Expected %s time to be %d, got %d", activity, newExpectedTime, newTotalTime[activity])
}
}
} }
func TestEnsureManagerOfCreatedProject(t *testing.T) { func TestEnsureManagerOfCreatedProject(t *testing.T) {
db, err := setupState() db, err := setupState()
if err != nil { if err != nil {