getMockBuilder(CollectionInterface::class) ->disableOriginalConstructor() ->onlyMethods(['getMetadata']) ->getMock(); $collection->expects($this->once())->method('getMetadata')->willReturn([]); $handler = new ListResourcesHandler($collection); $request = new ListResourcesRequest(); NSA::setProperty($request, 'id', 1); $response = $handler->handle($request); $this->assertInstanceOf(ListResourcesResult::class, $response->result); $this->assertEquals(1, $response->id); $this->assertEquals([], $response->result->resources); } /** * @param iterable $metadataList */ #[DataProvider('metadataProvider')] public function testHandleReturnAll(iterable $metadataList) { $collection = $this->getMockBuilder(CollectionInterface::class) ->disableOriginalConstructor() ->onlyMethods(['getMetadata']) ->getMock(); $collection->expects($this->once())->method('getMetadata')->willReturn($metadataList); $handler = new ListResourcesHandler($collection); $request = new ListResourcesRequest(); NSA::setProperty($request, 'id', 1); $response = $handler->handle($request); $this->assertInstanceOf(ListResourcesResult::class, $response->result); $this->assertCount(1, $response->result->resources); $this->assertNull($response->result->nextCursor); } /** * @return array> */ public static function metadataProvider(): array { $item = self::createMetadataItem(); return [ 'array' => [[$item]], 'generator' => [(function () use ($item) { yield $item; })()], ]; } public function testHandlePagination() { $item = self::createMetadataItem(); $collection = $this->getMockBuilder(CollectionInterface::class) ->disableOriginalConstructor() ->onlyMethods(['getMetadata']) ->getMock(); $collection->expects($this->once())->method('getMetadata')->willReturn([$item, $item]); $handler = new ListResourcesHandler($collection, 2); $request = new ListResourcesRequest(); NSA::setProperty($request, 'id', 1); $response = $handler->handle($request); $this->assertInstanceOf(ListResourcesResult::class, $response->result); $this->assertCount(2, $response->result->resources); $this->assertNotNull($response->result->nextCursor); } private static function createMetadataItem(): MetadataInterface { return new class implements MetadataInterface { public function getUri(): string { return 'file:///src/SomeFile.php'; } public function getName(): string { return 'SomeFile'; } public function getDescription(): string { return 'File src/SomeFile.php'; } public function getMimeType(): string { return 'text/plain'; } public function getSize(): int { return 1024; } }; } }