Completed
Pull Request — master (#52)
by John
03:28 queued 45s
created

RefResolverTest::canResolveReferencesWithSlashed()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 5
rs 9.4285
cc 1
eloc 3
nc 1
nop 0
1
<?php
2
/*
3
 * This file is part of the KleijnWeb\SwaggerBundle package.
4
 *
5
 * For the full copyright and license information, please view the LICENSE
6
 * file that was distributed with this source code.
7
 */
8
9
namespace KleijnWeb\SwaggerBundle\Tests\Document;
10
11
use KleijnWeb\SwaggerBundle\Document\RefResolver;
12
use KleijnWeb\SwaggerBundle\Document\YamlParser;
13
14
/**
15
 * @author John Kleijn <[email protected]>
16
 */
17
class RefResolverTest extends \PHPUnit_Framework_TestCase
18
{
19
    /**
20
     * @test
21
     */
22
    public function canResolveResourceSchemaReferences()
23
    {
24
        $resolver = $this->construct('petstore.yml');
25
        $resolver->resolve();
26
        $schemas = $resolver->getDefinition()->definitions;
27
        $propertySchema = $schemas->Pet->properties->category;
28
        $this->assertObjectNotHasAttribute('$ref', $propertySchema);
29
        $this->assertObjectHasAttribute('id', $propertySchema);
30
        $this->assertSame('object', $propertySchema->type);
31
    }
32
33
    /**
34
     * @test
35
     */
36
    public function canResolveParameterSchemaReferences()
37
    {
38
        $resolver = $this->construct('instagram.yml');
39
        $pathDefinitions = $resolver->getDefinition()->paths;
40
        $pathDefinition = $pathDefinitions->{'/users/{user-id}'};
41
        $this->assertInternalType('array', $pathDefinition->parameters);
42
        $pathDefinition = $pathDefinitions->{'/users/{user-id}'};
43
        $resolver->resolve();
44
        $this->assertInternalType('array', $pathDefinition->parameters);
45
        $argumentPseudoSchema = $pathDefinition->parameters[0];
46
        $this->assertObjectNotHasAttribute('$ref', $argumentPseudoSchema);
47
        $this->assertObjectHasAttribute('in', $argumentPseudoSchema);
48
        $this->assertSame('user-id', $argumentPseudoSchema->name);
49
    }
50
51
    /**
52
     * @test
53
     */
54
    public function canResolveReferencesWithSlashed()
55
    {
56
        $resolver = $this->construct('partials/slashes.yml');
57
        $this->assertSame('thevalue', $resolver->resolve()->Foo->bar);
58
    }
59
60
    /**
61
     * @test
62
     *
63
     */
64
    public function canResolveExternalReferences()
65
    {
66
        $resolver = $this->construct('composite.yml');
67
        $document = $resolver->resolve();
68
        $this->assertObjectHasAttribute('schema', $document->responses->Created);
69
        $response = $document->paths->{'/pet'}->post->responses->{'500'};
70
        $this->assertObjectHasAttribute('description', $response);
71
    }
72
73
    /**
74
     * @test
75
     */
76
    public function canUnResolve()
77
    {
78
        $resolver = $this->construct('composite.yml');
79
        $expected = clone $resolver->getDefinition();
80
        $resolver->resolve();
81
        $document = $resolver->unresolve();
82
        $this->assertObjectNotHasAttribute('schema', $document->responses->Created);
83
        $this->assertEquals($expected, $document);
84
    }
85
86
    /**
87
     * @param string $path
88
     *
89
     * @return RefResolver
90
     */
91
    private function construct($path)
92
    {
93
        $filePath = "src/Tests/Functional/PetStore/app/swagger/$path";
94
        $contents = file_get_contents($filePath);
95
        $parser = new YamlParser();
96
        /** @var object $object */
97
        $object = $parser->parse($contents);
98
        $resolver = new RefResolver($object, $filePath);
99
100
        return $resolver;
101
    }
102
}
103