package bundb_test import ( "context" "strings" "testing" "time" "gitea.dwysokinski.me/twhelp/sessions/internal/bundb" "gitea.dwysokinski.me/twhelp/sessions/internal/domain" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestUser_Create(t *testing.T) { t.Parallel() db := newDB(t) fixture := loadFixtures(t, db) repo := bundb.NewUser(db) t.Run("OK", func(t *testing.T) { t.Parallel() params, err := domain.NewCreateUserParams("nameName") require.NoError(t, err) user, err := repo.Create(context.Background(), params) assert.NoError(t, err) assert.Greater(t, user.ID, int64(0)) assert.Equal(t, params.Name(), user.Name) assert.WithinDuration(t, time.Now(), user.CreatedAt, time.Second) }) t.Run("ERR: username must be unique", func(t *testing.T) { t.Parallel() name := fixture.user(t, "user-1").Name names := []string{ name, strings.ToUpper(name), strings.ToLower(name), } for _, n := range names { n := n t.Run(n, func(t *testing.T) { t.Parallel() params, err := domain.NewCreateUserParams(n) require.NoError(t, err) user, err := repo.Create(context.Background(), params) assert.ErrorIs(t, err, domain.UsernameAlreadyTakenError{ Name: n, }) assert.Zero(t, user) }) } }) } func TestUser_Get(t *testing.T) { t.Parallel() db := newDB(t) fixture := loadFixtures(t, db) repo := bundb.NewUser(db) userFromFixture := fixture.user(t, "user-1") t.Run("OK", func(t *testing.T) { t.Parallel() user, err := repo.Get(context.Background(), userFromFixture.ID) assert.NoError(t, err) assert.Equal(t, userFromFixture, user) }) t.Run("ERR: user not found", func(t *testing.T) { t.Parallel() user, err := repo.Get(context.Background(), userFromFixture.ID+1111111) assert.ErrorIs(t, err, domain.UserNotFoundError{ ID: userFromFixture.ID + 1111111, }) assert.Zero(t, user) }) }