From e8fcdb661f307716d5f616c9bdba7aa5b1f55c4a Mon Sep 17 00:00:00 2001 From: Henrique Moody Date: Sun, 2 Apr 2023 14:33:29 +0200 Subject: [PATCH] Allow creating paths from fixture files We had a method that returned the full path of the fixture directory, and we frequently would concatenate that path with a file we needed. I changed it to include the file's path inside the fixture directory. That way, we avoid repeating the same patter over and over. I made the method static because we use it in data providers, which need to be static. Signed-off-by: Henrique Moody --- tests/library/RuleTestCase.php | 23 +++++++++++++++-------- tests/unit/Rules/ExtensionTest.php | 6 +++--- tests/unit/Rules/FileTest.php | 4 ++-- tests/unit/Rules/ImageTest.php | 16 ++++++++-------- tests/unit/Rules/ReadableTest.php | 4 ++-- tests/unit/Rules/WritableTest.php | 17 ++++++++--------- 6 files changed, 38 insertions(+), 32 deletions(-) diff --git a/tests/library/RuleTestCase.php b/tests/library/RuleTestCase.php index 1153ac91..d52d1f47 100644 --- a/tests/library/RuleTestCase.php +++ b/tests/library/RuleTestCase.php @@ -14,6 +14,8 @@ use Respect\Validation\Message\Formatter; use Respect\Validation\Message\Stringifier\KeepOriginalStringName; use Respect\Validation\Validatable; +use function implode; +use function ltrim; use function realpath; use function Respect\Stringifier\stringify; use function sprintf; @@ -55,14 +57,6 @@ abstract class RuleTestCase extends TestCase */ abstract public function providerForInvalidInput(): array; - /** - * Returns the directory used to store test fixtures. - */ - public function getFixtureDirectory(): string - { - return (string) realpath(__DIR__ . '/../fixtures'); - } - /** * Create a mock of a Validatable. * @@ -139,6 +133,19 @@ abstract class RuleTestCase extends TestCase self::assertInvalidInput($validator, $input); } + /** + * Returns the directory used to store test fixtures. + */ + public static function fixture(?string $filename = null): string + { + $parts = [(string) realpath(__DIR__ . '/../fixtures')]; + if ($filename !== null) { + $parts[] = ltrim($filename, '/'); + } + + return implode('/', $parts); + } + /** * @param mixed $input */ diff --git a/tests/unit/Rules/ExtensionTest.php b/tests/unit/Rules/ExtensionTest.php index b920334f..f9de66bc 100644 --- a/tests/unit/Rules/ExtensionTest.php +++ b/tests/unit/Rules/ExtensionTest.php @@ -33,9 +33,9 @@ final class ExtensionTest extends RuleTestCase 'inc' => [new Extension('inc'), 'filename.inc'], 'bz2' => [new Extension('bz2'), 'filename.foo.bar.bz2'], 'php' => [new Extension('php'), new SplFileInfo(__FILE__)], - 'png' => [new Extension('png'), $this->getFixtureDirectory() . 'valid-image.png'], - 'gif' => [new Extension('gif'), $this->getFixtureDirectory() . 'valid-image.gif'], - 'file-invalid' => [new Extension('png'), $this->getFixtureDirectory() . 'invalid-image.png'], + 'png' => [new Extension('png'), self::fixture('valid-image.png')], + 'gif' => [new Extension('gif'), self::fixture('valid-image.gif')], + 'file-invalid' => [new Extension('png'), self::fixture('invalid-image.png')], ]; } diff --git a/tests/unit/Rules/FileTest.php b/tests/unit/Rules/FileTest.php index 98037e03..119da027 100644 --- a/tests/unit/Rules/FileTest.php +++ b/tests/unit/Rules/FileTest.php @@ -36,8 +36,8 @@ final class FileTest extends RuleTestCase return [ 'filename' => [$sut, __FILE__], - 'SplFileInfo' => [$sut, new SplFileInfo($this->getFixtureDirectory() . '/valid-image.png')], - 'SplFileObject' => [$sut, new SplFileObject($this->getFixtureDirectory() . '/invalid-image.png')], + 'SplFileInfo' => [$sut, new SplFileInfo(self::fixture('valid-image.png'))], + 'SplFileObject' => [$sut, new SplFileObject(self::fixture('invalid-image.png'))], ]; } diff --git a/tests/unit/Rules/ImageTest.php b/tests/unit/Rules/ImageTest.php index 151b7398..0d711fd9 100644 --- a/tests/unit/Rules/ImageTest.php +++ b/tests/unit/Rules/ImageTest.php @@ -33,12 +33,12 @@ final class ImageTest extends RuleTestCase $rule = new Image(); return [ - [$rule, $this->getFixtureDirectory() . '/valid-image.gif'], - [$rule, $this->getFixtureDirectory() . '/valid-image.jpg'], - [$rule, $this->getFixtureDirectory() . '/valid-image.png'], - [$rule, new SplFileInfo($this->getFixtureDirectory() . '/valid-image.gif')], - [$rule, new SplFileInfo($this->getFixtureDirectory() . '/valid-image.jpg')], - [$rule, new SplFileObject($this->getFixtureDirectory() . '/valid-image.png')], + [$rule, self::fixture('valid-image.gif')], + [$rule, self::fixture('valid-image.jpg')], + [$rule, self::fixture('valid-image.png')], + [$rule, new SplFileInfo(self::fixture('valid-image.gif'))], + [$rule, new SplFileInfo(self::fixture('valid-image.jpg'))], + [$rule, new SplFileObject(self::fixture('valid-image.png'))], ]; } @@ -50,7 +50,7 @@ final class ImageTest extends RuleTestCase $rule = new Image(); return [ - [$rule, $this->getFixtureDirectory() . '/invalid-image.png'], + [$rule, self::fixture('invalid-image.png')], [$rule, 'asdf'], [$rule, 1], [$rule, true], @@ -62,7 +62,7 @@ final class ImageTest extends RuleTestCase */ public function shouldValidateWithDefinedInstanceOfFileInfo(): void { - $input = $this->getFixtureDirectory() . '/valid-image.gif'; + $input = self::fixture('valid-image.gif'); $finfo = $this->createMock(finfo::class); $finfo diff --git a/tests/unit/Rules/ReadableTest.php b/tests/unit/Rules/ReadableTest.php index 331413c8..497fbfad 100644 --- a/tests/unit/Rules/ReadableTest.php +++ b/tests/unit/Rules/ReadableTest.php @@ -29,7 +29,7 @@ final class ReadableTest extends RuleTestCase */ public function providerForValidInput(): array { - $file = $this->getFixtureDirectory() . '/valid-image.gif'; + $file = self::fixture('valid-image.gif'); $rule = new Readable(); return [ @@ -44,7 +44,7 @@ final class ReadableTest extends RuleTestCase */ public function providerForInvalidInput(): array { - $file = $this->getFixtureDirectory() . '/invalid-image.gif'; + $file = self::fixture('invalid-image.gif'); $rule = new Readable(); return [ diff --git a/tests/unit/Rules/WritableTest.php b/tests/unit/Rules/WritableTest.php index 0e0d80a8..3974088f 100644 --- a/tests/unit/Rules/WritableTest.php +++ b/tests/unit/Rules/WritableTest.php @@ -34,11 +34,15 @@ final class WritableTest extends RuleTestCase public function providerForValidInput(): array { $sut = new Writable(); - $filename = $this->getFixtureDirectory() . '/valid-image.png'; + $filename = self::fixture('valid-image.png'); + $directory = self::fixture(); + + chmod($filename, 0644); + chmod($directory, 0755); return [ 'writable file' => [$sut, $filename], - 'writable directory' => [$sut, $this->getFixtureDirectory()], + 'writable directory' => [$sut, $directory], 'writable SplFileInfo file' => [$sut, new SplFileInfo($filename)], 'writable SplFileObject file' => [$sut, new SplFileObject($filename)], 'writable PSR-7 stream' => [$sut, $this->createPsr7Stream(true)], @@ -51,9 +55,9 @@ final class WritableTest extends RuleTestCase public function providerForInvalidInput(): array { $rule = new Writable(); - $filename = $this->getFixtureDirectory() . '/non-writable'; + $filename = self::fixture('non-writable'); - $this->changeFileModeToUnwritable($filename); + chmod($filename, 0555); return [ 'unwritable PSR-7 stream' => [$rule, $this->createPsr7Stream(false)], @@ -78,9 +82,4 @@ final class WritableTest extends RuleTestCase return $stream; } - - private function changeFileModeToUnwritable(string $filename): void - { - chmod($filename, 0555); - } }