summaryrefslogtreecommitdiff
path: root/player-server/internal/service/user_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'player-server/internal/service/user_test.go')
-rw-r--r--player-server/internal/service/user_test.go78
1 files changed, 78 insertions, 0 deletions
diff --git a/player-server/internal/service/user_test.go b/player-server/internal/service/user_test.go
new file mode 100644
index 0000000..1e0ceb3
--- /dev/null
+++ b/player-server/internal/service/user_test.go
@@ -0,0 +1,78 @@
+package service
+
+import (
+ "context"
+ "errors"
+ "testing"
+
+ "codeberg.org/snonux/player/internal/clock"
+ "codeberg.org/snonux/player/internal/model"
+ "codeberg.org/snonux/player/internal/repository"
+)
+
+type fakeUserHasher struct {
+ fixed string
+ err error
+}
+
+func (f *fakeUserHasher) Hash(password string) (string, error) {
+ if f.err != nil {
+ return "", f.err
+ }
+ return f.fixed, nil
+}
+func (f *fakeUserHasher) Compare(hash, password string) error {
+ return nil
+}
+
+func TestUserAdminService_CreateUser(t *testing.T) {
+ ctx := context.Background()
+
+ tests := []struct {
+ name string
+ hashErr error
+ createErr error
+ wantErr bool
+ }{
+ {
+ name: "ok",
+ },
+ {
+ name: "hash error",
+ hashErr: errors.New("boom"),
+ wantErr: true,
+ },
+ {
+ name: "create error",
+ createErr: errors.New("boom"),
+ wantErr: true,
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ store := &repository.MockStore{
+ UserRepo: repository.MockUserRepo{
+ CreateUserFunc: func(ctx context.Context, user *model.User) (int64, error) {
+ return 1, tt.createErr
+ },
+ },
+ }
+ hasher := &fakeUserHasher{fixed: "hashed", err: tt.hashErr}
+ svc := NewUserAdminService(store, clock.RealClock{}, hasher)
+ user, err := svc.CreateUser(ctx, "alice", "secret", false)
+ if tt.wantErr {
+ if err == nil {
+ t.Fatal("expected error")
+ }
+ return
+ }
+ if err != nil {
+ t.Fatalf("unexpected error: %v", err)
+ }
+ if user.Username != "alice" {
+ t.Fatalf("unexpected username %q", user.Username)
+ }
+ })
+ }
+}