lens @ master

  1//go:build unit
  2
  3package service
  4
  5import (
  6	"context"
  7	"testing"
  8
  9	"git.sr.ht/~gabrielgio/img/pkg/database/repository"
 10	"git.sr.ht/~gabrielgio/img/pkg/testkit"
 11)
 12
 13type (
 14	scene struct {
 15		ctx            context.Context
 16		authRepository repository.AuthRepository
 17		userRepository repository.UserRepository
 18		controller     *AuthController
 19	}
 20)
 21
 22var (
 23	key = []byte("6368616e676520746869732070617373")
 24)
 25
 26func setUp() *scene {
 27	userRepository := NewUserRepository()
 28	return &scene{
 29		ctx:            context.Background(),
 30		authRepository: userRepository,
 31		userRepository: userRepository,
 32		controller:     NewAuthController(userRepository, userRepository, key),
 33	}
 34}
 35
 36func TestInitialRegisterAndLogin(t *testing.T) {
 37	testCases := []struct {
 38		name     string
 39		username string
 40		password []byte
 41	}{
 42		{
 43			name:     "Normal register",
 44			username: "username",
 45			password: []byte("this is an password"),
 46		},
 47	}
 48
 49	for _, tc := range testCases {
 50		t.Run(tc.name, func(t *testing.T) {
 51			scene := setUp()
 52
 53			err := scene.controller.InitialRegister(scene.ctx, []byte(tc.username), tc.password, []byte("/"))
 54			testkit.TestFatalError(t, "Register", err)
 55
 56			users, err := scene.userRepository.List(scene.ctx)
 57			userID := users[0].ID
 58
 59			user, err := scene.userRepository.Get(scene.ctx, userID)
 60			testkit.TestFatalError(t, "Get", err)
 61			testkit.TestValue(t, "Register", tc.username, user.Username)
 62
 63			auth, err := scene.controller.Login(scene.ctx, []byte(tc.username), tc.password)
 64			testkit.TestFatalError(t, "Login", err)
 65
 66			token, err := ReadToken(auth, key)
 67			testkit.TestFatalError(t, "Login", err)
 68
 69			testkit.TestValue(t, "Login", tc.username, token.Username)
 70			testkit.TestValue(t, "Login", userID, token.UserID)
 71		})
 72	}
 73}
 74
 75func remove[T any](slice []T, s int) []T {
 76	return append(slice[:s], slice[s+1:]...)
 77}
 78
 79func TestReadWriteToken(t *testing.T) {
 80	t.Parallel()
 81
 82	testCases := []struct {
 83		name  string
 84		key   []byte
 85		token *Token
 86	}{
 87		{
 88			name: "Normal write",
 89			key:  []byte("AES256Key-32Characters1234567890"),
 90			token: &Token{
 91				UserID:   3,
 92				Username: "username",
 93			},
 94		},
 95	}
 96
 97	for _, tc := range testCases {
 98		t.Run(tc.name, func(t *testing.T) {
 99			data, err := WriteToken(tc.token, tc.key)
100			testkit.TestFatalError(t, "WriteToken", err)
101
102			token, err := ReadToken(data, tc.key)
103			testkit.TestFatalError(t, "ReadToken", err)
104
105			testkit.TestValue(t, "ReadWriteToken", token, tc.token)
106		})
107	}
108}