Revert: Директор Tansu — снова удаляем дубликат из CompanyDirectors

Возврат к удалению совпавшей строки CompanyDirectors вместо
последовательной постановки после блока (см. 40d741c) — решили не
показывать одного и того же человека дважды в списке согласования.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
gorbenko.pavel
2026-08-26 11:10:06 +05:00
parent 0289236d19
commit cc4ad423bc
2 changed files with 30 additions and 63 deletions
@@ -900,12 +900,12 @@ public sealed class TemplateRouteServiceTests : IClassFixture<PostgresDatabaseFi
resolved.Value.Steps[0].Warning.ShouldBeNull();
}
[Fact(DisplayName = "Резолв: если Директор Tansu совпадает с одним из Директоров компаний, он идёт не параллельно блоку, а сразу после него")]
public async Task ResolveAsync_DirectorTansuMatchesOneOfCompanyDirectors_SequencedAfterCompanyDirectorsBlock()
[Fact(DisplayName = "Резолв: если Директор Tansu совпадает с одним из Директоров компаний, эта строка убирается из CompanyDirectors")]
public async Task ResolveAsync_DirectorTansuMatchesOneOfCompanyDirectors_RemovesDuplicateFromCompanyDirectors()
{
// Arrange — директор ТОО TANSU Construction (из шага CompanyDirectors, OrderNo 5)
// и Директор Tansu (из шага DirectorTansu, сам сконфигурирован с OrderNo 10) —
// один и тот же человек с одним и тем же email.
// и Директор Tansu (из шага DirectorTansu, OrderNo 10) — один и тот же человек
// с одним и тем же email.
var portalClient = new Mock<ITnsuPortalClient>();
portalClient
.Setup(x => x.GetEmployeeByEmailAsync(It.IsAny<string>(), It.IsAny<CancellationToken>()))
@@ -949,21 +949,15 @@ public sealed class TemplateRouteServiceTests : IClassFixture<PostgresDatabaseFi
new ResolveTemplateRouteRequest(requestTypeId, "someone@tnsu.kz", null, RouteStepStatus.Approval),
CancellationToken.None);
// Assert — все три строки остаются (директор не пропадает и не схлопывается
// молча), но Директор Tansu не параллелен блоку CompanyDirectors (OrderNo 5),
// а идёт сразу после него — OrderNo 6, а не свой сконфигурированный 10.
// Assert — вместо трёх строк (2 CompanyDirectors + 1 DirectorTansu) остаётся
// две: KazPromService-директор и Директор Tansu, без предупреждения о конфликте.
resolved.IsSuccess.ShouldBeTrue();
resolved.Value.Steps.Count.ShouldBe(3);
var tansuStep = resolved.Value.Steps.Single(s => s.PositionCode == HeadType.DirectorTansu);
tansuStep.ExecutorEmail.ShouldBe("director.tansu@tnsu.kz");
tansuStep.OrderNo.ShouldBe(6);
resolved.Value.Steps.Count.ShouldBe(2);
var tansuStep = resolved.Value.Steps.Single(s => s.ExecutorEmail == "director.tansu@tnsu.kz");
tansuStep.PositionCode.ShouldBe(HeadType.DirectorTansu);
tansuStep.OrderNo.ShouldBe(10);
tansuStep.Warning.ShouldBeNull();
var companyDirectorSteps = resolved.Value.Steps.Where(s => s.PositionCode == HeadType.CompanyDirectors).ToList();
companyDirectorSteps.Count.ShouldBe(2);
companyDirectorSteps.ShouldAllBe(s => s.OrderNo == 5);
companyDirectorSteps.ShouldContain(s => s.ExecutorEmail == "director.tansu@tnsu.kz");
companyDirectorSteps.ShouldContain(s => s.ExecutorEmail == "mechanic.kps@tnsu.kz");
resolved.Value.Steps.ShouldContain(s => s.ExecutorEmail == "mechanic.kps@tnsu.kz" && s.PositionCode == HeadType.CompanyDirectors);
}
[Fact(DisplayName = "Резолв шага с типом руководителя Chief возвращает warning, если руководитель не найден")]