forked from baron/baron-sso
88 lines
2.3 KiB
Go
88 lines
2.3 KiB
Go
package repository
|
|
|
|
import (
|
|
"baron-sso-backend/internal/domain"
|
|
"context"
|
|
"errors"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestUserProjectionRepository_ReplaceAllFromKratosMarksReadyAndRemovesStaleUsers(t *testing.T) {
|
|
ctx := context.Background()
|
|
repo := NewUserProjectionRepository(testDB)
|
|
|
|
require.NoError(t, testDB.Exec("DELETE FROM user_projection_states").Error)
|
|
require.NoError(t, testDB.Exec("DELETE FROM user_login_ids").Error)
|
|
require.NoError(t, testDB.Exec("DELETE FROM users").Error)
|
|
|
|
tenantID := "10000000-0000-0000-0000-000000000001"
|
|
tenantSlug := "projection-saman"
|
|
require.NoError(t, testDB.Create(&domain.Tenant{
|
|
ID: tenantID,
|
|
Name: "Projection Saman",
|
|
Slug: tenantSlug,
|
|
Type: domain.TenantTypeCompany,
|
|
Status: domain.TenantStatusActive,
|
|
}).Error)
|
|
stale := &domain.User{
|
|
ID: "00000000-0000-0000-0000-000000000099",
|
|
Email: "stale@example.com",
|
|
Name: "Stale",
|
|
CompanyCode: tenantSlug,
|
|
}
|
|
require.NoError(t, NewUserRepository(testDB).Create(ctx, stale))
|
|
|
|
users := []domain.User{
|
|
{
|
|
ID: "00000000-0000-0000-0000-000000000101",
|
|
Email: "one@example.com",
|
|
Name: "One",
|
|
CompanyCode: tenantSlug,
|
|
TenantID: &tenantID,
|
|
CreatedAt: time.Now(),
|
|
UpdatedAt: time.Now(),
|
|
},
|
|
{
|
|
ID: "00000000-0000-0000-0000-000000000102",
|
|
Email: "two@example.com",
|
|
Name: "Two",
|
|
TenantID: &tenantID,
|
|
CreatedAt: time.Now(),
|
|
UpdatedAt: time.Now(),
|
|
},
|
|
}
|
|
|
|
require.NoError(t, repo.ReplaceAllFromKratos(ctx, users))
|
|
|
|
ready, err := repo.IsReady(ctx)
|
|
require.NoError(t, err)
|
|
assert.True(t, ready)
|
|
|
|
counts, err := repo.CountTenantMembers(ctx, []domain.Tenant{
|
|
{ID: tenantID, Slug: tenantSlug},
|
|
})
|
|
require.NoError(t, err)
|
|
assert.Equal(t, int64(2), counts[tenantID])
|
|
|
|
var activeCount int64
|
|
require.NoError(t, testDB.Model(&domain.User{}).Count(&activeCount).Error)
|
|
assert.Equal(t, int64(2), activeCount)
|
|
}
|
|
|
|
func TestUserProjectionRepository_MarkFailedMakesProjectionNotReady(t *testing.T) {
|
|
ctx := context.Background()
|
|
repo := NewUserProjectionRepository(testDB)
|
|
|
|
require.NoError(t, testDB.Exec("DELETE FROM user_projection_states").Error)
|
|
|
|
require.NoError(t, repo.MarkFailed(ctx, errors.New("kratos down")))
|
|
|
|
ready, err := repo.IsReady(ctx)
|
|
require.NoError(t, err)
|
|
assert.False(t, ready)
|
|
}
|