ApiPlatform\Core\Tests\NelmioApiDoc\Parser\ApiPlatformParserTest::testParseRelation PHP Method

testParseRelation() public method

public testParseRelation ( )
    public function testParseRelation()
    {
        $resourceMetadataFactoryProphecy = $this->prophesize(ResourceMetadataFactoryInterface::class);
        $resourceMetadataFactoryProphecy->create(Dummy::class)->willReturn(new ResourceMetadata('dummy', 'dummy', null, [], []))->shouldBeCalled();
        $resourceMetadataFactoryProphecy->create(RelatedDummy::class)->willReturn(new ResourceMetadata())->shouldBeCalled();
        $resourceMetadataFactory = $resourceMetadataFactoryProphecy->reveal();
        $propertyNameCollectionFactoryProphecy = $this->prophesize(PropertyNameCollectionFactoryInterface::class);
        $propertyNameCollectionFactoryProphecy->create(Dummy::class, Argument::cetera())->willReturn(new PropertyNameCollection(['relatedDummy', 'relatedDummies']))->shouldBeCalled();
        $propertyNameCollectionFactoryProphecy->create(RelatedDummy::class, Argument::cetera())->willReturn(new PropertyNameCollection(['id', 'name']))->shouldBeCalled();
        $propertyNameCollectionFactory = $propertyNameCollectionFactoryProphecy->reveal();
        $propertyMetadataFactoryProphecy = $this->prophesize(PropertyMetadataFactoryInterface::class);
        $relatedDummyPropertyMetadata = (new PropertyMetadata())->withType(new Type(Type::BUILTIN_TYPE_OBJECT, true, RelatedDummy::class))->withDescription('A related dummy.')->withReadable(true)->withWritable(true)->withRequired(false);
        $propertyMetadataFactoryProphecy->create(Dummy::class, 'relatedDummy')->willReturn($relatedDummyPropertyMetadata)->shouldBeCalled();
        $relatedDummiesPropertyMetadata = (new PropertyMetadata())->withType(new Type(Type::BUILTIN_TYPE_OBJECT, false, 'Doctrine\\Common\\Collections\\Collection', true, new Type(Type::BUILTIN_TYPE_INT), new Type(Type::BUILTIN_TYPE_OBJECT, false, RelatedDummy::class)))->withDescription('Several dummies.')->withReadable(true)->withWritable(true)->withReadableLink(true)->withRequired(false);
        $propertyMetadataFactoryProphecy->create(Dummy::class, 'relatedDummies')->willReturn($relatedDummiesPropertyMetadata)->shouldBeCalled();
        $idPropertyMetadata = (new PropertyMetadata())->withType(new Type(Type::BUILTIN_TYPE_INT, false))->withReadable(true)->withWritable(false)->withRequired(true);
        $propertyMetadataFactoryProphecy->create(RelatedDummy::class, 'id')->willReturn($idPropertyMetadata)->shouldBeCalled();
        $namePropertyMetadata = (new PropertyMetadata())->withType(new Type(Type::BUILTIN_TYPE_STRING, false))->withDescription('A name.')->withReadable(true)->withWritable(true)->withRequired(false);
        $propertyMetadataFactoryProphecy->create(RelatedDummy::class, 'name')->willReturn($namePropertyMetadata)->shouldBeCalled();
        $propertyMetadataFactory = $propertyMetadataFactoryProphecy->reveal();
        $apiPlatformParser = new ApiPlatformParser($resourceMetadataFactory, $propertyNameCollectionFactory, $propertyMetadataFactory);
        $actual = $apiPlatformParser->parse(['class' => sprintf('%s:%s:%s', ApiPlatformParser::OUT_PREFIX, Dummy::class, 'get')]);
        $this->assertEquals(['relatedDummy' => ['dataType' => 'IRI', 'required' => false, 'description' => 'A related dummy.', 'readonly' => false, 'actualType' => DataTypes::STRING], 'relatedDummies' => ['dataType' => null, 'required' => false, 'description' => 'Several dummies.', 'readonly' => false, 'actualType' => DataTypes::COLLECTION, 'subType' => RelatedDummy::class, 'children' => ['id' => ['dataType' => DataTypes::INTEGER, 'required' => false, 'description' => null, 'readonly' => true], 'name' => ['dataType' => DataTypes::STRING, 'required' => false, 'description' => 'A name.', 'readonly' => false]]]], $actual);
    }