From 7e70c1f88c46d2e7e060f3edd90f7c4b4a0741f8 Mon Sep 17 00:00:00 2001 From: Mike van Riel Date: Thu, 29 Feb 2024 22:08:39 +0100 Subject: [PATCH] Add test for DescriptorRepository --- .../Compiler/DescriptorRepositoryTest.php | 138 ++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 tests/unit/phpDocumentor/Compiler/DescriptorRepositoryTest.php diff --git a/tests/unit/phpDocumentor/Compiler/DescriptorRepositoryTest.php b/tests/unit/phpDocumentor/Compiler/DescriptorRepositoryTest.php new file mode 100644 index 000000000..bc558e536 --- /dev/null +++ b/tests/unit/phpDocumentor/Compiler/DescriptorRepositoryTest.php @@ -0,0 +1,138 @@ + + */ +final class DescriptorRepositoryTest extends TestCase +{ + use ProphecyTrait; + use Faker; + + private Fqsen $fqsen; + private DescriptorRepository $descriptorRepository; + + protected function setUp(): void + { + $this->fqsen = $this->faker()->fqsen(); + $this->descriptorRepository = new DescriptorRepository(); + } + + /** + * @uses VersionDescriptor + * @uses Collection + * + * @covers ::setVersionDescriptor + */ + public function testSetVersionDescriptorMethod(): void + { + $versionDescriptor = $this->faker()->versionDescriptor([]); + + $this->descriptorRepository->setVersionDescriptor($versionDescriptor); + + $this->assertSame( + $versionDescriptor, + $this->descriptorRepository->getVersionDescriptor(), + 'The set and retrieved version descriptors must be the same.', + ); + } + + /** + * @uses VersionDescriptor + * @uses Collection + * + * @covers ::getVersionDescriptor + */ + public function testGetVersionDescriptorMethod(): void + { + $versionDescriptor = $this->faker()->versionDescriptor([]); + + $this->descriptorRepository->setVersionDescriptor($versionDescriptor); + + $this->assertSame( + $versionDescriptor, + $this->descriptorRepository->getVersionDescriptor(), + ); + } + + /** + * @uses VersionDescriptor + * @uses ApiSetDescriptor + * + * @covers ::findDescriptorByFqsen + */ + public function testItCanFindDescriptorByFqsen(): void + { + $classDescriptor = $this->faker()->classDescriptor($this->fqsen); + + $apiSetDescriptor = $this->faker()->apiSetDescriptor(); + $apiSetDescriptor->getIndex('elements')->set((string) $this->fqsen, $classDescriptor); + + $this->descriptorRepository->setVersionDescriptor($this->faker()->versionDescriptor([$apiSetDescriptor])); + + $this->assertSame( + $classDescriptor, + $this->descriptorRepository->findDescriptorByFqsen($this->fqsen), + ); + } + + /** + * @uses VersionDescriptor + * @uses ApiSetDescriptor + * + * @covers ::findDescriptorByFqsen + */ + public function testItReturnsNullWhenNoDescriptorIsFoundByFqsen(): void + { + $this->descriptorRepository->setVersionDescriptor( + $this->faker()->versionDescriptor([$this->faker()->apiSetDescriptor()]), + ); + + $this->assertNull($this->descriptorRepository->findDescriptorByFqsen($this->fqsen)); + } + + /** + * @uses VersionDescriptor + * @uses ApiSetDescriptor + * + * @covers ::findDescriptorByTypeAndFqsen + */ + public function testItCanFindDescriptorByTypeAndFqsen(): void + { + $classDescriptor = $this->faker()->classDescriptor($this->fqsen); + + $apiSetDescriptor = $this->faker()->apiSetDescriptor(); + $apiSetDescriptor + ->getIndex('classes') + ->set((string) $this->fqsen, $classDescriptor); + + $this->descriptorRepository + ->setVersionDescriptor($this->faker()->versionDescriptor([$apiSetDescriptor])); + + $this->assertSame( + $classDescriptor, + $this->descriptorRepository->findDescriptorByTypeAndFqsen('class', $this->fqsen), + ); + } +}