setUpHasPlanner(); } public function test_user_can_mark_day_as_skipped(): void { $planner = $this->planner; $userOne = User::factory()->planner($planner)->create(); $userTwo = User::factory()->planner($planner)->create(); $users = collect([$userOne, $userTwo]); $schedule = Schedule::factory()->planner($planner)->create(); $dishes = Dish::factory()->planner($planner)->count(20)->create(); $dishes->each(fn (Dish $dish) => $dish->users()->attach($users)); ScheduledUserDish::factory() ->schedule($schedule) ->userDish($dishes->random()->userDishes->random()) ->create([]); ScheduledUserDish::factory() ->schedule($schedule) ->userDish($dishes->random()->userDishes->random()) ->create([]); $schedule->refresh(); $this->assertFalse($schedule->is_skipped); $this->assertCount(2, $schedule->scheduledUserDishes); $schedule->scheduledUserDishes->each(fn ($scheduledUserDish) => $this->assertNotNull($scheduledUserDish->user_dish_id)); $this ->actingAs($planner) ->put(route('api.schedule.update', $schedule->date->format('Y-m-d')), [ 'is_skipped' => true, ]) ->assertStatus(200) ->assertJson(fn (AssertableJson $json) => $json ->where('success', true) ->has('payload', fn ($json) => $json ->has('schedule', fn (AssertableJson $json) => $json ->where('id', $schedule->id) ->where('date', $schedule->date->format('Y-m-d')) ->where('is_skipped', true) ->etc() ) ) ->where('errors', null) ); $schedule->refresh(); $this->assertTrue($schedule->is_skipped); $schedule->scheduledUserDishes->each(fn ($scheduledUserDish) => $this->assertNull($scheduledUserDish->dish_id)); } }