From f862348a31517db1c85e6939582e93b7ad8f8319 Mon Sep 17 00:00:00 2001 From: yisroel Date: Wed, 6 May 2026 14:52:14 +0300 Subject: [PATCH] test EmailAddress value object 7 cases: rejects spaces, double-@, empty input; trims whitespace; lowercases domain only (preserving local-part case); equality by normalized value; __toString and getDomain. fails red - class App\\Shared\\ValueObject\\EmailAddress not yet defined. --- .../Shared/ValueObject/EmailAddressTest.php | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 backend/tests/Unit/Shared/ValueObject/EmailAddressTest.php diff --git a/backend/tests/Unit/Shared/ValueObject/EmailAddressTest.php b/backend/tests/Unit/Shared/ValueObject/EmailAddressTest.php new file mode 100644 index 0000000..2f4cad7 --- /dev/null +++ b/backend/tests/Unit/Shared/ValueObject/EmailAddressTest.php @@ -0,0 +1,61 @@ +expectException(InvalidArgumentException::class); + $this->expectExceptionMessage('Invalid email address: inv alid @spa cing.co m'); + + new EmailAddress('inv alid @spa cing.co m'); + } + + public function test_it_throws_on_invalid_email_format(): void + { + $this->expectException(InvalidArgumentException::class); + $this->expectExceptionMessage('Invalid email address: invalid-email@format@com'); + + new EmailAddress('invalid-email@format@com'); + } + + public function test_it_throws_on_empty_email(): void + { + $this->expectException(InvalidArgumentException::class); + $this->expectExceptionMessage('Invalid email address: '); + + new EmailAddress(''); + } + + public function test_it_trims_and_normalizes_domain_case(): void + { + $email = new EmailAddress(' tEsT@YaHoO.cOm '); + $this->assertSame('tEsT@yahoo.com', $email->value()); + } + + public function test_equality_is_by_normalized_value(): void + { + $first = new EmailAddress('test@TEST.COM'); + $second = new EmailAddress('test@test.com'); + + $this->assertTrue($first->equals($second)); + $this->assertTrue($second->equals($first)); + } + + public function test_to_string_returns_normalized_email(): void + { + $email = new EmailAddress('Test@GMAIL.COM '); + $this->assertSame('Test@gmail.com', $email->__toString()); + } + + public function test_get_domain_returns_lowercased_domain(): void + { + $email = new EmailAddress('User@SubDomain.Example.COM'); + $this->assertSame('subdomain.example.com', $email->getDomain()); + } +}