forked from xiongyuxing/tiku-backend.net
feat: add auth and tenant operations persistence
This commit is contained in:
@@ -4,6 +4,7 @@ using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Tiku.Domain.Content;
|
||||
using Tiku.Domain.Learning;
|
||||
using Tiku.Domain.QuestionBanks;
|
||||
using Tiku.Domain.Tenancy;
|
||||
using Tiku.Infrastructure.Persistence;
|
||||
|
||||
namespace Tiku.IntegrationTests;
|
||||
@@ -24,7 +25,7 @@ public sealed class PersistenceModelTests
|
||||
.Select(entity => entity.GetTableName())
|
||||
.ToHashSet(StringComparer.Ordinal);
|
||||
|
||||
Assert.Equal(55, tableNames.Count);
|
||||
Assert.Equal(65, tableNames.Count);
|
||||
Assert.Contains("tenants", tableNames);
|
||||
Assert.Contains("tenant_settings", tableNames);
|
||||
Assert.Contains("content_entries", tableNames);
|
||||
@@ -58,6 +59,16 @@ public sealed class PersistenceModelTests
|
||||
Assert.Contains("practice_session_report_sections", tableNames);
|
||||
Assert.Contains("dashboard_daily_stats", tableNames);
|
||||
Assert.Contains("revenue_daily_stats", tableNames);
|
||||
Assert.Contains("tenant_auth_providers", tableNames);
|
||||
Assert.Contains("sms_verification_codes", tableNames);
|
||||
Assert.Contains("auth_login_events", tableNames);
|
||||
Assert.Contains("auth_sessions", tableNames);
|
||||
Assert.Contains("sms_send_rate_limits", tableNames);
|
||||
Assert.Contains("tenant_role_templates", tableNames);
|
||||
Assert.Contains("tenant_classes", tableNames);
|
||||
Assert.Contains("tenant_class_members", tableNames);
|
||||
Assert.Contains("tenant_student_notes", tableNames);
|
||||
Assert.Contains("tenant_student_followups", tableNames);
|
||||
Assert.Contains("questions", tableNames);
|
||||
Assert.Contains("question_versions", tableNames);
|
||||
Assert.Contains("answer_records", tableNames);
|
||||
@@ -370,4 +381,57 @@ public sealed class PersistenceModelTests
|
||||
Assert.Equal(6, accuracy.GetPrecision());
|
||||
Assert.Equal(4, accuracy.GetScale());
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[InlineData(typeof(TenantAuthProvider), nameof(TenantAuthProvider.ConfigPublic), "'{}'::jsonb")]
|
||||
[InlineData(typeof(SmsVerificationCode), nameof(SmsVerificationCode.Metadata), "'{}'::jsonb")]
|
||||
[InlineData(typeof(AuthLoginEvent), nameof(AuthLoginEvent.Metadata), "'{}'::jsonb")]
|
||||
[InlineData(typeof(AuthSession), nameof(AuthSession.Metadata), "'{}'::jsonb")]
|
||||
[InlineData(typeof(TenantRoleTemplate), nameof(TenantRoleTemplate.Permissions), "'{}'::jsonb")]
|
||||
[InlineData(typeof(TenantRoleTemplate), nameof(TenantRoleTemplate.DataScope), "'{}'::jsonb")]
|
||||
[InlineData(typeof(TenantClass), nameof(TenantClass.Metadata), "'{}'::jsonb")]
|
||||
[InlineData(typeof(TenantClassMember), nameof(TenantClassMember.Metadata), "'{}'::jsonb")]
|
||||
[InlineData(typeof(TenantStudentNote), nameof(TenantStudentNote.Metadata), "'{}'::jsonb")]
|
||||
[InlineData(typeof(TenantStudentFollowup), nameof(TenantStudentFollowup.Metadata), "'{}'::jsonb")]
|
||||
public void Auth_and_tenant_operations_json_properties_are_mapped_to_jsonb(
|
||||
Type entityType,
|
||||
string propertyName,
|
||||
string expectedDefaultValueSql)
|
||||
{
|
||||
using var context = new TikuDbContext(Options);
|
||||
|
||||
var property = context.Model.FindEntityType(entityType)!
|
||||
.FindProperty(propertyName)!;
|
||||
|
||||
Assert.Equal("jsonb", property.GetColumnType());
|
||||
Assert.Equal(expectedDefaultValueSql, property.GetDefaultValueSql());
|
||||
Assert.Equal(typeof(System.Text.Json.JsonElement), property.ClrType);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Auth_and_class_tables_have_expected_unique_indexes()
|
||||
{
|
||||
using var context = new TikuDbContext(Options);
|
||||
|
||||
AssertHasUniqueIndex<TenantAuthProvider>(
|
||||
nameof(TenantAuthProvider.TenantId),
|
||||
nameof(TenantAuthProvider.Provider));
|
||||
AssertHasUniqueIndex<TenantClassMember>(
|
||||
nameof(TenantClassMember.TenantId),
|
||||
nameof(TenantClassMember.ClassId),
|
||||
nameof(TenantClassMember.UserId),
|
||||
nameof(TenantClassMember.MemberType));
|
||||
|
||||
void AssertHasUniqueIndex<TEntity>(params string[] propertyNames)
|
||||
{
|
||||
var indexes = context.Model.FindEntityType(typeof(TEntity))!.GetIndexes();
|
||||
|
||||
Assert.Contains(
|
||||
indexes,
|
||||
index => index.IsUnique
|
||||
&& index.Properties
|
||||
.Select(property => property.Name)
|
||||
.SequenceEqual(propertyNames));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user