package models import ( "github.com/stretchr/testify/assert" "testing" ) func TestCreateUser(t *testing.T) { // Create test database assert.NoError(t, PrepareTestDatabase()) // Our dummy user for testing dummyuser := User{ Name: "noooem, dief", Username: "testuu", Password: "1234", Email: "noone@example.com", IsAdmin: true, } // Delete every preexisting user to have a fresh start allusers, err := ListUsers("") assert.NoError(t, err) for _, user := range allusers { // Delete it err := DeleteUserByID(user.ID) assert.NoError(t, err) } // Create a new user createdUser, err := CreateUser(dummyuser) assert.NoError(t, err) // Check if it fails to create the same user again _, err = CreateUser(dummyuser) assert.Error(t, err) // Check if it fails to create a user with just the same username _, err = CreateUser(User{Username: dummyuser.Username, Password: "fsdf"}) assert.Error(t, err) assert.True(t, IsErrUsernameExists(err)) // Check if it fails to create one with the same email _, err = CreateUser(User{Username: "noone", Password: "1234", Email: dummyuser.Email}) assert.Error(t, err) assert.True(t, IsErrUserEmailExists(err)) // Check if it fails to create a user without password and username _, err = CreateUser(User{}) assert.Error(t, err) assert.True(t, IsErrNoUsernamePassword(err)) _, err = CreateUser(User{Name: "blub"}) assert.Error(t, err) assert.True(t, IsErrNoUsernamePassword(err)) // Check if he exists theuser, exists, err := GetUser(createdUser) assert.NoError(t, err) assert.True(t, exists) // Get by his ID _, exists, err = GetUserByID(theuser.ID) assert.NoError(t, err) assert.True(t, exists) // Passing 0 as ID should return an empty user _, exists, err = GetUserByID(0) assert.NoError(t, err) assert.False(t, exists) // Check the user credentials user, err := CheckUserCredentials(&UserLogin{"testuu", "1234"}) assert.NoError(t, err) assert.Equal(t, dummyuser.Name, user.Name) // Check wrong password (should also fail) _, err = CheckUserCredentials(&UserLogin{"testuu", "12345"}) assert.Error(t, err) // Check usercredentials for a nonexistent user (should fail) _, err = CheckUserCredentials(&UserLogin{"dfstestuu", "1234"}) assert.Error(t, err) assert.True(t, IsErrUserDoesNotExist(err)) // Update the user newname := "Test_te" uuser, err := UpdateUser(User{ID: theuser.ID, Name: newname, Password: "444444"}) assert.NoError(t, err) assert.Equal(t, newname, uuser.Name) assert.Equal(t, theuser.Password, uuser.Password) // Password should not change assert.Equal(t, theuser.Username, uuser.Username) // Username should not change either // Try updating one which does not exist _, err = UpdateUser(User{ID: 99999, Username: "dg"}) assert.Error(t, err) assert.True(t, IsErrUserDoesNotExist(err)) // Update a users password newpassword := "55555" err = UpdateUserPassword(theuser.ID, newpassword) assert.NoError(t, err) // Check if it was changed user, err = CheckUserCredentials(&UserLogin{theuser.Username, newpassword}) assert.NoError(t, err) assert.Equal(t, newname, user.Name) // Check if the searchterm works all, err := ListUsers("test") assert.NoError(t, err) assert.True(t, len(all) > 0) all, err = ListUsers("") assert.NoError(t, err) assert.True(t, len(all) > 0) // Try updating the password of a nonexistent user (should fail) err = UpdateUserPassword(9999, newpassword) assert.Error(t, err) assert.True(t, IsErrUserDoesNotExist(err)) // Delete it err = DeleteUserByID(theuser.ID) assert.NoError(t, err) // Try deleting one with ID = 0 err = DeleteUserByID(0) assert.Error(t, err) assert.True(t, IsErrIDCannotBeZero(err)) // Log some user action err = logAction("test something", User{ID: 1}, 1) assert.NoError(t, err) }