get('/contact') ->assertSuccessful() ->assertSeeLivewire(ContactForm::class); }); it('contact form renders with privacy checkbox', function () { Livewire::test(ContactForm::class) ->assertSee('Datenschutzerklärung'); }); it('contact form validates required fields', function () { Livewire::test(ContactForm::class) ->call('submit') ->assertHasErrors(['firstName', 'lastName', 'email', 'subject', 'message', 'privacy']); }); it('contact form requires privacy acceptance', function () { Livewire::test(ContactForm::class) ->set('firstName', 'Max') ->set('lastName', 'Mustermann') ->set('email', 'max@example.com') ->set('subject', 'Allgemein') ->set('message', 'Testnachricht') ->set('privacy', false) ->call('submit') ->assertHasErrors(['privacy']); }); it('contact form sends email on valid submission', function () { Mail::fake(); $service = $this->mock(ContactFormService::class); $service->shouldReceive('handle')->once(); Livewire::test(ContactForm::class) ->set('firstName', 'Max') ->set('lastName', 'Mustermann') ->set('email', 'max@example.com') ->set('subject', 'Allgemein') ->set('message', 'Testnachricht für das Kontaktformular') ->set('privacy', true) ->call('submit') ->assertHasNoErrors() ->assertSet('success', true); }); it('contact form resets after successful submission', function () { Mail::fake(); $service = $this->mock(ContactFormService::class); $service->shouldReceive('handle')->once(); Livewire::test(ContactForm::class) ->set('firstName', 'Max') ->set('lastName', 'Mustermann') ->set('email', 'max@example.com') ->set('subject', 'Allgemein') ->set('message', 'Testnachricht') ->set('privacy', true) ->call('submit') ->assertSet('firstName', '') ->assertSet('lastName', '') ->assertSet('email', '') ->assertSet('message', '') ->assertSet('privacy', false); }); it('contact form blocks honeypot spam', function () { Livewire::test(ContactForm::class) ->set('firstName', 'Max') ->set('lastName', 'Mustermann') ->set('email', 'max@example.com') ->set('subject', 'Allgemein') ->set('message', 'Testnachricht') ->set('privacy', true) ->set('website', 'https://spam.com') ->call('submit') ->assertHasErrors(['website']); }); it('immobilien contact form renders with privacy checkbox', function () { Livewire::test(ImmobilienContactForm::class, [ 'projectSlug' => 'test-projekt', 'projectTitle' => 'Testprojekt Dubai', 'interestOptions' => ['kauf' => 'Kauf', 'miete' => 'Miete'], ]) ->assertSee('Datenschutzerklärung') ->assertSee('Exposé'); }); it('immobilien contact form validates required fields', function () { Livewire::test(ImmobilienContactForm::class) ->call('submit') ->assertHasErrors(['firstName', 'lastName', 'email', 'privacy']); }); it('immobilien contact form requires privacy acceptance', function () { Livewire::test(ImmobilienContactForm::class) ->set('firstName', 'Max') ->set('lastName', 'Mustermann') ->set('email', 'max@example.com') ->set('privacy', false) ->call('submit') ->assertHasErrors(['privacy']); }); it('immobilien contact form sends inquiry on valid submission', function () { Mail::fake(); $service = $this->mock(ContactFormService::class); $service->shouldReceive('handle')->once(); Livewire::test(ImmobilienContactForm::class, [ 'projectSlug' => 'azizi-creek-views-4', 'projectTitle' => 'Creek Views 4', 'interestOptions' => ['kauf' => 'Kauf'], ]) ->set('firstName', 'Max') ->set('lastName', 'Mustermann') ->set('email', 'max@example.com') ->set('phone', '+49 123 456789') ->set('interest', 'kauf') ->set('message', 'Ich interessiere mich für diese Immobilie.') ->set('privacy', true) ->call('submit') ->assertHasNoErrors() ->assertSet('success', true); }); it('immobilien show page renders livewire contact form component', function () { $this->get('/immobilien/azizi-creek-views-4') ->assertSuccessful() ->assertSeeLivewire(ImmobilienContactForm::class); });