Использовать каталог AuditFields в тестах
ci / build-test (pull_request) Successful in 2m59s

This commit is contained in:
2026-09-13 20:32:24 +03:00
parent 71bbdd4dd5
commit 8dde35de49
9 changed files with 22 additions and 22 deletions
@@ -76,11 +76,11 @@ public sealed class AuditRecordDtoExtensionsTests
[Fact] [Fact]
public void DetailValue_ReturnsToThenFrom() public void DetailValue_ReturnsToThenFrom()
{ {
var setRecord = Record(AuditService.ToDetailJson([AuditDetails.Set("login", "admin")])); var setRecord = Record(AuditService.ToDetailJson([AuditDetails.Set(AuditFields.Login, "admin")]));
var changeRecord = Record(AuditService.ToDetailJson([AuditDetails.Change("login", "old", "new")])); var changeRecord = Record(AuditService.ToDetailJson([AuditDetails.Change(AuditFields.Login, "old", "new")]));
Assert.Equal("admin", setRecord.DetailValue("login")); Assert.Equal("admin", setRecord.DetailValue(AuditFields.Login));
Assert.Equal("new", changeRecord.DetailValue("login")); Assert.Equal("new", changeRecord.DetailValue(AuditFields.Login));
Assert.Null(setRecord.DetailValue("missing")); Assert.Null(setRecord.DetailValue("missing"));
} }
@@ -111,7 +111,7 @@ public sealed class AuditServiceTests
[Fact] [Fact]
public void ToDetailJson_SerializesChangeFields() public void ToDetailJson_SerializesChangeFields()
{ {
string json = AuditService.ToDetailJson([AuditDetails.Set("login", "Admin")]); string json = AuditService.ToDetailJson([AuditDetails.Set(AuditFields.Login, "Admin")]);
Assert.Contains("\"field\":\"login\"", json); Assert.Contains("\"field\":\"login\"", json);
Assert.Contains("\"to\":\"Admin\"", json); Assert.Contains("\"to\":\"Admin\"", json);
@@ -96,7 +96,7 @@ public sealed class SuspiciousActivityServiceTests
ActorId: actor, ActorId: actor,
TenantId: Tenant, TenantId: Tenant,
Ip: $"10.1.0.{i + 1}", Ip: $"10.1.0.{i + 1}",
DetailJson: AuditService.ToDetailJson([AuditDetails.Set("login", "user")]), DetailJson: AuditService.ToDetailJson([AuditDetails.Set(AuditFields.Login, "user")]),
At: Now.AddMinutes(-i)), At: Now.AddMinutes(-i)),
CancellationToken.None); CancellationToken.None);
} }
@@ -124,7 +124,7 @@ public sealed class SuspiciousActivityServiceTests
ActorId: null, ActorId: null,
TenantId: Tenant, TenantId: Tenant,
Ip: $"10.2.0.{i + 1}", Ip: $"10.2.0.{i + 1}",
DetailJson: AuditService.ToDetailJson([AuditDetails.Set("login", $"user{i}")]), DetailJson: AuditService.ToDetailJson([AuditDetails.Set(AuditFields.Login, $"user{i}")]),
At: Now.AddMinutes(-i)), At: Now.AddMinutes(-i)),
CancellationToken.None); CancellationToken.None);
} }
@@ -252,7 +252,7 @@ public sealed class SuspiciousActivityServiceTests
ActorId: null, ActorId: null,
TenantId: null, TenantId: null,
Ip: ip, Ip: ip,
DetailJson: AuditService.ToDetailJson([AuditDetails.Set("login", login)]), DetailJson: AuditService.ToDetailJson([AuditDetails.Set(AuditFields.Login, login)]),
At: Now.AddMinutes(-minutesAgo)), At: Now.AddMinutes(-minutesAgo)),
CancellationToken.None); CancellationToken.None);
} }
@@ -271,7 +271,7 @@ public sealed class SuspiciousActivityServiceTests
ActorId: null, ActorId: null,
TenantId: null, TenantId: null,
Ip: ip, Ip: ip,
DetailJson: AuditService.ToDetailJson([AuditDetails.Set("login", login)]), DetailJson: AuditService.ToDetailJson([AuditDetails.Set(AuditFields.Login, login)]),
At: Now.AddMinutes(-minutesAgo)), At: Now.AddMinutes(-minutesAgo)),
CancellationToken.None); CancellationToken.None);
} }
@@ -307,8 +307,8 @@ public sealed class JoinEndpointHttpTests
string code) string code)
{ {
Assert.NotNull(record.DetailJson); Assert.NotNull(record.DetailJson);
Assert.Equal(email, record.DetailValue("email")); Assert.Equal(email, record.DetailValue(AuditFields.Email));
Assert.Equal(SessionTokens.HashToken(code), record.DetailValue("codeHash")); Assert.Equal(SessionTokens.HashToken(code), record.DetailValue(AuditFields.CodeHash));
} }
@@ -93,7 +93,7 @@ public sealed class OperatorAnalyticsEndpointsHttpTests
ActorId: null, ActorId: null,
TenantId: ActiveTenant, TenantId: ActiveTenant,
Ip: "10.9.0.1", Ip: "10.9.0.1",
DetailJson: AuditService.ToDetailJson([AuditDetails.Set("login", "brute")]), DetailJson: AuditService.ToDetailJson([AuditDetails.Set(AuditFields.Login, "brute")]),
At: DateTimeOffset.UtcNow.AddMinutes(-i)), At: DateTimeOffset.UtcNow.AddMinutes(-i)),
CancellationToken.None); CancellationToken.None);
} }
@@ -290,7 +290,7 @@ public sealed class OperatorAuditEndpointsHttpTests
ActorId: Guid.NewGuid(), ActorId: Guid.NewGuid(),
TenantId: tenantId, TenantId: tenantId,
Ip: null, Ip: null,
DetailJson: AuditService.ToDetailJson([AuditDetails.Change("status", "active", "suspended")]), DetailJson: AuditService.ToDetailJson([AuditDetails.Change(AuditFields.Status, "active", "suspended")]),
At: DateTimeOffset.UtcNow), At: DateTimeOffset.UtcNow),
CancellationToken.None); CancellationToken.None);
@@ -247,8 +247,8 @@ public sealed class OperatorInvitesEndpointsHttpTests
string code) string code)
{ {
Assert.NotNull(record.DetailJson); Assert.NotNull(record.DetailJson);
Assert.Equal(email, record.DetailValue("email")); Assert.Equal(email, record.DetailValue(AuditFields.Email));
Assert.Equal(SessionTokens.HashToken(code), record.DetailValue("codeHash")); Assert.Equal(SessionTokens.HashToken(code), record.DetailValue(AuditFields.CodeHash));
} }
// Логинит оператора (ожидается 200). // Логинит оператора (ожидается 200).
@@ -89,8 +89,8 @@ public sealed class OperatorSettingsEndpointsHttpTests
Assert.Null(record.TenantId); Assert.Null(record.TenantId);
Assert.NotNull(record.DetailJson); Assert.NotNull(record.DetailJson);
Assert.DoesNotContain("abcdefghijklmnop", record.DetailJson); Assert.DoesNotContain("abcdefghijklmnop", record.DetailJson);
Assert.Equal("1234567", record.DetailValue("apiId")); Assert.Equal("1234567", record.DetailValue(AuditFields.ApiId));
Assert.Equal("true", record.DetailValue("apiHashSet")); Assert.Equal("true", record.DetailValue(AuditFields.ApiHashSet));
}, },
auditStore); auditStore);
} }
@@ -126,7 +126,7 @@ public sealed class OperatorTenantsEndpointsHttpTests
Assert.Equal(operatorStore.Operators.Single().Id, createdAudit.ActorId); Assert.Equal(operatorStore.Operators.Single().Id, createdAudit.ActorId);
Assert.Equal(createdId, createdAudit.TenantId); Assert.Equal(createdId, createdAudit.TenantId);
Assert.NotNull(createdAudit.DetailJson); Assert.NotNull(createdAudit.DetailJson);
Assert.Equal(NewTenantName, createdAudit.DetailValue("name")); Assert.Equal(NewTenantName, createdAudit.DetailValue(AuditFields.Name));
}, },
auditStore); auditStore);
} }
@@ -363,7 +363,7 @@ public sealed class OperatorTenantsEndpointsHttpTests
Assert.Equal(operatorStore.Operators.Single().Id, started.ActorId); Assert.Equal(operatorStore.Operators.Single().Id, started.ActorId);
Assert.Equal(TenantId, started.TenantId); Assert.Equal(TenantId, started.TenantId);
Assert.NotNull(started.DetailJson); Assert.NotNull(started.DetailJson);
Assert.Equal(TenantUserLogin, started.DetailValue("targetLogin")); Assert.Equal(TenantUserLogin, started.DetailValue(AuditFields.TargetLogin));
HttpClient userClient = CreateClient(baseAddress); HttpClient userClient = CreateClient(baseAddress);
using (HttpResponseMessage me = await GetWithTenantCookieAsync(userClient, baseAddress, sessionToken, "/api/auth/me")) using (HttpResponseMessage me = await GetWithTenantCookieAsync(userClient, baseAddress, sessionToken, "/api/auth/me"))
@@ -506,17 +506,17 @@ public sealed class OperatorTenantsEndpointsHttpTests
Assert.Equal(AuditActorTypes.Operator, record.ActorType); Assert.Equal(AuditActorTypes.Operator, record.ActorType);
Assert.Equal(operatorStore.Operators.Single().Id, record.ActorId); Assert.Equal(operatorStore.Operators.Single().Id, record.ActorId);
Assert.Equal(TenantId, record.TenantId); Assert.Equal(TenantId, record.TenantId);
Assert.Equal(status, record.DetailValue("status")); Assert.Equal(status, record.DetailValue(AuditFields.Status));
} }
// Статус из деталей записи tenant_status_changed. // Статус из деталей записи tenant_status_changed.
private static string? StatusOf(AuditRecordDto record) => record.DetailValue("status"); private static string? StatusOf(AuditRecordDto record) => record.DetailValue(AuditFields.Status);
// Проверяет детали записи аудита: параметр login. // Проверяет детали записи аудита: параметр login.
private static void AssertDetailLogin(AuditRecordDto record, string login) private static void AssertDetailLogin(AuditRecordDto record, string login)
{ {
Assert.NotNull(record.DetailJson); Assert.NotNull(record.DetailJson);
Assert.Equal(login, record.DetailValue("login")); Assert.Equal(login, record.DetailValue(AuditFields.Login));
} }
// GET с tenant-кукой deal_session=rawToken (impersonation-токен как значение куки). // GET с tenant-кукой deal_session=rawToken (impersonation-токен как значение куки).