value); } #[Test] public function constructTrimsWhitespace(): void { $name = new SubjectName(' Mathématiques '); self::assertSame('Mathématiques', $name->value); } #[Test] public function constructWithMinimumLength(): void { $name = new SubjectName('FR'); self::assertSame('FR', $name->value); } #[Test] public function constructWithMaximumLength(): void { $longName = str_repeat('M', 100); $name = new SubjectName($longName); self::assertSame($longName, $name->value); } #[Test] #[DataProvider('invalidNamesProvider')] public function constructThrowsExceptionForInvalidName(string $invalidName): void { $this->expectException(SubjectNameInvalideException::class); new SubjectName($invalidName); } /** * @return iterable */ public static function invalidNamesProvider(): iterable { yield 'empty string' => ['']; yield 'single character' => ['M']; yield 'whitespace only' => [' ']; yield 'too long' => [str_repeat('M', 101)]; } #[Test] public function equalsReturnsTrueForSameValue(): void { $name1 = new SubjectName('Mathématiques'); $name2 = new SubjectName('Mathématiques'); self::assertTrue($name1->equals($name2)); } #[Test] public function equalsReturnsFalseForDifferentValue(): void { $name1 = new SubjectName('Mathématiques'); $name2 = new SubjectName('Français'); self::assertFalse($name1->equals($name2)); } #[Test] public function toStringReturnsValue(): void { $name = new SubjectName('Mathématiques'); self::assertSame('Mathématiques', (string) $name); } }