Passed
Push — master ( 7144a6...3b36a2 )
by Alex
34s
created

ResponseTest::testPsr7ResponseOptionalCode()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 18
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 18
rs 9.4285
c 1
b 0
f 0
cc 1
eloc 13
nc 1
nop 0
1
<?php
2
3
namespace Demv\JSend\Test;
4
5
use Demv\JSend\JSend;
6
use Demv\JSend\JSendResponse;
7
use Demv\JSend\ResponseFactory;
8
use Demv\JSend\Status;
9
use Demv\JSend\StatusInterface;
10
use PHPUnit\Framework\TestCase;
11
12
final class ResponseTest extends TestCase
13
{
14
    public function testDefaultHttpStatusCode(): void
15
    {
16
        $this->assertEquals(200, JSend::getDefaultHttpStatusCode(ResponseFactory::instance()->success()));
17
        $this->assertEquals(200, JSend::getDefaultHttpStatusCode(ResponseFactory::instance()->fail()));
18
        $this->assertEquals(500, JSend::getDefaultHttpStatusCode(ResponseFactory::instance()->error(['message' => 'wtf'])));
19
        $this->assertEquals(400, JSend::getDefaultHttpStatusCode(ResponseFactory::instance()->error(['message' => 'wtf', 'code' => 400])));
20
    }
21
22 View Code Duplication
    public function testSuccessFactory(): void
23
    {
24
        $response = JSendResponse::success(['Erfolgreich!']);
25
26
        $this->assertTrue($response->getStatus()->isSuccess());
27
        $this->assertEquals(['Erfolgreich!'], $response->getData());
28
    }
29
30 View Code Duplication
    public function testFailFactory(): void
31
    {
32
        $response = JSendResponse::fail(['Irgendwas lief schief']);
33
34
        $this->assertTrue($response->getStatus()->isFail());
35
        $this->assertEquals(['Irgendwas lief schief'], $response->getData());
36
    }
37
38
    public function testErrorFactory(): void
39
    {
40
        $response = JSendResponse::error('Es ist ein Fehler aufgetreten');
41
42
        $this->assertTrue($response->getStatus()->isError());
43
        $this->assertEmpty($response->getData());
44
        $this->assertEquals('Es ist ein Fehler aufgetreten', $response->getError()->getMessage());
45
    }
46
47
    public function testSuccessConversion(): void
48
    {
49
        $json = '{"status": "success", "data": ["Holy", "Moly"]}';
50
51
        $success = new DummyResponse();
52
        $success->withBody(new DummyStream($json));
53
        $success->withStatus(214);
54
55
        $response = ResponseFactory::instance()->convert($success);
56
        $this->assertTrue($response->getStatus()->isSuccess());
57
        $this->assertEquals(['Holy', 'Moly'], $response->getData());
58
        $this->assertJsonStringEqualsJsonString($json, json_encode($response));
59
    }
60
61
    public function testFailConversion(): void
62
    {
63
        $fail = new DummyResponse();
64
        $fail->withBody(new DummyStream('{"status": "fail", "data": null}'));
65
66
        $response = ResponseFactory::instance()->convert($fail);
67
        $this->assertTrue($response->getStatus()->isFail());
68
        $this->assertEmpty($response->getData());
69
        $this->assertJsonStringEqualsJsonString('{"status": "fail", "data": null}', json_encode($response));
70
    }
71
72
    public function testErrorConversion(): void
73
    {
74
        $json = '{"status": "error", "data": ["Invalid"], "message": "Something is not right..."}';
75
76
        $error = new DummyResponse();
77
        $error->withBody(new DummyStream($json));
78
        $error->withStatus(501);
79
80
        $result         = json_decode($json, true);
81
        $result['code'] = $error->getStatusCode();
82
83
        $response = ResponseFactory::instance()->convert($error);
84
        $this->assertTrue($response->getStatus()->isError());
85
        $this->assertEquals(['Invalid'], $response->getData());
86
        $this->assertJsonStringEqualsJsonString(json_encode($result), json_encode($response));
87
        $this->assertEquals('Something is not right...', $response->getError()->getMessage());
88
        $this->assertEquals($error->getStatusCode(), $response->getError()->getCode());
89
    }
90
91
    public function testMapping(): void
92
    {
93
        $response = new JSendResponse(Status::translate(1), null);
94
        $this->assertTrue($response->getStatus()->isSuccess());
95
96
        $response = new JSendResponse(Status::translate(0), null);
97
        $this->assertTrue($response->getStatus()->isFail());
98
99
        $response = new JSendResponse(Status::translate(-1), null);
100
        $this->assertTrue($response->getStatus()->isError());
101
102
        $response = new JSendResponse(Status::translate(true), null);
0 ignored issues
show
Documentation introduced by
true is of type boolean, but the function expects a integer.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
103
        $this->assertTrue($response->getStatus()->isSuccess());
104
105
        $response = new JSendResponse(Status::translate(false), null);
0 ignored issues
show
Documentation introduced by
false is of type boolean, but the function expects a integer.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
106
        $this->assertTrue($response->getStatus()->isFail());
107
108
        $response = new JSendResponse(Status::translate(false, [false => StatusInterface::STATUS_ERROR]), null);
0 ignored issues
show
Documentation introduced by
false is of type boolean, but the function expects a integer.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
109
        $this->assertTrue($response->getStatus()->isError());
110
    }
111
112
    public function testPsr7Response(): void
113
    {
114
        $response = JSendResponse::success(['Erfolgreich!'])->asResponse(200);
115
        $this->assertEquals(200, $response->getStatusCode());
116
        $this->assertEquals('{"status":"success","data":["Erfolgreich!"]}', $response->getBody()->getContents());
117
118
        $response = JSendResponse::fail(['Irgendwas lief schief'])->asResponse(400);
119
        $this->assertEquals(400, $response->getStatusCode());
120
        $this->assertEquals('{"status":"fail","data":["Irgendwas lief schief"]}', $response->getBody()->getContents());
121
122
        $response = JSendResponse::error('Es ist ein Fehler aufgetreten', 404)->asResponse(500);
123
        $this->assertEquals(500, $response->getStatusCode());
124
        $this->assertEquals('{"status":"error","message":"Es ist ein Fehler aufgetreten","code":404}', $response->getBody()->getContents());
125
    }
126
127
    public function testPsr7ResponseOptionalCode(): void
128
    {
129
        $response = JSendResponse::success(['Erfolgreich!'])->asResponse();
130
        $this->assertEquals(200, $response->getStatusCode());
131
        $this->assertEquals('{"status":"success","data":["Erfolgreich!"]}', $response->getBody()->getContents());
132
133
        $response = JSendResponse::fail(['Irgendwas lief schief'])->asResponse();
134
        $this->assertEquals(200, $response->getStatusCode());
135
        $this->assertEquals('{"status":"fail","data":["Irgendwas lief schief"]}', $response->getBody()->getContents());
136
137
        $response = JSendResponse::error('Es ist ein Fehler aufgetreten', 404)->asResponse();
138
        $this->assertEquals(404, $response->getStatusCode());
139
        $this->assertEquals('{"status":"error","message":"Es ist ein Fehler aufgetreten","code":404}', $response->getBody()->getContents());
140
141
        $response = JSendResponse::error('Es ist ein Fehler aufgetreten')->asResponse();
142
        $this->assertEquals(500, $response->getStatusCode());
143
        $this->assertEquals('{"status":"error","message":"Es ist ein Fehler aufgetreten"}', $response->getBody()->getContents());
144
    }
145
}
146