Расширение reminders #19

Merged
gorbenko.pavel merged 8 commits from remimders-extension into main 2026-08-27 11:43:45 +00:00
2 changed files with 22 additions and 4 deletions
Showing only changes of commit b9aac36a2b - Show all commits
@@ -32,8 +32,14 @@ public sealed class RemindersOptions
/// </summary> /// </summary>
public string RecruitingHirePageUrl { get; set; } = "recruiting-hire"; public string RecruitingHirePageUrl { get; set; } = "recruiting-hire";
/// <summary>За сколько дней до конца испытательного срока присылать напоминание.</summary> /// <summary>
public int ProbationReminderDaysBeforeEnd { get; set; } = 3; /// За сколько дней до конца испытательного срока присылать напоминание — неделя,
/// чтобы у руководителя было время подготовить решение по итогам срока.
///
/// Дни КАЛЕНДАРНЫЕ, не рабочие: напоминание строится ровно в тот день, когда до
/// конца срока остаётся столько дней, и попади он на выходной — уйдёт в выходной.
/// </summary>
public int ProbationReminderDaysBeforeEnd { get; set; } = 7;
/// <summary> /// <summary>
/// Куда ведёт ссылка в напоминании об окончании испытательного срока — на /// Куда ведёт ссылка в напоминании об окончании испытательного срока — на
@@ -36,6 +36,11 @@ public sealed class ReminderServiceTests : IClassFixture<PostgresDatabaseFixture
// с ожидаемой случайно. // с ожидаемой случайно.
private const string ProbationReminderUrl = "https://portal.test/новая-заявка"; private const string ProbationReminderUrl = "https://portal.test/новая-заявка";
// Порог фиксируем в тестах СВОИМ значением, не полагаясь на дефолт из
// RemindersOptions: изменение продового порога (3 → 7 дней и далее) не должно
// ломать тесты, которые проверяют вовсе не его.
private const int ProbationDaysBeforeEnd = 3;
private static readonly DateTimeOffset Now = new(2026, 8, 12, 12, 0, 0, TimeSpan.Zero); private static readonly DateTimeOffset Now = new(2026, 8, 12, 12, 0, 0, TimeSpan.Zero);
// GetOverdueAsync/GetProbationEndingAsync по-прежнему берут now параметром — их // GetOverdueAsync/GetProbationEndingAsync по-прежнему берут now параметром — их
@@ -335,7 +340,7 @@ public sealed class ReminderServiceTests : IClassFixture<PostgresDatabaseFixture
private ReminderService BuildProbationService( private ReminderService BuildProbationService(
string pageUrl, string listUrl, IReadOnlyList<object> rows, Mock<ITnsuPortalClient> portalClient, string pageUrl, string listUrl, IReadOnlyList<object> rows, Mock<ITnsuPortalClient> portalClient,
int daysBeforeEnd = 3) int daysBeforeEnd = ProbationDaysBeforeEnd)
{ {
const string hireDataListTitle = "Прием на работу тест — данные"; const string hireDataListTitle = "Прием на работу тест — данные";
@@ -595,7 +600,14 @@ public sealed class ReminderServiceTests : IClassFixture<PostgresDatabaseFixture
var service = new ReminderService( var service = new ReminderService(
db, sharePoint.Object, partitionRegistry, portalClient.Object, Clock, db, sharePoint.Object, partitionRegistry, portalClient.Object, Clock,
Options.Create(new RemindersOptions { RecruitingHirePageUrl = pageUrl, ProbationReminderUrl = ProbationReminderUrl }), // Порог задан явно (как и в BuildProbationService): тест про партиции, а
// не про то, сколько дней до конца срока настроено в проде.
Options.Create(new RemindersOptions
{
RecruitingHirePageUrl = pageUrl,
ProbationReminderUrl = ProbationReminderUrl,
ProbationReminderDaysBeforeEnd = ProbationDaysBeforeEnd
}),
NullLogger<ReminderService>.Instance); NullLogger<ReminderService>.Instance);
var result = await service.GetProbationEndingAsync(Now, CancellationToken.None); var result = await service.GetProbationEndingAsync(Now, CancellationToken.None);