diff --git a/src/Livewire/AvailabilityControl.php b/src/Livewire/AvailabilityControl.php new file mode 100644 index 0000000..19e1c71 --- /dev/null +++ b/src/Livewire/AvailabilityControl.php @@ -0,0 +1,27 @@ +data->validate(); + + $this->dispatch('availability-search-updated', $this->data); + } + + public function render() + { + return <<<'HTML' +
+ HTML; + } +} diff --git a/src/Providers/ResrvLivewireProvider.php b/src/Providers/ResrvLivewireProvider.php index 9b0e958..48f3819 100644 --- a/src/Providers/ResrvLivewireProvider.php +++ b/src/Providers/ResrvLivewireProvider.php @@ -33,6 +33,7 @@ protected function bootLivewireComponents(): void { Livewire::component('availability-search', \Reach\StatamicResrv\Livewire\AvailabilitySearch::class); Livewire::component('availability-results', \Reach\StatamicResrv\Livewire\AvailabilityResults::class); + Livewire::component('availability-control', \Reach\StatamicResrv\Livewire\AvailabilityControl::class); Livewire::component('checkout', \Reach\StatamicResrv\Livewire\Checkout::class); Livewire::component('checkout-form', \Reach\StatamicResrv\Livewire\CheckoutForm::class); Livewire::component('checkout-payment', \Reach\StatamicResrv\Livewire\CheckoutPayment::class); diff --git a/tests/Livewire/AvailabilityControlTest.php b/tests/Livewire/AvailabilityControlTest.php new file mode 100644 index 0000000..7dac80f --- /dev/null +++ b/tests/Livewire/AvailabilityControlTest.php @@ -0,0 +1,81 @@ +date = now()->setTime(12, 0, 0); + $this->travelTo(today()->setHour(12)); + } + + public function test_renders_successfully() + { + Livewire::test(AvailabilityControl::class) + ->assertStatus(200); + } + + public function test_can_load_data_from_session() + { + Livewire::test(AvailabilitySearch::class) + ->set('data.dates', + [ + 'date_start' => $this->date, + 'date_end' => $this->date->copy()->add(1, 'day'), + ] + ) + ->set('data.quantity', 2) + ->set('data.advanced', 'test') + ->set('data.customer', ['adults' => 2]); + + Livewire::test(AvailabilityControl::class) + ->assertSet('data.dates.date_start', $this->date) + ->assertSet('data.dates.date_end', $this->date->copy()->add(1, 'day')) + ->assertSet('data.quantity', 2) + ->assertSet('data.advanced', 'test') + ->assertSet('data.customer', ['adults' => 2]); + } + + public function test_can_save_valid_data() + { + Livewire::test(AvailabilityControl::class) + ->set('data.dates', [ + 'date_start' => $this->date, + 'date_end' => $this->date->copy()->add(1, 'day'), + ]) + ->set('data.quantity', 2) + ->set('data.advanced', 'test') + ->set('data.customer', ['adults' => 2]) + ->call('save') + ->assertDispatched('availability-search-updated', [ + 'dates' => [ + 'date_start' => $this->date->toISOString(), + 'date_end' => $this->date->copy()->add(1, 'day')->toISOString(), + ], + 'quantity' => 2, + 'advanced' => 'test', + 'customer' => ['adults' => 2], + ]); + } + + public function test_validates_dates_before_save() + { + Livewire::test(AvailabilityControl::class) + ->set('data.dates', [ + 'date_start' => $this->date->copy()->add(1, 'day'), + 'date_end' => $this->date, + ]) + ->call('save') + ->assertHasErrors(['data.dates.date_start', 'data.dates.date_end']) + ->assertNotDispatched('availability-search-updated'); + } +}