52 lines
2.6 KiB
PHP
52 lines
2.6 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
use App\Services\Project\ProjectRuleMessages;
|
||
|
|
use Carbon\CarbonImmutable;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Эпик 6 Task 6.1 — единый источник текстов правил сбора для клиента.
|
||
|
|
*/
|
||
|
|
function ruleMessages(): ProjectRuleMessages
|
||
|
|
{
|
||
|
|
return app(ProjectRuleMessages::class);
|
||
|
|
}
|
||
|
|
|
||
|
|
it('формирует текст «вступит в силу» с датой из appliesFrom', function (): void {
|
||
|
|
$msg = ruleMessages()->changesApplyFrom(CarbonImmutable::parse('2026-06-27 21:00', 'Europe/Moscow'));
|
||
|
|
expect($msg)->toContain('27 июня');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('формат даты — род. падеж «D MMMM» по МСК', function (): void {
|
||
|
|
expect(ruleMessages()->formatDate(CarbonImmutable::parse('2026-01-01 12:00', 'Europe/Moscow')))->toBe('1 января');
|
||
|
|
expect(ruleMessages()->formatDate(CarbonImmutable::parse('2026-05-09 00:00', 'Europe/Moscow')))->toBe('9 мая');
|
||
|
|
expect(ruleMessages()->formatDate(CarbonImmutable::parse('2026-12-31 23:00', 'Europe/Moscow')))->toBe('31 декабря');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('текст смены источника объясняет хвост старого источника', function (): void {
|
||
|
|
$msg = ruleMessages()->sourceChanged(CarbonImmutable::parse('2026-06-27 21:00', 'Europe/Moscow'));
|
||
|
|
expect($msg)->toContain('по старому источнику')
|
||
|
|
->and($msg)->toContain('27 июня')
|
||
|
|
->and($msg)->toContain('дальше — по новому');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('текст паузы объясняет grace-хвост как норму', function (): void {
|
||
|
|
$msg = ruleMessages()->projectPaused(CarbonImmutable::parse('2026-06-27 21:00', 'Europe/Moscow'));
|
||
|
|
expect($msg)->toContain('18:00')
|
||
|
|
->and($msg)->toContain('это нормально');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('текст создания/возобновления — когда пойдут первые лиды', function (): void {
|
||
|
|
$d = CarbonImmutable::parse('2026-06-26 21:00', 'Europe/Moscow');
|
||
|
|
expect(ruleMessages()->projectCreated($d))->toContain('Первые лиды пойдут с 26 июня');
|
||
|
|
expect(ruleMessages()->projectResumed($d))->toContain('Лиды пойдут с 26 июня');
|
||
|
|
});
|
||
|
|
|
||
|
|
it('текст баланса склоняет слово «лид» по числу', function (): void {
|
||
|
|
expect(ruleMessages()->balanceRunningOut(21))->toContain('21 лид.');
|
||
|
|
expect(ruleMessages()->balanceRunningOut(3))->toContain('3 лида');
|
||
|
|
expect(ruleMessages()->balanceRunningOut(11))->toContain('11 лидов');
|
||
|
|
expect(ruleMessages()->balanceRunningOut(105))->toContain('105 лидов');
|
||
|
|
});
|