Library/models/user_test.go

153 lines
4.3 KiB
Go
Raw Permalink Normal View History

2018-01-16 15:24:21 +00:00
package models
import (
"github.com/stretchr/testify/assert"
"testing"
)
func TestCreateUser(t *testing.T) {
// Create test database
assert.NoError(t, PrepareTestDatabase())
2018-04-13 13:03:36 +00:00
// Get our doer
doer, _, err := GetUserByID(1)
assert.NoError(t, err)
2018-01-16 15:24:21 +00:00
// Our dummy user for testing
dummyuser := User{
2018-01-26 11:29:16 +00:00
Name: "noooem, dief",
2018-01-16 15:24:21 +00:00
Username: "testuu",
Password: "1234",
Email: "noone@example.com",
2018-01-23 11:37:13 +00:00
IsAdmin: true,
2018-01-16 15:24:21 +00:00
}
2018-01-23 11:37:13 +00:00
// Delete every preexisting user to have a fresh start
2018-04-13 13:03:36 +00:00
_, err = x.Where("1 = 1").Delete(&User{})
2018-01-30 11:40:47 +00:00
assert.NoError(t, err)
2018-01-26 15:44:58 +00:00
allusers, err := ListUsers("")
assert.NoError(t, err)
for _, user := range allusers {
// Delete it
2018-04-13 13:03:36 +00:00
err := DeleteUserByID(user.ID, &doer)
2018-01-26 15:44:58 +00:00
assert.NoError(t, err)
}
2018-01-23 11:37:13 +00:00
2018-01-16 15:24:21 +00:00
// Create a new user
2018-04-13 13:03:36 +00:00
createdUser, err := CreateUser(dummyuser, &doer)
2018-01-16 15:24:21 +00:00
assert.NoError(t, err)
2018-01-30 11:40:47 +00:00
// Create a second new user
2018-04-13 13:03:36 +00:00
createdUser2, err := CreateUser(User{Username: dummyuser.Username + "2", Email: dummyuser.Email + "m", Password: dummyuser.Password}, &doer)
2018-01-30 11:40:47 +00:00
assert.NoError(t, err)
2018-01-16 15:24:21 +00:00
// Check if it fails to create the same user again
2018-04-13 13:03:36 +00:00
_, err = CreateUser(dummyuser, &doer)
2018-01-16 15:24:21 +00:00
assert.Error(t, err)
// Check if it fails to create a user with just the same username
2018-04-13 13:03:36 +00:00
_, err = CreateUser(User{Username: dummyuser.Username, Password: "fsdf"}, &doer)
2018-01-16 15:24:21 +00:00
assert.Error(t, err)
assert.True(t, IsErrUsernameExists(err))
// Check if it fails to create one with the same email
2018-04-13 13:03:36 +00:00
_, err = CreateUser(User{Username: "noone", Password: "1234", Email: dummyuser.Email}, &doer)
assert.Error(t, err)
assert.True(t, IsErrUserEmailExists(err))
2018-01-16 15:24:21 +00:00
// Check if it fails to create a user without password and username
2018-04-13 13:03:36 +00:00
_, err = CreateUser(User{}, &doer)
2018-01-16 15:24:21 +00:00
assert.Error(t, err)
2018-01-25 13:39:27 +00:00
assert.True(t, IsErrNoUsernamePassword(err))
2018-01-16 15:24:21 +00:00
2018-04-13 13:03:36 +00:00
_, err = CreateUser(User{Name: "blub"}, &doer)
2018-01-16 15:24:21 +00:00
assert.Error(t, err)
2018-01-25 13:39:27 +00:00
assert.True(t, IsErrNoUsernamePassword(err))
2018-01-16 15:24:21 +00:00
// Check if he exists
2018-01-25 15:28:02 +00:00
theuser, exists, err := GetUser(createdUser)
2018-01-16 15:24:21 +00:00
assert.NoError(t, err)
assert.True(t, exists)
2018-01-25 15:28:02 +00:00
// 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)
2018-01-16 15:24:21 +00:00
// Check the user credentials
user, err := CheckUserCredentials(&UserLogin{"testuu", "1234"})
assert.NoError(t, err)
assert.Equal(t, dummyuser.Name, user.Name)
2018-01-23 11:37:13 +00:00
2018-01-26 11:29:16 +00:00
// 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"
2018-04-13 13:03:36 +00:00
uuser, err := UpdateUser(User{ID: theuser.ID, Name: newname, Password: "444444"}, &doer)
2018-01-26 11:29:16 +00:00
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
2018-04-13 13:03:36 +00:00
_, err = UpdateUser(User{ID: 99999, Username: "dg"}, &doer)
2018-01-26 11:29:16 +00:00
assert.Error(t, err)
assert.True(t, IsErrUserDoesNotExist(err))
// Update a users password
newpassword := "55555"
2018-04-13 13:03:36 +00:00
err = UpdateUserPassword(theuser.ID, newpassword, &doer)
2018-01-26 11:29:16 +00:00
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)
2018-04-13 13:03:36 +00:00
err = UpdateUserPassword(9999, newpassword, &doer)
2018-01-26 11:29:16 +00:00
assert.Error(t, err)
assert.True(t, IsErrUserDoesNotExist(err))
2018-01-23 11:37:13 +00:00
// Delete it
2018-04-13 13:03:36 +00:00
err = DeleteUserByID(theuser.ID, &doer)
2018-01-26 11:29:16 +00:00
assert.NoError(t, err)
// Try deleting one with ID = 0
2018-04-13 13:03:36 +00:00
err = DeleteUserByID(0, &doer)
2018-01-26 11:29:16 +00:00
assert.Error(t, err)
assert.True(t, IsErrIDCannotBeZero(err))
2018-01-30 11:40:47 +00:00
// Try delete the last user (Should fail)
2018-04-13 13:03:36 +00:00
err = DeleteUserByID(createdUser2.ID, &doer)
2018-01-30 11:40:47 +00:00
assert.Error(t, err)
assert.True(t, IsErrCannotDeleteLastUser(err))
2018-01-26 11:29:16 +00:00
// Log some user action
2018-04-13 13:03:36 +00:00
err = logAction(ActionTypeUserUpdated, &doer, 1)
2018-01-26 11:29:16 +00:00
assert.NoError(t, err)
2018-01-16 15:24:21 +00:00
}