stufflog graphql server
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

117 lines
2.9 KiB

package mysqldriver
import (
"context"
"git.aiterp.net/stufflog/server/internal/slerrors"
"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, slerrors.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)
}