dd5954d8a5
ProjectResource теперь включает поле `applies_from` (ISO8601 строка | null) в JSON-ответе. Установлен ProjectService::update() для slepok-sensitive правок (Task 2.8 dynamic attribute). UI Vue/composables/Vitest часть откладывается на отдельную сессию — это backend-only commit для бэкенд-инструмента UI-сообщения. Spec §4.2.5. Plan: docs/superpowers/plans/2026-05-26-slepok-routing-protection.md §Task 2.11 Tests: tests/Feature/Http/Resources/ProjectResourceAppliesFromTest.php — 2/2 PASS.
34 lines
1.1 KiB
PHP
34 lines
1.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use App\Http\Resources\ProjectResource;
|
|
use App\Models\Project;
|
|
use App\Models\Tenant;
|
|
use Carbon\CarbonImmutable;
|
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
|
|
uses(DatabaseTransactions::class);
|
|
|
|
it('ProjectResource includes applies_from as ISO8601 when set', function (): void {
|
|
$tenant = Tenant::factory()->create();
|
|
$project = Project::factory()->for($tenant)->create();
|
|
$project->applies_from = CarbonImmutable::parse('2026-05-29 21:00:00', 'Europe/Moscow');
|
|
|
|
$resource = (new ProjectResource($project))->toArray(request());
|
|
|
|
expect($resource)->toHaveKey('applies_from');
|
|
expect($resource['applies_from'])->toBe('2026-05-29T21:00:00+03:00');
|
|
});
|
|
|
|
it('ProjectResource applies_from is null when not set', function (): void {
|
|
$tenant = Tenant::factory()->create();
|
|
$project = Project::factory()->for($tenant)->create();
|
|
// applies_from не установлен
|
|
|
|
$resource = (new ProjectResource($project))->toArray(request());
|
|
|
|
expect($resource)->toHaveKey('applies_from');
|
|
expect($resource['applies_from'])->toBeNull();
|
|
});
|