withSession(['contact_form_started_at' => now()->subSeconds(10)->timestamp]); post('/sl/contact', [ 'name' => 'Gregor Test', 'email' => 'gregor@example.com', 'message' => "Hello from the website\nSecond line", 'website' => '', ])->assertRedirect('/sl/thankyou'); Mail::assertSent(ContactFormSubmission::class, function (ContactFormSubmission $mail) { return $mail->hasTo('office@aritmija.si') && $mail->hasReplyTo('gregor@example.com') && $mail->contactDetails['name'] === 'Gregor Test' && $mail->contactDetails['email'] === 'gregor@example.com' && $mail->contactDetails['message'] === "Hello from the website\nSecond line"; }); }); it('blocks submissions that arrive too quickly', function () { Mail::fake(); Carbon::setTestNow('2026-05-21 12:00:00'); $this->withSession(['contact_form_started_at' => now()->timestamp]); post('/sl/contact', [ 'name' => 'Gregor Test', 'email' => 'gregor@example.com', 'message' => 'Fast bot message', 'website' => '', ]) ->assertSessionHasErrors('form'); Mail::assertNothingSent(); }); it('blocks submissions that fill the honeypot field', function () { Mail::fake(); Carbon::setTestNow('2026-05-21 12:00:00'); $this->withSession(['contact_form_started_at' => now()->subSeconds(10)->timestamp]); post('/sl/contact', [ 'name' => 'Gregor Test', 'email' => 'gregor@example.com', 'message' => 'Bot payload', 'website' => 'https://spam.example', ]) ->assertSessionHasErrors('website'); Mail::assertNothingSent(); });