diff --git a/models/user.go b/models/user.go index 31b0773..079d845 100644 --- a/models/user.go +++ b/models/user.go @@ -60,8 +60,7 @@ func GetUser(user User) (userOut User, exists bool, err error) { func CheckUserCredentials(u *UserLogin) (User, error) { // Check if the user exists - var user = User{Username: u.Username} - exists, err := x.Get(&user) + user, exists, err := GetUser(User{Username:u.Username}) if err != nil { return User{}, err } diff --git a/models/user_add_update.go b/models/user_add_update.go index 57e6197..5cc0ee5 100644 --- a/models/user_add_update.go +++ b/models/user_add_update.go @@ -49,10 +49,7 @@ func hashPassword(password string) (string, error) { // UpdateUser updates a user func UpdateUser(user User) (updatedUser User, err error) { - // Check if we have at least a username - if user.Username == "" { - return User{}, ErrNoUsername{user.ID} - } + // Check if it exists theUser, exists, err := GetUserByID(user.ID) @@ -61,6 +58,11 @@ func UpdateUser(user User) (updatedUser User, err error) { } if exists { + // Check if we have at least a username + if user.Username == "" { + //return User{}, ErrNoUsername{user.ID} + user.Username = theUser.Username // Dont change the username if we dont have one + } user.Password = theUser.Password // set the password to the one in the database to not accedently resetting it diff --git a/models/user_test.go b/models/user_test.go index bce52f9..826f876 100644 --- a/models/user_test.go +++ b/models/user_test.go @@ -11,7 +11,7 @@ func TestCreateUser(t *testing.T) { // Our dummy user for testing dummyuser := User{ - Name: "testu", + Name: "noooem, dief", Username: "testuu", Password: "1234", Email: "noone@example.com", @@ -33,19 +33,19 @@ func TestCreateUser(t *testing.T) { assert.NoError(t, err) // Check if it fails to create the same user again - createdUser, err = CreateUser(dummyuser) + _, err = CreateUser(dummyuser) assert.Error(t, err) // Check if it fails to create a user with just the same username - createdUser, err = CreateUser(User{Username: "testuu"}) + _, err = CreateUser(User{Username:dummyuser.Username}) assert.Error(t, err) // Check if it fails to create a user without password and username - createdUser, err = CreateUser(User{}) + _, err = CreateUser(User{}) assert.Error(t, err) assert.True(t, IsErrNoUsernamePassword(err)) - createdUser, err = CreateUser(User{Name: "blub"}) + _, err = CreateUser(User{Name: "blub"}) assert.Error(t, err) assert.True(t, IsErrNoUsernamePassword(err)) @@ -69,7 +69,63 @@ func TestCreateUser(t *testing.T) { assert.NoError(t, err) assert.Equal(t, dummyuser.Name, user.Name) - // List one user + // 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) + }