package database import ( "testing" "time" ) // Tests are not guaranteed to be sequential func setupState() (Database, error) { db := DbConnect(":memory:") err := db.Migrate("../../migrations") if err != nil { return nil, err } return db, nil } func TestDbConnect(t *testing.T) { db := DbConnect(":memory:") _ = db } func TestDbAddUser(t *testing.T) { db, err := setupState() if err != nil { t.Error("setupState failed:", err) } err = db.AddUser("test", "password") if err != nil { t.Error("AddUser failed:", err) } } func TestDbGetUserId(t *testing.T) { db, err := setupState() if err != nil { t.Error("setupState failed:", err) } if db.AddUser("test", "password") != nil { t.Error("AddUser failed") } var id int id, err = db.GetUserId("test") if err != nil { t.Error("GetUserId failed:", err) } if id != 1 { t.Error("GetUserId failed: expected 1, got", id) } } func TestDbAddProject(t *testing.T) { db, err := setupState() if err != nil { t.Error("setupState failed:", err) } err = db.AddProject("test", "description", "test") if err != nil { t.Error("AddProject failed:", err) } } func TestDbRemoveUser(t *testing.T) { db, err := setupState() if err != nil { t.Error("setupState failed:", err) } err = db.RemoveUser("test") if err != nil { t.Error("RemoveUser failed:", err) } } func TestPromoteToAdmin(t *testing.T) { db, err := setupState() if err != nil { t.Error("setupState failed:", err) } err = db.AddUser("test", "password") if err != nil { t.Error("AddUser failed:", err) } err = db.PromoteToAdmin("test") if err != nil { t.Error("PromoteToAdmin failed:", err) } } func TestAddTimeReport(t *testing.T) { db, err := setupState() 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) } var now = time.Now() var then = now.Add(time.Hour) err = db.AddTimeReport("testproject", "testuser", now, then) if err != nil { t.Error("AddTimeReport failed:", err) } } func TestAddUserToProject(t *testing.T) { db, err := setupState() 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) } var now = time.Now() var then = now.Add(time.Hour) err = db.AddTimeReport("testproject", "testuser", now, then) if err != nil { t.Error("AddTimeReport failed:", err) } err = db.AddUserToProject("testuser", "testproject", "user") if err != nil { t.Error("AddUserToProject failed:", err) } } func TestChangeUserRole(t *testing.T) { db, err := setupState() 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.AddUserToProject("testuser", "testproject", "user") if err != nil { t.Error("AddUserToProject failed:", err) } err = db.ChangeUserRole("testuser", "testproject", "admin") if err != nil { t.Error("ChangeUserRole failed:", err) } }