analyze(Repository::class); // Then $this->assertEquals('SELECT something', $result->methods['fetchWithQuery']->query); } public function testEntityReturnTypeIsAnalyzed(): void { // Given $analyzer = new RepositoryAnalyzer(new ResolutionStrategyFactory()); // When $result = $analyzer->analyze(Repository::class); // Then $this->assertEquals(FullEntity::class, $result->methods['fetchWithQuery']->returnType); } public function testArrayReturnTypeIsRead(): void { // Given $analyzer = new RepositoryAnalyzer(new ResolutionStrategyFactory()); // When $result = $analyzer->analyze(Repository::class); // Then $this->assertEquals('array', $result->methods['fetchArray']->returnType); } public function testVoidReturnTypeIsRead(): void { // Given $analyzer = new RepositoryAnalyzer(new ResolutionStrategyFactory()); // When $result = $analyzer->analyze(Repository::class); // Then $this->assertEquals('void', $result->methods['insert']->returnType); } public function testListResultOfIsRead(): void { // Given $analyzer = new RepositoryAnalyzer(new ResolutionStrategyFactory()); // When $result = $analyzer->analyze(Repository::class); // Then $this->assertEquals(FullEntity::class, $result->methods['fetchArray']->returnListType); } public function testInvalidListResultOfIsReported(): void { // Given $analyzer = new RepositoryAnalyzer(new ResolutionStrategyFactory()); // Then $this->expectException(InvalidRepository::class); // When $analyzer->analyze(InvalidListResultOfRepository::class); } public function testUnionReturnTypeIsReported(): void { // Given $analyzer = new RepositoryAnalyzer(new ResolutionStrategyFactory()); // Then $this->expectException(InvalidRepository::class); // When $analyzer->analyze(InvalidRepository::class); } public function testParametersAreAnalyzed(): void { // Given $analyzer = new RepositoryAnalyzer(new ResolutionStrategyFactory()); // When $result = $analyzer->analyze(Repository::class); // Then $method = $result->methods['doSomethingWithParameters']; /** @var array $parameters */ $parameters = $method->parameters; $this->assertCount(2, $parameters); $this->assertEquals('stringParam', $parameters[0]->name); $this->assertEquals('string', $parameters[0]->type); $this->assertEquals('intParam', $parameters[1]->name); $this->assertEquals('int', $parameters[1]->type); } public function testNullableReturnType(): void { // Given $analyzer = new RepositoryAnalyzer(new ResolutionStrategyFactory()); // When $result = $analyzer->analyze(Repository::class); // Then $method = $result->methods['findById']; $this->assertEquals('?Kartierung\FullEntity', $method->returnType); $this->assertTrue($method->returnsNullable()); } }