subject = new EmailValidator(); } /** * @test */ public function validEmailPassesValidation(): void { $result = $this->subject->validate('user@example.com'); self::assertFalse($result->hasErrors()); } /** * @test */ public function invalidEmailFailsValidation(): void { $result = $this->subject->validate('invalid-email'); self::assertTrue($result->hasErrors()); } /** * @test * @dataProvider invalidEmailProvider */ public function rejectsInvalidEmails(string $email): void { $result = $this->subject->validate($email); self::assertTrue($result->hasErrors(), "Email '$email' should be invalid"); } public static function invalidEmailProvider(): array { return [ 'missing @' => ['userexample.com'], 'missing domain' => ['user@'], 'empty string' => [''], 'spaces' => ['user @example.com'], ]; } }