create(); $date = Carbon::tomorrow()->startOfDay(); $user = User::factory()->planner($planner)->create(); $dish = Dish::factory()->planner($planner)->create(); $userDish = UserDish::factory()->user($user)->dish($dish)->create(); $schedule = Schedule::factory()->planner($planner)->date($date)->create(); $this ->actingAs($planner) ->post( uri: route('api.schedule.user-dish.update', $schedule->date->format('Y-m-d')), data: [ 'user_dish_id' => $userDish->id, 'user_id' => $user->id, ] ) ->assertStatus(200) ->assertJson(fn (AssertableJson $json) => $json ->where('success', true) ->has('payload', fn (AssertableJson $json) => $json ->where('schedule.id', $schedule->id) ->where('schedule.scheduled_user_dishes.0.user_dish.id', $userDish->id) ->where('schedule.scheduled_user_dishes.0.user_dish.dish.id', $dish->id) ->etc() ) ->where('errors', null) ); } public function test_skipping_for_single_user(): void { $planner = Planner::factory()->create(); $this->assertDatabaseEmpty(ScheduledUserDish::class); $date = Carbon::tomorrow()->startOfDay(); $user = User::factory()->planner($planner)->create(); $dish = Dish::factory()->planner($planner)->create(); $userDish = UserDish::factory()->user($user)->dish($dish)->create(); $schedule = Schedule::factory()->planner($planner)->date($date)->create(); ScheduledUserDish::factory() ->schedule($schedule) ->userDish($userDish) ->user($user) ->create(); $this->assertDatabaseCount(ScheduledUserDish::class, 1); $this ->actingAs($planner) ->post( uri: route('api.schedule.user-dish.update', $schedule->date->format('Y-m-d')), data: [ 'user_dish_id' => null, 'user_id' => $user->id, 'skipped' => true, ] ) ->assertStatus(200) ->assertJson(fn (AssertableJson $json) => $json ->where('success', true) ->has('payload', fn (AssertableJson $json) => $json ->where('schedule.id', $schedule->id) ->has('schedule.scheduled_user_dishes', 1) ->has('schedule.scheduled_user_dishes.0', fn (AssertableJson $json) => $json ->whereNull('user_dish') ->where('user.id', $user->id) ->where('skipped', true) ->etc() ) ->etc() ) ->where('errors', null) ); $this->assertDatabaseCount(ScheduledUserDish::class, 1); } }