This repository has been archived on 2025-10-08. You can view files and clone it, but cannot push or open issues or pull requests.
miniauthold/pkg/userstore/users_test.go
2025-03-13 18:17:01 +01:00

85 lines
2.2 KiB
Go

package userstore
import (
"fmt"
"os"
"testing"
"github.com/google/uuid"
"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 := getTestStore(t)
initDabase(t, store)
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 getTestStore(t *testing.T) Store {
name, err := os.MkdirTemp("", "miniauth-teststore")
assert.Nil(t, err, "[setup] should be abel to create tmp folder")
c := Config{}
c.SQLite.Path = fmt.Sprintf("file://%v/%v", name, uuid.NewString())
store, err := NewStore(c)
assert.Nil(t, err, "[setup] should be abel to create store")
return store
}