Completed
Push — master ( 8796f9...232efd )
by
unknown
02:43
created

ResponseModelTest   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 128
Duplicated Lines 18.75 %

Coupling/Cohesion

Components 2
Dependencies 7

Importance

Changes 0
Metric Value
dl 24
loc 128
rs 10
c 0
b 0
f 0
wmc 13
lcom 2
cbo 7

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
3
namespace tests\MediaMonks\RestApi\Model;
4
5
use MediaMonks\RestApi\Model\ResponseModel;
6
use MediaMonks\RestApi\Response\OffsetPaginatedResponse;
7
use Symfony\Component\HttpFoundation\RedirectResponse;
8
use Symfony\Component\HttpFoundation\Response;
9
use \Mockery as m;
10
11
class ResponseModelTest extends \PHPUnit_Framework_TestCase
12
{
13
    public function testDataGettersSetter()
14
    {
15
        $data              = ['foo', 'bar'];
16
        $responseContainer = new ResponseModel();
17
        $responseContainer->setData($data);
18
        $this->assertEquals($data, $responseContainer->getData());
19
    }
20
21
    public function testExceptionGettersSetter()
22
    {
23
        $exception         = new \Exception;
24
        $responseContainer = new ResponseModel();
25
        $responseContainer->setException($exception);
26
        $this->assertEquals($exception, $responseContainer->getException());
27
    }
28
29
    public function testLocationGettersSetter()
30
    {
31
        $location          = 'http://www.mediamonks.com';
32
        $redirect          = new RedirectResponse($location);
33
        $responseContainer = new ResponseModel();
34
        $responseContainer->setResponse($redirect);
35
        $this->assertEquals($redirect, $responseContainer->getResponse());
36
    }
37
38
    public function testPaginationGettersSetter()
39
    {
40
        $pagination        = new OffsetPaginatedResponse('foo', 1, 2, 3);
41
        $responseContainer = new ResponseModel();
42
        $responseContainer->setPagination($pagination);
43
        $this->assertEquals($pagination, $responseContainer->getPagination());
44
    }
45
46
    public function testReturnStatusCodeGetterSetter()
47
    {
48
        $statusCode        = Response::HTTP_NOT_MODIFIED;
49
        $responseContainer = new ResponseModel();
50
        $responseContainer->setReturnStatusCode($statusCode);
51
        $this->assertEquals($statusCode, $responseContainer->getReturnStatusCode());
52
    }
53
54
    public function testStatusCodeGetterSetter()
55
    {
56
        $statusCode        = Response::HTTP_OK;
57
        $responseContainer = new ResponseModel();
58
        $responseContainer->setData('OK');
59
        $responseContainer->setStatusCode($statusCode);
60
        $this->assertEquals($statusCode, $responseContainer->getStatusCode());
61
    }
62
63
    public function testGetCodeFromStatusCode()
64
    {
65
        $statusCode = Response::HTTP_BAD_REQUEST;
66
        $code       = 400;
67
        $exception  = new \Exception('', $code);
68
69
        $responseContainer = new ResponseModel();
70
        $responseContainer->setStatusCode($statusCode);
71
        $responseContainer->setException($exception);
72
73
        $this->assertEquals($code, $responseContainer->getStatusCode());
74
    }
75
76
    public function testToArrayStatusCode()
77
    {
78
        $responseContainer = new ResponseModel();
79
        $responseContainer->setData('foo');
80
        $responseContainer->setReturnStatusCode(true);
81
82
        $result = $responseContainer->toArray();
83
        $this->assertEquals(Response::HTTP_OK, $result['statusCode']);
84
    }
85
86
    public function testValidationExceptionToArrayFormValidationException()
87
    {
88
        if (defined('HHVM_VERSION')) {
89
            $this->markTestSkipped('This test fails on HHVM, see issue #8');
90
        }
91
92
        $error = ['code' => 0, 'message' => '', 'fields' => null];
93
94
        $mockException = m::mock('\MediaMonks\RestApi\Exception\ValidationException, \MediaMonks\RestApi\Exception\ExceptionInterface');
95
        $mockException->shouldReceive('toArray')->andReturn($error);
96
        $mockException->shouldReceive('getFields');
97
98
        $responseContainer = new ResponseModel();
99
        $responseContainer->setException($mockException);
100
101
        $this->assertEquals(['error' => $error], $responseContainer->toArray());
102
    }
103
104
    public function testReturnStackTraceEnabled()
105
    {
106
        $responseContainer = new ResponseModel();
107
        $responseContainer->setException(new \Exception('Test'));
108
        $responseContainer->setReturnStackTrace(true);
109
110
        $this->assertTrue($responseContainer->isReturnStackTrace());
111
112
        $data = $responseContainer->toArray();
113
        $this->assertArrayHasKey('error', $data);
114
        $this->assertArrayHasKey('stack_trace', $data['error']);
115
    }
116
117
    public function testReturnStackTraceDisabled()
118
    {
119
        $responseContainer = new ResponseModel();
120
        $responseContainer->setException(new \Exception('Test'));
121
        $responseContainer->setReturnStackTrace(false);
122
123
        $this->assertFalse($responseContainer->isReturnStackTrace());
124
125
        $data = $responseContainer->toArray();
126
        $this->assertArrayHasKey('error', $data);
127
        $this->assertArrayNotHasKey('stack_trace', $data['error']);
128
    }
129
130
    /**
131
     * @param $content
132
     * @return ResponseModel
133
     */
134
    protected function createResponseModel($content)
135
    {
136
        return ResponseModel::createAutoDetect($content);
137
    }
138
}
139