Inicial
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
package tenant_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/techxcar/backend/internal/tenant"
|
||||
"github.com/techxcar/backend/pkg/database"
|
||||
)
|
||||
|
||||
func setupDB(t *testing.T) *database.DB {
|
||||
t.Helper()
|
||||
url := os.Getenv("TEST_DATABASE_URL")
|
||||
if url == "" {
|
||||
t.Skip("TEST_DATABASE_URL not set, skipping integration test")
|
||||
}
|
||||
db, err := database.New(url)
|
||||
require.NoError(t, err)
|
||||
t.Cleanup(db.Close)
|
||||
return db
|
||||
}
|
||||
|
||||
func TestGetSuperAdminByEmail_notFound(t *testing.T) {
|
||||
db := setupDB(t)
|
||||
repo := tenant.NewRepository(db)
|
||||
admin, err := repo.GetSuperAdminByEmail(context.Background(), "nobody@example.com")
|
||||
require.NoError(t, err)
|
||||
assert.Nil(t, admin)
|
||||
}
|
||||
|
||||
func TestCreateAndGetSuperAdmin(t *testing.T) {
|
||||
db := setupDB(t)
|
||||
repo := tenant.NewRepository(db)
|
||||
ctx := context.Background()
|
||||
|
||||
email := "sa_" + time.Now().Format("20060102150405") + "@example.com"
|
||||
admin, err := repo.CreateSuperAdmin(ctx, email, "hash123")
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, admin)
|
||||
assert.NotEmpty(t, admin.ID)
|
||||
assert.Equal(t, email, admin.Email)
|
||||
|
||||
found, err := repo.GetSuperAdminByEmail(ctx, email)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, found)
|
||||
assert.Equal(t, admin.ID, found.ID)
|
||||
|
||||
t.Cleanup(func() {
|
||||
db.Pool.Exec(ctx, "DELETE FROM super_admins WHERE id = $1", admin.ID)
|
||||
})
|
||||
}
|
||||
|
||||
func TestCreateAndListTenants(t *testing.T) {
|
||||
db := setupDB(t)
|
||||
repo := tenant.NewRepository(db)
|
||||
ctx := context.Background()
|
||||
|
||||
slug := "test-" + time.Now().Format("20060102150405")
|
||||
ten, err := repo.CreateTenant(ctx, slug, "Test Workshop")
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, ten)
|
||||
assert.NotEmpty(t, ten.ID)
|
||||
assert.Equal(t, slug, ten.Slug)
|
||||
assert.Equal(t, "active", ten.Status)
|
||||
|
||||
list, err := repo.ListTenants(ctx)
|
||||
require.NoError(t, err)
|
||||
found := false
|
||||
for _, v := range list {
|
||||
if v.ID == ten.ID {
|
||||
found = true
|
||||
}
|
||||
}
|
||||
assert.True(t, found)
|
||||
|
||||
t.Cleanup(func() {
|
||||
db.Pool.Exec(ctx, "DELETE FROM tenants WHERE id = $1", ten.ID)
|
||||
})
|
||||
}
|
||||
|
||||
func TestCreateAndUseInvite(t *testing.T) {
|
||||
db := setupDB(t)
|
||||
repo := tenant.NewRepository(db)
|
||||
ctx := context.Background()
|
||||
|
||||
invite, err := repo.CreateInvite(ctx, nil, 24*time.Hour)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, invite)
|
||||
assert.NotEmpty(t, invite.Token)
|
||||
assert.Nil(t, invite.UsedAt)
|
||||
assert.True(t, invite.ExpiresAt.After(time.Now()))
|
||||
|
||||
found, err := repo.GetInviteByToken(ctx, invite.Token)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, found)
|
||||
assert.Equal(t, invite.ID, found.ID)
|
||||
|
||||
err = repo.UseInvite(ctx, invite.ID)
|
||||
require.NoError(t, err)
|
||||
|
||||
used, err := repo.GetInviteByToken(ctx, invite.Token)
|
||||
require.NoError(t, err)
|
||||
assert.NotNil(t, used.UsedAt)
|
||||
|
||||
t.Cleanup(func() {
|
||||
db.Pool.Exec(ctx, "DELETE FROM invites WHERE id = $1", invite.ID)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user