This commit is contained in:
@@ -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-токен как значение куки).
|
||||||
|
|||||||
Reference in New Issue
Block a user