diff --git a/tests/Service/DumpFilenameParserTest.php b/tests/Service/DumpFilenameParserTest.php new file mode 100644 index 0000000..354b1e5 --- /dev/null +++ b/tests/Service/DumpFilenameParserTest.php @@ -0,0 +1,54 @@ +parser = new DumpFilenameParser(); + } + + public function testFormatProducesExpectedPattern(): void + { + $dateTime = new \DateTimeImmutable('2026-09-14 15:04:05'); + + self::assertSame('dump_2026-09-14_15-04-05.sql.gz', $this->parser->format($dateTime)); + } + + public function testParseRoundTripsWithFormat(): void + { + $dateTime = new \DateTimeImmutable('2026-09-14 15:04:05'); + $filename = $this->parser->format($dateTime); + + self::assertEquals($dateTime, $this->parser->parse($filename)); + } + + /** + * @dataProvider invalidFilenameProvider + */ + public function testParseRejectsInvalidFilenames(string $filename): void + { + self::assertNull($this->parser->parse($filename)); + } + + public static function invalidFilenameProvider(): iterable + { + yield 'wrong extension' => ['dump_2026-09-14_15-04-05.sql']; + yield 'no prefix' => ['2026-09-14_15-04-05.sql.gz']; + yield 'path traversal' => ['../dump_2026-09-14_15-04-05.sql.gz']; + yield 'garbage' => ['not-a-dump.sql.gz']; + yield 'empty' => ['']; + } + + public function testIsValid(): void + { + self::assertTrue($this->parser->isValid('dump_2026-09-14_15-04-05.sql.gz')); + self::assertFalse($this->parser->isValid('../etc/passwd')); + } +} diff --git a/tests/Service/MySqlVariantTest.php b/tests/Service/MySqlVariantTest.php new file mode 100644 index 0000000..fb6020c --- /dev/null +++ b/tests/Service/MySqlVariantTest.php @@ -0,0 +1,25 @@ + ['8.0.36', false]; + yield 'mariadb with legacy prefix' => ['5.5.5-10.11.2-MariaDB', true]; + yield 'mariadb without legacy prefix' => ['10.11.2-MariaDB', true]; + yield 'mariadb lowercase' => ['10.11.2-mariadb', true]; + } +}