From 1ba1ed5bc324f55aed0639bedd47659a6e910417 Mon Sep 17 00:00:00 2001 From: Ashwin Chandran Date: Thu, 11 Jun 2026 22:58:32 +0200 Subject: [PATCH 1/2] add missing completedAt property in UpdateScheduleRequestData, mirroring the create DTO --- src/Data/Requests/Schedule/UpdateScheduleRequestData.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Data/Requests/Schedule/UpdateScheduleRequestData.php b/src/Data/Requests/Schedule/UpdateScheduleRequestData.php index 0ac09876..fb646307 100644 --- a/src/Data/Requests/Schedule/UpdateScheduleRequestData.php +++ b/src/Data/Requests/Schedule/UpdateScheduleRequestData.php @@ -5,8 +5,11 @@ use Cachet\Data\BaseData; use Cachet\Enums\ComponentStatusEnum; use Cachet\Enums\ScheduleStatusEnum; +use Carbon\Carbon; use Illuminate\Validation\Rule; use Spatie\LaravelData\Attributes\DataCollectionOf; +use Spatie\LaravelData\Attributes\WithCast; +use Spatie\LaravelData\Casts\DateTimeInterfaceCast; use Spatie\LaravelData\Support\Validation\ValidationContext; final class UpdateScheduleRequestData extends BaseData @@ -15,7 +18,10 @@ public function __construct( public readonly ?string $name = null, public readonly ?string $message = null, public readonly ?ScheduleStatusEnum $status = null, - public readonly ?string $scheduledAt = null, + #[WithCast(DateTimeInterfaceCast::class, format: 'Y-m-d H:i:s')] + public readonly ?Carbon $scheduledAt = null, + #[WithCast(DateTimeInterfaceCast::class, format: 'Y-m-d H:i:s')] + public readonly ?Carbon $completedAt = null, #[DataCollectionOf(ScheduleComponentRequestData::class)] public readonly ?array $components = null, ) {} @@ -26,6 +32,7 @@ public static function rules(ValidationContext $context): array 'name' => ['string', 'max:255'], 'message' => ['string'], 'scheduled_at' => ['nullable', 'date'], + 'completed_at' => ['nullable', 'date'], 'components' => ['array'], 'components.*.id' => ['required_with:components', 'int', 'exists:components,id'], 'components.*.status' => ['required_with:components', Rule::enum(ComponentStatusEnum::class)], From ef1bf052a433e54cbd98b09f1d6d947818c4f992 Mon Sep 17 00:00:00 2001 From: Ashwin Chandran Date: Thu, 11 Jun 2026 22:59:17 +0200 Subject: [PATCH 2/2] add test for updating a schedule's 'completed_at' --- tests/Feature/Api/ScheduleTest.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/tests/Feature/Api/ScheduleTest.php b/tests/Feature/Api/ScheduleTest.php index 3e74efcb..1f5d38df 100644 --- a/tests/Feature/Api/ScheduleTest.php +++ b/tests/Feature/Api/ScheduleTest.php @@ -336,6 +336,20 @@ ]); }); +it('can update a schedule completed_at', function () { + Sanctum::actingAs(User::factory()->create(), ['schedules.manage']); + + $schedule = Schedule::factory()->create(['completed_at' => null]); + + $response = putJson('/status/api/schedules/'.$schedule->id, [ + 'completed_at' => '2026-06-11 10:00:00', + ]); + + $response->assertOk(); + + expect($schedule->fresh()->completed_at->toDateTimeString())->toBe('2026-06-11 10:00:00'); +}); + it('can update a schedule with components', function () { Sanctum::actingAs(User::factory()->create(), ['schedules.manage']);