- Priority 1: Test NewSendEmailTask + NewSendPushTask (5 tests) - Priority 2: Test customHTTPErrorHandler — all 15+ branches (21 tests) - Priority 3: Extract Enqueuer interface + payload builders in worker pkg (5 tests) - Priority 4: Extract ClassifyFile/ComputeRelPath in migrate-encrypt (6 tests) - Priority 5: Define Handler interfaces, refactor to accept them, mock-based tests (14 tests) - Fix .gitignore: /worker instead of worker to stop ignoring internal/worker/ Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
206 lines
5.7 KiB
Go
206 lines
5.7 KiB
Go
package repositories
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/treytartt/honeydue-api/internal/models"
|
|
"github.com/treytartt/honeydue-api/internal/testutil"
|
|
)
|
|
|
|
func TestAdminRepository_Create(t *testing.T) {
|
|
db := testutil.SetupTestDB(t)
|
|
repo := NewAdminRepository(db)
|
|
|
|
admin := &models.AdminUser{
|
|
Email: "admin@test.com",
|
|
FirstName: "Test",
|
|
LastName: "Admin",
|
|
Role: models.AdminRoleAdmin,
|
|
IsActive: true,
|
|
}
|
|
require.NoError(t, admin.SetPassword("Password123"))
|
|
|
|
err := repo.Create(admin)
|
|
require.NoError(t, err)
|
|
assert.NotZero(t, admin.ID)
|
|
}
|
|
|
|
func TestAdminRepository_Create_Duplicate(t *testing.T) {
|
|
db := testutil.SetupTestDB(t)
|
|
repo := NewAdminRepository(db)
|
|
|
|
admin1 := &models.AdminUser{Email: "admin@test.com", Role: models.AdminRoleAdmin}
|
|
require.NoError(t, admin1.SetPassword("Password123"))
|
|
err := repo.Create(admin1)
|
|
require.NoError(t, err)
|
|
|
|
admin2 := &models.AdminUser{Email: "admin@test.com", Role: models.AdminRoleAdmin}
|
|
require.NoError(t, admin2.SetPassword("Password123"))
|
|
err = repo.Create(admin2)
|
|
assert.ErrorIs(t, err, ErrAdminExists)
|
|
}
|
|
|
|
func TestAdminRepository_FindByID(t *testing.T) {
|
|
db := testutil.SetupTestDB(t)
|
|
repo := NewAdminRepository(db)
|
|
|
|
admin := &models.AdminUser{Email: "admin@test.com", Role: models.AdminRoleAdmin}
|
|
require.NoError(t, admin.SetPassword("Password123"))
|
|
require.NoError(t, repo.Create(admin))
|
|
|
|
found, err := repo.FindByID(admin.ID)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "admin@test.com", found.Email)
|
|
}
|
|
|
|
func TestAdminRepository_FindByID_NotFound(t *testing.T) {
|
|
db := testutil.SetupTestDB(t)
|
|
repo := NewAdminRepository(db)
|
|
|
|
_, err := repo.FindByID(9999)
|
|
assert.ErrorIs(t, err, ErrAdminNotFound)
|
|
}
|
|
|
|
func TestAdminRepository_FindByEmail(t *testing.T) {
|
|
db := testutil.SetupTestDB(t)
|
|
repo := NewAdminRepository(db)
|
|
|
|
admin := &models.AdminUser{Email: "admin@test.com", Role: models.AdminRoleAdmin}
|
|
require.NoError(t, admin.SetPassword("Password123"))
|
|
require.NoError(t, repo.Create(admin))
|
|
|
|
found, err := repo.FindByEmail("admin@test.com")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, admin.ID, found.ID)
|
|
}
|
|
|
|
func TestAdminRepository_FindByEmail_CaseInsensitive(t *testing.T) {
|
|
db := testutil.SetupTestDB(t)
|
|
repo := NewAdminRepository(db)
|
|
|
|
admin := &models.AdminUser{Email: "Admin@Test.com", Role: models.AdminRoleAdmin}
|
|
require.NoError(t, admin.SetPassword("Password123"))
|
|
require.NoError(t, repo.Create(admin))
|
|
|
|
found, err := repo.FindByEmail("admin@test.com")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, admin.ID, found.ID)
|
|
}
|
|
|
|
func TestAdminRepository_FindByEmail_NotFound(t *testing.T) {
|
|
db := testutil.SetupTestDB(t)
|
|
repo := NewAdminRepository(db)
|
|
|
|
_, err := repo.FindByEmail("nonexistent@test.com")
|
|
assert.ErrorIs(t, err, ErrAdminNotFound)
|
|
}
|
|
|
|
func TestAdminRepository_Update(t *testing.T) {
|
|
db := testutil.SetupTestDB(t)
|
|
repo := NewAdminRepository(db)
|
|
|
|
admin := &models.AdminUser{Email: "admin@test.com", FirstName: "Old", Role: models.AdminRoleAdmin}
|
|
require.NoError(t, admin.SetPassword("Password123"))
|
|
require.NoError(t, repo.Create(admin))
|
|
|
|
admin.FirstName = "New"
|
|
err := repo.Update(admin)
|
|
require.NoError(t, err)
|
|
|
|
found, err := repo.FindByID(admin.ID)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "New", found.FirstName)
|
|
}
|
|
|
|
func TestAdminRepository_Delete(t *testing.T) {
|
|
db := testutil.SetupTestDB(t)
|
|
repo := NewAdminRepository(db)
|
|
|
|
admin := &models.AdminUser{Email: "admin@test.com", Role: models.AdminRoleAdmin}
|
|
require.NoError(t, admin.SetPassword("Password123"))
|
|
require.NoError(t, repo.Create(admin))
|
|
|
|
err := repo.Delete(admin.ID)
|
|
require.NoError(t, err)
|
|
|
|
_, err = repo.FindByID(admin.ID)
|
|
assert.ErrorIs(t, err, ErrAdminNotFound)
|
|
}
|
|
|
|
func TestAdminRepository_UpdateLastLogin(t *testing.T) {
|
|
db := testutil.SetupTestDB(t)
|
|
repo := NewAdminRepository(db)
|
|
|
|
admin := &models.AdminUser{Email: "admin@test.com", Role: models.AdminRoleAdmin}
|
|
require.NoError(t, admin.SetPassword("Password123"))
|
|
require.NoError(t, repo.Create(admin))
|
|
|
|
assert.Nil(t, admin.LastLogin)
|
|
|
|
err := repo.UpdateLastLogin(admin.ID)
|
|
require.NoError(t, err)
|
|
|
|
found, err := repo.FindByID(admin.ID)
|
|
require.NoError(t, err)
|
|
assert.NotNil(t, found.LastLogin)
|
|
}
|
|
|
|
func TestAdminRepository_List(t *testing.T) {
|
|
db := testutil.SetupTestDB(t)
|
|
repo := NewAdminRepository(db)
|
|
|
|
for i := 0; i < 5; i++ {
|
|
admin := &models.AdminUser{
|
|
Email: "admin" + string(rune('0'+i)) + "@test.com",
|
|
Role: models.AdminRoleAdmin,
|
|
}
|
|
require.NoError(t, admin.SetPassword("Password123"))
|
|
require.NoError(t, repo.Create(admin))
|
|
}
|
|
|
|
// Page 1
|
|
admins, total, err := repo.List(1, 3)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, int64(5), total)
|
|
assert.Len(t, admins, 3)
|
|
|
|
// Page 2
|
|
admins, total, err = repo.List(2, 3)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, int64(5), total)
|
|
assert.Len(t, admins, 2)
|
|
}
|
|
|
|
func TestAdminRepository_ExistsByEmail(t *testing.T) {
|
|
db := testutil.SetupTestDB(t)
|
|
repo := NewAdminRepository(db)
|
|
|
|
admin := &models.AdminUser{Email: "admin@test.com", Role: models.AdminRoleAdmin}
|
|
require.NoError(t, admin.SetPassword("Password123"))
|
|
require.NoError(t, repo.Create(admin))
|
|
|
|
exists, err := repo.ExistsByEmail("admin@test.com")
|
|
require.NoError(t, err)
|
|
assert.True(t, exists)
|
|
|
|
exists, err = repo.ExistsByEmail("nonexistent@test.com")
|
|
require.NoError(t, err)
|
|
assert.False(t, exists)
|
|
}
|
|
|
|
func TestAdminRepository_ExistsByEmail_CaseInsensitive(t *testing.T) {
|
|
db := testutil.SetupTestDB(t)
|
|
repo := NewAdminRepository(db)
|
|
|
|
admin := &models.AdminUser{Email: "Admin@Test.com", Role: models.AdminRoleAdmin}
|
|
require.NoError(t, admin.SetPassword("Password123"))
|
|
require.NoError(t, repo.Create(admin))
|
|
|
|
exists, err := repo.ExistsByEmail("admin@test.com")
|
|
require.NoError(t, err)
|
|
assert.True(t, exists)
|
|
}
|