public function testGetAnnotations()
{
$resourceNameCollectionFactoryProphecy = $this->prophesize(ResourceNameCollectionFactoryInterface::class);
$resourceNameCollectionFactoryProphecy->create()->willReturn(new ResourceNameCollection([Dummy::class]))->shouldBeCalled();
$resourceNameCollectionFactory = $resourceNameCollectionFactoryProphecy->reveal();
$apiDocumentationBuilderProphecy = $this->prophesize(NormalizerInterface::class);
$hydraDoc = $this->getHydraDoc();
$apiDocumentationBuilderProphecy->normalize(new Documentation(new ResourceNameCollection([Dummy::class])))->willReturn($hydraDoc)->shouldBeCalled();
$apiDocumentationBuilder = $apiDocumentationBuilderProphecy->reveal();
$resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataFactoryInterface::class);
$dummyResourceMetadata = (new ResourceMetadata())->withShortName('Dummy')->withItemOperations(['get' => ['method' => 'GET'], 'put' => ['method' => 'PUT'], 'delete' => ['method' => 'DELETE']])->withCollectionOperations(['get' => ['filters' => ['my_dummy.search'], 'method' => 'GET'], 'post' => ['method' => 'POST']]);
$resourceMetadataFactoryProphecy->create(Dummy::class)->willReturn($dummyResourceMetadata)->shouldBeCalled();
$resourceMetadataFactory = $resourceMetadataFactoryProphecy->reveal();
$dummySearchFilterProphecy = $this->prophesize(FilterInterface::class);
$dummySearchFilterProphecy->getDescription(Dummy::class)->willReturn(['name' => ['property' => 'name', 'type' => 'string', 'required' => 'false', 'strategy' => 'partial']])->shouldBeCalled();
$dummySearchFilter = $dummySearchFilterProphecy->reveal();
$filters = new FilterCollection(['my_dummy.search' => $dummySearchFilter]);
$operationMethodResolverProphecy = $this->prophesize(OperationMethodResolverInterface::class);
$operationMethodResolverProphecy->getCollectionOperationMethod(Dummy::class, 'get')->willReturn('GET')->shouldBeCalled();
$operationMethodResolverProphecy->getCollectionOperationMethod(Dummy::class, 'post')->willReturn('POST')->shouldBeCalled();
$operationMethodResolverProphecy->getItemOperationMethod(Dummy::class, 'get')->willReturn('GET')->shouldBeCalled();
$operationMethodResolverProphecy->getItemOperationMethod(Dummy::class, 'put')->willReturn('PUT')->shouldBeCalled();
$operationMethodResolverProphecy->getItemOperationMethod(Dummy::class, 'delete')->willReturn('DELETE')->shouldBeCalled();
$operationMethodResolverProphecy->getCollectionOperationRoute(Dummy::class, 'get')->willReturn((new Route('/dummies'))->setMethods(['GET']))->shouldBeCalled();
$operationMethodResolverProphecy->getCollectionOperationRoute(Dummy::class, 'post')->willReturn((new Route('/dummies'))->setMethods(['POST']))->shouldBeCalled();
$operationMethodResolverProphecy->getItemOperationRoute(Dummy::class, 'get')->willReturn((new Route('/dummies/{id}'))->setMethods(['GET']))->shouldBeCalled();
$operationMethodResolverProphecy->getItemOperationRoute(Dummy::class, 'put')->willReturn((new Route('/dummies/{id}'))->setMethods(['PUT']))->shouldBeCalled();
$operationMethodResolverProphecy->getItemOperationRoute(Dummy::class, 'delete')->willReturn((new Route('/dummies/{id}'))->setMethods(['DELETE']))->shouldBeCalled();
$operationMethodResolver = $operationMethodResolverProphecy->reveal();
$apiPlatformProvider = new ApiPlatformProvider($resourceNameCollectionFactory, $apiDocumentationBuilder, $resourceMetadataFactory, $filters, $operationMethodResolver);
$actual = $apiPlatformProvider->getAnnotations();
$this->assertInternalType('array', $actual);
$this->assertCount(5, $actual);
$this->assertInstanceOf(ApiDoc::class, $actual[0]);
$this->assertEquals('/dummies', $actual[0]->getResource());
$this->assertEquals('Retrieves the collection of Dummy resources.', $actual[0]->getDescription());
$this->assertEquals('Dummy', $actual[0]->getResourceDescription());
$this->assertEquals('Dummy', $actual[0]->getSection());
$this->assertEquals(sprintf('%s:%s:%s', ApiPlatformParser::OUT_PREFIX, Dummy::class, 'get'), $actual[0]->getOutput());
$this->assertEquals(['name' => ['property' => 'name', 'type' => 'string', 'required' => 'false', 'strategy' => 'partial']], $actual[0]->getFilters());
$this->assertInstanceOf(Route::class, $actual[0]->getRoute());
$this->assertEquals('/dummies', $actual[0]->getRoute()->getPath());
$this->assertEquals(['GET'], $actual[0]->getRoute()->getMethods());
$this->assertInstanceOf(ApiDoc::class, $actual[1]);
$this->assertEquals('/dummies', $actual[1]->getResource());
$this->assertEquals('Creates a Dummy resource.', $actual[1]->getDescription());
$this->assertEquals('Dummy', $actual[1]->getResourceDescription());
$this->assertEquals('Dummy', $actual[1]->getSection());
$this->assertEquals(sprintf('%s:%s:%s', ApiPlatformParser::IN_PREFIX, Dummy::class, 'post'), $actual[1]->getInput());
$this->assertEquals(sprintf('%s:%s:%s', ApiPlatformParser::OUT_PREFIX, Dummy::class, 'post'), $actual[1]->getOutput());
$this->assertInstanceOf(Route::class, $actual[1]->getRoute());
$this->assertEquals('/dummies', $actual[1]->getRoute()->getPath());
$this->assertEquals(['POST'], $actual[1]->getRoute()->getMethods());
$this->assertInstanceOf(ApiDoc::class, $actual[2]);
$this->assertEquals('/dummies/{id}', $actual[2]->getResource());
$this->assertEquals('Retrieves Dummy resource.', $actual[2]->getDescription());
$this->assertEquals('Dummy', $actual[2]->getResourceDescription());
$this->assertEquals('Dummy', $actual[2]->getSection());
$this->assertEquals(sprintf('%s:%s:%s', ApiPlatformParser::OUT_PREFIX, Dummy::class, 'get'), $actual[2]->getOutput());
$this->assertInstanceOf(Route::class, $actual[2]->getRoute());
$this->assertEquals('/dummies/{id}', $actual[2]->getRoute()->getPath());
$this->assertEquals(['GET'], $actual[2]->getRoute()->getMethods());
$this->assertInstanceOf(ApiDoc::class, $actual[3]);
$this->assertEquals('/dummies/{id}', $actual[3]->getResource());
$this->assertEquals('Replaces the Dummy resource.', $actual[3]->getDescription());
$this->assertEquals('Dummy', $actual[3]->getResourceDescription());
$this->assertEquals('Dummy', $actual[3]->getSection());
$this->assertEquals(sprintf('%s:%s:%s', ApiPlatformParser::IN_PREFIX, Dummy::class, 'put'), $actual[3]->getInput());
$this->assertEquals(sprintf('%s:%s:%s', ApiPlatformParser::OUT_PREFIX, Dummy::class, 'put'), $actual[3]->getOutput());
$this->assertInstanceOf(Route::class, $actual[3]->getRoute());
$this->assertEquals('/dummies/{id}', $actual[3]->getRoute()->getPath());
$this->assertEquals(['PUT'], $actual[3]->getRoute()->getMethods());
$this->assertInstanceOf(ApiDoc::class, $actual[4]);
$this->assertEquals('/dummies/{id}', $actual[4]->getResource());
$this->assertEquals('Deletes the Dummy resource.', $actual[4]->getDescription());
$this->assertEquals('Dummy', $actual[4]->getResourceDescription());
$this->assertEquals('Dummy', $actual[4]->getSection());
$this->assertInstanceOf(Route::class, $actual[4]->getRoute());
$this->assertEquals('/dummies/{id}', $actual[4]->getRoute()->getPath());
$this->assertEquals(['DELETE'], $actual[4]->getRoute()->getMethods());
}