Skip to content

Commit

Permalink
Add tests for user struct
Browse files Browse the repository at this point in the history
Signed-off-by: Jo Vandeginste <[email protected]>
  • Loading branch information
jovandeginste committed Feb 20, 2024
1 parent eeef662 commit fdd8dce
Show file tree
Hide file tree
Showing 10 changed files with 3,802 additions and 4 deletions.
8 changes: 4 additions & 4 deletions pkg/database/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ type User struct {
}

func (u *User) BeforeSave(_ *gorm.DB) error {
if err := u.GenerateSalt(); err != nil {
return err
}

return u.IsValid()
}

Expand Down Expand Up @@ -138,10 +142,6 @@ func (u *User) SetPassword(password string) error {
}

func (u *User) Create(db *gorm.DB) error {
if err := u.GenerateSalt(); err != nil {
return err
}

return db.Create(u).Error
}

Expand Down
82 changes: 82 additions & 0 deletions pkg/database/user_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package database

import (
"testing"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func TestUserIsValid(t *testing.T) {
u := User{
Username: "my-username@localhost",
Password: "my-password",
Active: true,
}

require.NoError(t, u.IsValid())
assert.True(t, u.IsActive())
}

func TestUserPasswordIsValid(t *testing.T) {
pwd := "my-password"
u := User{
Username: "my-username@localhost",
Active: true,
}

require.Error(t, u.IsValid())
assert.Empty(t, u.Salt)
assert.Empty(t, u.Password)

require.NoError(t, u.SetPassword(pwd))

require.NoError(t, u.IsValid())
assert.NotEmpty(t, u.Salt)
assert.NotEmpty(t, u.Password)
require.NotEqual(t, u.Password, pwd)

assert.True(t, u.ValidLogin(pwd))
assert.False(t, u.ValidLogin(pwd+pwd))
}

func TestUserIsNotActive(t *testing.T) {
u := User{
Username: "my-username@localhost",
Password: "my-password",
Active: false,
}

require.NoError(t, u.IsValid())
assert.False(t, u.IsActive())
}

func TestUserUsernameIsNotEmail(t *testing.T) {
u := User{
Username: "my-username",
Password: "my-password",
}

require.ErrorIs(t, u.IsValid(), ErrUsernameInvalid)
assert.False(t, u.IsActive())
}

func TestUserUsernameIsTooLong(t *testing.T) {
u := User{
Username: "diezi6moo1oogo9kohth9Zu3aethahF4@localhost",
Password: "my-password",
}

require.ErrorIs(t, u.IsValid(), ErrUsernameInvalidLength)
assert.False(t, u.IsActive())
}

func TestUserPasswordNotSet(t *testing.T) {
u := User{
Username: "username@localhost",
Password: "",
}

require.ErrorIs(t, u.IsValid(), ErrPasswordInvalidLength)
assert.False(t, u.IsActive())
}
29 changes: 29 additions & 0 deletions vendor/github.com/stretchr/testify/require/doc.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 16 additions & 0 deletions vendor/github.com/stretchr/testify/require/forward_requirements.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit fdd8dce

Please sign in to comment.