Completed
Push — master ( 56991b...bb9342 )
by John
9s
created

RequestCoercerTest::willNotFailWithNoParameters()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 13
rs 9.4285
cc 1
eloc 8
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\Request;
10
11
use KleijnWeb\SwaggerBundle\Document\OperationObject;
12
use KleijnWeb\SwaggerBundle\Request\ContentDecoder;
13
use KleijnWeb\SwaggerBundle\Request\RequestCoercer;
14
use KleijnWeb\SwaggerBundle\Request\ParameterCoercer;
15
use Symfony\Component\HttpFoundation\Request;
16
17
/**
18
 * @author John Kleijn <[email protected]>
19
 */
20
class RequestCoercerTest extends \PHPUnit_Framework_TestCase
21
{
22
    /**
23
     * @var ContentDecoder
24
     */
25
    private $contentDecoderMock;
26
27
    protected function setUp()
28
    {
29
        $this->contentDecoderMock = $this
30
            ->getMockBuilder('KleijnWeb\SwaggerBundle\Request\ContentDecoder')
31
            ->disableOriginalConstructor()
32
            ->getMock();
33
        $this->contentDecoderMock
34
            ->expects($this->any())
35
            ->method('decodeContent')
36
            ->willReturnCallback(function (Request $request) {
37
                return json_decode($request->getContent());
38
            });
39
    }
40
41
    /**
42
     * @test
43
     */
44
    public function willAddDecodedContentAsAttribute()
45
    {
46
        $coercer = new RequestCoercer($this->contentDecoderMock);
47
        $content = '[1,2,3,4]';
48
        $request = TestRequestFactory::create($content);
49
50
        $operationDefinition = (object)[
51
            'parameters' => [
52
                (object)[
53
                    'name'   => 'myContent',
54
                    'in'     => 'body',
55
                    'schema' => (object)[
56
                        'type' => 'array'
57
                    ]
58
                ]
59
            ]
60
        ];
61
62
        $operationObject = OperationObject::createFromOperationDefinition((object)$operationDefinition);
63
        $coercer->coerceRequest($request, $operationObject);
64
65
        $this->assertSame([1, 2, 3, 4], $request->attributes->get('myContent'));
66
    }
67
68
    /**
69
     * @test
70
     */
71
    public function willConstructDate()
72
    {
73
        $coercer = new RequestCoercer($this->contentDecoderMock);
74
        $request = TestRequestFactory::create(null, ['foo' => "2015-01-01"]);
75
76
        $operationDefinition = (object)[
77
            'parameters' => [
78
                (object)[
79
                    'name'   => 'foo',
80
                    'in'     => 'query',
81
                    'type'   => 'string',
82
                    'format' => 'date'
83
                ]
84
            ]
85
        ];
86
87
        $operationObject = OperationObject::createFromOperationDefinition((object)$operationDefinition);
88
        $coercer->coerceRequest($request, $operationObject);
89
90
        $expected = ParameterCoercer::coerceParameter($operationDefinition->parameters[0], "2015-01-01");
91
92
        // Sanity check
93
        $this->assertInstanceOf('DateTime', $expected);
94
95
        $this->assertEquals($expected, $request->attributes->get('foo'));
96
    }
97
98
    /**
99
     * @test
100
     */
101
    public function willNotFailWithNoParameters()
102
    {
103
        $coercer = new RequestCoercer($this->contentDecoderMock);
104
        $content = '[1,2,3,4]';
105
        $request = TestRequestFactory::create($content);
106
107
        $operationDefinition = (object)[];
108
109
        $operationObject = OperationObject::createFromOperationDefinition((object)$operationDefinition);
110
        $coercer->coerceRequest($request, $operationObject);
111
112
        $this->assertEmpty($request->attributes);
113
    }
114
}
115