TTime/backend/internal/database/db_test.go

288 lines
5.7 KiB
Go

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)
}
}
func TestGetAllUsersProject(t *testing.T) {
db, err := setupState()
if err != nil {
t.Error("setupState failed:", err)
}
err = db.AddUser("testuser1", "password")
if err != nil {
t.Error("AddUser failed:", err)
}
err = db.AddUser("testuser2", "password")
if err != nil {
t.Error("AddUser failed:", err)
}
err = db.AddProject("testproject", "description", "testuser1")
if err != nil {
t.Error("AddProject failed:", err)
}
err = db.AddUserToProject("testuser1", "testproject", "project_manager")
if err != nil {
t.Error("AddUserToProject failed:", err)
}
err = db.AddUserToProject("testuser2", "testproject", "user")
if err != nil {
t.Error("AddUserToProject failed:", err)
}
users, err := db.GetAllUsersProject("testproject")
if err != nil {
t.Error("GetAllUsersProject failed:", err)
}
// Check if both users are returned with their roles
if len(users) != 2 {
t.Errorf("Expected 2 users, got %d", len(users))
}
// Check if testuser1 has project manager role
foundProjectManager := false
for _, user := range users {
if user.Username == "testuser1" && user.UserRole == "project_manager" {
foundProjectManager = true
break
}
}
if !foundProjectManager {
t.Error("Project Manager user not found")
}
// Check if testuser2 has user role
foundUser := false
for _, user := range users {
if user.Username == "testuser2" && user.UserRole == "user" {
foundUser = true
break
}
}
if !foundUser {
t.Error("User user not found")
}
}
func TestGetAllUsersApplication(t *testing.T) {
db, err := setupState()
if err != nil {
t.Error("setupState failed:", err)
}
err = db.AddUser("testuser1", "password")
if err != nil {
t.Error("AddUser failed:", err)
}
err = db.AddUser("testuser2", "password")
if err != nil {
t.Error("AddUser failed:", err)
}
users, err := db.GetAllUsersApplication()
if err != nil {
t.Error("GetAllUsersApplication failed:", err)
}
// Check if both users are returned
if len(users) != 2 {
t.Errorf("Expected 2 users, got %d", len(users))
}
// Check if the test users are included in the list
foundTestUser1 := false
foundTestUser2 := false
for _, user := range users {
if user == "testuser1" {
foundTestUser1 = true
}
if user == "testuser2" {
foundTestUser2 = true
}
}
if !foundTestUser1 {
t.Error("testuser1 not found")
}
if !foundTestUser2 {
t.Error("testuser2 not found")
}
}