diff --git a/tests/Unit/Service/SvgRendererTest.php b/tests/Unit/Service/SvgRendererTest.php index 346f0cb..1576650 100644 --- a/tests/Unit/Service/SvgRendererTest.php +++ b/tests/Unit/Service/SvgRendererTest.php @@ -6,65 +6,65 @@ namespace App\Tests\Unit\Service; use App\Service\SvgRenderer; use PHPUnit\Framework\Attributes\CoversClass; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; #[CoversClass(SvgRenderer::class)] final class SvgRendererTest extends TestCase { - private SvgRenderer $renderer; - - protected function setUp(): void + #[Test] + public function it_returns_an_svg_opening_tag(): void { - $this->renderer = new SvgRenderer(); + $svg = (new SvgRenderer())->render([]); + + $this->assertStringStartsWith('renderer->render([]); + $svg = (new SvgRenderer())->render([]); - $this->assertStringStartsWith('assertStringEndsWith('', $svg); } #[Test] - public function it_includes_accessibility_attributes(): void + public function it_includes_role_img_attribute_for_accessibility(): void { - $svg = $this->renderer->render([]); + $svg = (new SvgRenderer())->render([]); $this->assertStringContainsString('role="img"', $svg); + } + + #[Test] + public function it_includes_aria_label_attribute_for_accessibility(): void + { + $svg = (new SvgRenderer())->render([]); + $this->assertStringContainsString('aria-label="Contribution graph"', $svg); } #[Test] - public function it_applies_dark_theme_background_color(): void + #[DataProvider('theme_background_provider')] + public function it_applies_background_color_for_theme(string $theme, string $expectedColor): void { - $svg = $this->renderer->render([], 'dark'); + $svg = (new SvgRenderer())->render([], $theme); - $this->assertStringContainsString('#0d1117', $svg); + $this->assertStringContainsString($expectedColor, $svg); } - #[Test] - public function it_applies_light_theme_background_color(): void + public static function theme_background_provider(): iterable { - $svg = $this->renderer->render([], 'light'); - - $this->assertStringContainsString('#ffffff', $svg); - } - - #[Test] - public function it_falls_back_to_dark_theme_for_unknown_theme_names(): void - { - $svg = $this->renderer->render([], 'unknown'); - - $this->assertStringContainsString('#0d1117', $svg); + yield 'dark theme' => ['dark', '#0d1117']; + yield 'light theme' => ['light', '#ffffff']; + yield 'unknown theme' => ['unknown', '#0d1117']; } #[Test] public function it_shows_zero_contributions_when_no_data_is_provided(): void { - $svg = $this->renderer->render([]); + $svg = (new SvgRenderer())->render([]); $this->assertStringContainsString('0 contributions in the last year', $svg); } @@ -74,7 +74,7 @@ final class SvgRendererTest extends TestCase { $today = (new \DateTimeImmutable('today'))->format('Y-m-d'); - $svg = $this->renderer->render([$today => 1234]); + $svg = (new SvgRenderer())->render([$today => 1234]); $this->assertStringContainsString('1,234 contributions in the last year', $svg); } @@ -82,28 +82,41 @@ final class SvgRendererTest extends TestCase #[Test] public function it_renders_all_53_week_columns(): void { - $svg = $this->renderer->render([]); + $svg = (new SvgRenderer())->render([]); // MARGIN_X(28) + col_52 * STEP(13) = 704 $this->assertStringContainsString('x="704"', $svg); } #[Test] - public function it_renders_day_of_week_labels_matching_github(): void + #[DataProvider('day_of_week_label_provider')] + public function it_renders_day_of_week_label(string $label): void { - $svg = $this->renderer->render([]); + $svg = (new SvgRenderer())->render([]); - $this->assertStringContainsString('>Mon<', $svg); - $this->assertStringContainsString('>Wed<', $svg); - $this->assertStringContainsString('>Fri<', $svg); + $this->assertStringContainsString('>' . $label . '<', $svg); + } + + public static function day_of_week_label_provider(): iterable + { + yield 'Monday' => ['Mon']; + yield 'Wednesday' => ['Wed']; + yield 'Friday' => ['Fri']; } #[Test] - public function it_renders_a_legend_with_less_and_more_labels(): void + public function it_renders_a_less_label_in_the_legend(): void { - $svg = $this->renderer->render([]); + $svg = (new SvgRenderer())->render([]); $this->assertStringContainsString('>Less<', $svg); + } + + #[Test] + public function it_renders_a_more_label_in_the_legend(): void + { + $svg = (new SvgRenderer())->render([]); + $this->assertStringContainsString('>More<', $svg); } @@ -113,7 +126,7 @@ final class SvgRendererTest extends TestCase $today = (new \DateTimeImmutable('today'))->format('Y-m-d'); $yesterday = (new \DateTimeImmutable('yesterday'))->format('Y-m-d'); - $svg = $this->renderer->render([$today => 3, $yesterday => 7]); + $svg = (new SvgRenderer())->render([$today => 3, $yesterday => 7]); $this->assertStringContainsString('10 contributions in the last year', $svg); }