package mysqldriver import ( "context" "git.aiterp.net/stufflog/server/internal/xlerrors" "git.aiterp.net/stufflog/server/models" "github.com/stretchr/testify/assert" "testing" "time" ) var user1 = models.User{ ID: "Test", Name: "Testy Tester", Active: true, Admin: false, Hash: []byte("$2y$12$tj/R/zDHrGy1Jsi57DUuSeCISYvEHb/F37p.9HGlyf72cIXnppeQK"), } var user2 = models.User{ ID: "Admin", Name: "Administrator", Active: true, Admin: true, Hash: []byte("$2y$12$tj/R/zDHrGy1Jsi57DUuSeCISYvEHb/F37p.9HGlyf72cIXnppeQK"), } var user2Updated = models.User{ ID: user2.ID, Name: "Dethroned Dictator", Active: false, Admin: false, Hash: []byte("$2y$12$7MuqYzV59HCtHJlRJCd/vOQIrFcMEMVhyySzJX.WlVtEJH3qHVPU2\n"), } func TestUserRepository(t *testing.T) { users := testDB.users ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) defer cancel() assert.NoError(t, clearTable("user")) // INSERT result, err := users.Insert(ctx, user1) assert.NoError(t, err) assert.Equal(t, user1, *result) result, err = users.Insert(ctx, user2) assert.NoError(t, err) assert.Equal(t, user2, *result) // FIND result, err = users.Find(ctx, user1.ID) assert.NoError(t, err) assert.Equal(t, &user1, result) result, err = users.Find(ctx, user2.ID) assert.NoError(t, err) assert.Equal(t, &user2, result) // FIND't result, err = users.Find(ctx, "NonExistent") assert.Error(t, err) assert.True(t, xlerrors.IsNotFound(err)) assert.Nil(t, result) // LIST results, err := users.List(ctx, models.UserFilter{}) assert.NoError(t, err) assert.Equal(t, []*models.User{&user2, &user1}, results) results, err = users.List(ctx, models.UserFilter{ Admin: ptrBool(true), }) assert.NoError(t, err) assert.Equal(t, []*models.User{&user2}, results) results, err = users.List(ctx, models.UserFilter{ Active: ptrBool(true), }) assert.NoError(t, err) assert.Equal(t, []*models.User{&user2, &user1}, results) results, err = users.List(ctx, models.UserFilter{ Active: ptrBool(false), }) assert.NoError(t, err) assert.Equal(t, []*models.User{}, results) results, err = users.List(ctx, models.UserFilter{ UserIDs: []string{user1.ID}, }) assert.NoError(t, err) assert.Equal(t, []*models.User{&user1}, results) results, err = users.List(ctx, models.UserFilter{ Limit: ptrInt(1), }) assert.NoError(t, err) assert.Equal(t, []*models.User{&user2}, results) // UPDATE err = users.Save(ctx, user2Updated) assert.NoError(t, err) // LIST after UPDATE results, err = users.List(ctx, models.UserFilter{}) assert.NoError(t, err) assert.Equal(t, []*models.User{&user2Updated, &user1}, results) // DELETE err = users.Delete(ctx, user1) assert.NoError(t, err) // LIST after DELETE results, err = users.List(ctx, models.UserFilter{}) assert.NoError(t, err) assert.Equal(t, []*models.User{&user2Updated}, results) // INSERT after DELETE result, err = users.Insert(ctx, user1) assert.NoError(t, err) assert.Equal(t, user1, *result) }