miniauth/pkg/userstore/users_test.go

134 lines
4.1 KiB
Go

package userstore
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestWriteUser(t *testing.T) {
tts := []struct {
name string
username string
password string
exptError error
exptErrorString string
exptUserId int64
}{
{
name: "successfull-insert-first-user",
username: "kekskurse",
password: "kekskurse",
exptError: nil,
exptUserId: 1,
},
{
name: "failed-username-alreadey-used",
username: "kekskurse",
password: "kekskurse",
exptError: ErrCantExecuteQuery,
exptErrorString: "cant execute query: constraint failed: UNIQUE constraint failed: users.username (2067)",
exptUserId: 0,
},
{
name: "successfull-insert-first-user",
username: "kekskurse2",
password: "kekskurse",
exptError: nil,
exptUserId: 2,
},
}
store, err := NewDummyStore()
assert.Nil(t, err, "[setup] should be abel to create dummystore")
for _, tt := range tts {
t.Run(tt.name, func(t *testing.T) {
id, err := store.UserWrite(tt.username, tt.password)
assert.Equal(t, tt.exptUserId, id, "should return right user id")
if tt.exptError == nil {
assert.Nil(t, err, "should store user without error")
} else {
assert.ErrorIs(t, err, tt.exptError, "should return error")
assert.Equal(t, tt.exptErrorString, err.Error(), "should return right error message")
}
})
}
var pw1 string
var pw2 string
err = store.db.QueryRow("SELECT password FROM users WHERE id = 1").Scan(&pw1)
assert.Nil(t, err, "should be abel to query pw1")
err = store.db.QueryRow("SELECT password FROM users WHERE id = 2").Scan(&pw2)
assert.Nil(t, err, "should be abel to query pw2")
assert.NotEmpty(t, pw1)
assert.NotEmpty(t, pw2)
assert.NotEqual(t, "kekskurse", pw1)
assert.NotEqual(t, "kekskurse", pw2)
assert.NotEqual(t, pw1, pw2, "passwords should not be equal")
}
func TestUserExists(t *testing.T) {
store, err := NewDummyStore()
assert.Nil(t, err, "[setup] should get dummy store without error")
exists, err := store.UserExists("kekskurse")
assert.Nil(t, err)
assert.False(t, exists)
_, err = store.UserWrite("kekskurse", "kekskurse")
assert.Nil(t, err, "[setup] should be abel to create user")
exists, err = store.UserExists("kekskurse")
assert.Nil(t, err)
assert.True(t, exists)
}
func TestUserRemove(t *testing.T) {
store, err := NewDummyStore()
assert.Nil(t, err, "[setup] should get dummy store without error")
_, err = store.UserWrite("kekskurse", "kekskurse")
assert.Nil(t, err, "[setup] should be abel to create user")
_, err = store.UserWrite("kekskurse2", "kekskurse2")
assert.Nil(t, err, "[setup] should be abel to create user2")
var count int
err = store.db.QueryRow("SELECT COUNT(*) FROM users").Scan(&count)
assert.Nil(t, err, "should be abel to get user count without error")
assert.Equal(t, 2, count, "should found 2 users")
err = store.UserDelete("kekskurse2")
assert.Nil(t, err, "should be abel to delete user without error")
err = store.db.QueryRow("SELECT COUNT(*) FROM users").Scan(&count)
assert.Nil(t, err, "should be abel to get user count without error")
assert.Equal(t, 1, count, "should found 2 users")
}
func TestUserRemoveFaildMailExists(t *testing.T) {
store, err := NewDummyStore()
assert.Nil(t, err, "[setup] should get dummy store without error")
_, err = store.UserWrite("kekskurse", "kekskurse")
assert.Nil(t, err, "[setup] should be abel to create user")
id, err := store.UserWrite("kekskurse2", "kekskurse2")
assert.Nil(t, err, "[setup] should be abel to create user2")
err = store.MailAdd("foo@example.com", id, true)
var count int
err = store.db.QueryRow("SELECT COUNT(*) FROM users").Scan(&count)
assert.Nil(t, err, "should be abel to get user count without error")
assert.Equal(t, 2, count, "should found 2 users")
err = store.UserDelete("kekskurse2")
assert.Nil(t, err, "should be abel to delete user without error")
err = store.db.QueryRow("SELECT COUNT(*) FROM users").Scan(&count)
assert.Nil(t, err, "should be abel to get user count without error")
assert.Equal(t, 1, count, "should found 2 users")
}