|
1
|
|
|
<?php |
|
|
|
|
|
|
2
|
|
|
namespace Firebase; |
|
3
|
|
|
|
|
4
|
|
|
require_once __DIR__ . '/../src/firebaseStub.php'; |
|
5
|
|
|
|
|
6
|
|
|
class FirebaseStubTest extends \PHPUnit_Framework_TestCase |
|
7
|
|
|
{ |
|
8
|
|
|
/** |
|
9
|
|
|
* @var FirebaseStub |
|
10
|
|
|
*/ |
|
11
|
|
|
protected $_firebaseStub; |
|
12
|
|
|
|
|
13
|
|
|
const DEFAULT_URL = 'https://firebaseStub.firebaseio.com/'; |
|
14
|
|
|
const DEFAULT_TOKEN = 'MqL0c8tKCtheLSYcygBrIanhU8Z2hULOFs9OKPdEp'; |
|
15
|
|
|
const DEFAULT_TIMEOUT = 10; |
|
16
|
|
|
const DEFAULT_PATH = 'example/path'; |
|
17
|
|
|
const DEFAULT_DATA = '{"firstName": "Howdy", "lastName": "Doody"}'; |
|
18
|
|
|
const DEFAULT_PUSH_DATA = '{"firstName": "1skdSDdksdlisS"}'; |
|
19
|
|
|
|
|
20
|
|
|
const UPDATED_URI = 'https://myfirebaseStub.firebaseio.com/'; |
|
21
|
|
|
const UPDATED_TOKEN = 'MqL0c8tEmBeRLSYcygBrIanhU8Z2hULOFs9OKPdEp'; |
|
22
|
|
|
const UPDATED_TIMEOUT = 30; |
|
23
|
|
|
|
|
24
|
|
|
const INSECURE_URL = 'http://insecure.firebaseio.com'; |
|
25
|
|
|
const INVALID_DATA = '"firstName" "Howdy", "lastName": "Doody" "": '; |
|
26
|
|
|
const MISSING_DATA = ''; |
|
27
|
|
|
const NULL_DATA = null; |
|
28
|
|
|
|
|
29
|
|
|
public function setUp() |
|
30
|
|
|
{ |
|
31
|
|
|
$this->_firebaseStub = new FirebaseStub(self::DEFAULT_URL, self::DEFAULT_TOKEN); |
|
32
|
|
|
} |
|
33
|
|
|
|
|
34
|
|
|
public function testBaseURIInitializationOnInstantiation() |
|
35
|
|
|
{ |
|
36
|
|
|
$this->assertEquals(self::DEFAULT_TOKEN, $this->_firebaseStub->_token); |
|
37
|
|
|
} |
|
38
|
|
|
|
|
39
|
|
|
public function testSetBaseURI() |
|
40
|
|
|
{ |
|
41
|
|
|
$actualResponse = $this->_firebaseStub->setBaseURI(self::UPDATED_URI); |
|
42
|
|
|
$this->assertEquals(null, $actualResponse); |
|
43
|
|
|
|
|
44
|
|
|
$this->assertEquals(self::UPDATED_URI, $this->_firebaseStub->_baseURI); |
|
45
|
|
|
} |
|
46
|
|
|
|
|
47
|
|
|
public function testTokenInitializationOnInstantiation() |
|
48
|
|
|
{ |
|
49
|
|
|
$this->assertEquals(self::DEFAULT_TOKEN, $this->_firebaseStub->_token); |
|
50
|
|
|
} |
|
51
|
|
|
|
|
52
|
|
|
public function testSetToken() |
|
53
|
|
|
{ |
|
54
|
|
|
$actualResponse = $this->_firebaseStub->setToken(self::UPDATED_TOKEN); |
|
55
|
|
|
$this->assertEquals(null, $actualResponse); |
|
56
|
|
|
|
|
57
|
|
|
$this->assertEquals(self::UPDATED_TOKEN, $this->_firebaseStub->_token); |
|
58
|
|
|
} |
|
59
|
|
|
|
|
60
|
|
|
public function testTimeoutInitializationOnInstantiation() |
|
61
|
|
|
{ |
|
62
|
|
|
$this->assertEquals(self::DEFAULT_TIMEOUT, $this->_firebaseStub->_timeout); |
|
63
|
|
|
} |
|
64
|
|
|
|
|
65
|
|
|
public function testSetTimeout() |
|
66
|
|
|
{ |
|
67
|
|
|
$actualResponse = $this->_firebaseStub->setTimeout(self::UPDATED_TIMEOUT); |
|
68
|
|
|
$this->assertEquals(null, $actualResponse); |
|
69
|
|
|
|
|
70
|
|
|
$this->assertEquals(self::UPDATED_TIMEOUT, $this->_firebaseStub->_timeout); |
|
71
|
|
|
} |
|
72
|
|
|
|
|
73
|
|
|
public function testSet() |
|
74
|
|
|
{ |
|
75
|
|
|
$this->_firebaseStub->setResponse(self::DEFAULT_DATA); |
|
76
|
|
|
$actualResponse = $this->_firebaseStub->set(self::DEFAULT_PATH, self::DEFAULT_DATA); |
|
77
|
|
|
$this->assertEquals(self::DEFAULT_DATA, $actualResponse); |
|
78
|
|
|
} |
|
79
|
|
|
|
|
80
|
|
|
public function testPush() |
|
81
|
|
|
{ |
|
82
|
|
|
$this->_firebaseStub->setResponse(self::DEFAULT_PUSH_DATA); |
|
83
|
|
|
$actualResponse = $this->_firebaseStub->push(self::DEFAULT_PATH, self::DEFAULT_DATA); |
|
84
|
|
|
$this->assertEquals(self::DEFAULT_PUSH_DATA, $actualResponse); |
|
85
|
|
|
} |
|
86
|
|
|
|
|
87
|
|
|
public function testUpdate() |
|
88
|
|
|
{ |
|
89
|
|
|
$this->_firebaseStub->setResponse(self::DEFAULT_DATA); |
|
90
|
|
|
$actualResponse = $this->_firebaseStub->update(self::DEFAULT_PATH, self::DEFAULT_DATA); |
|
91
|
|
|
$this->assertEquals(self::DEFAULT_DATA, $actualResponse); |
|
92
|
|
|
} |
|
93
|
|
|
|
|
94
|
|
|
public function testDelete() |
|
95
|
|
|
{ |
|
96
|
|
|
$actualResponse = $this->_firebaseStub->delete(self::DEFAULT_PATH); |
|
97
|
|
|
$this->assertEquals(null, $actualResponse); |
|
98
|
|
|
} |
|
99
|
|
|
|
|
100
|
|
|
public function testInvalidBaseUri() |
|
101
|
|
|
{ |
|
102
|
|
|
$firebase = new FirebaseStub(self::INSECURE_URL); |
|
103
|
|
|
$response = $firebase->set(self::DEFAULT_PATH, self::DEFAULT_DATA); |
|
104
|
|
|
$this->assertEquals($this->_getErrorMessages('INSECURE_URL'), $response); |
|
105
|
|
|
} |
|
106
|
|
|
|
|
107
|
|
|
public function testMissingData() |
|
108
|
|
|
{ |
|
109
|
|
|
$response = $this->_firebaseStub->set(self::DEFAULT_PATH, self::MISSING_DATA); |
|
110
|
|
|
$this->assertEquals($this->_getErrorMessages('NO_DATA'), $response); |
|
111
|
|
|
} |
|
112
|
|
|
|
|
113
|
|
|
public function testNullData() |
|
114
|
|
|
{ |
|
115
|
|
|
$response = $this->_firebaseStub->set(self::DEFAULT_PATH, self::NULL_DATA); |
|
116
|
|
|
$this->assertEquals($this->_getErrorMessages('NO_DATA'), $response); |
|
117
|
|
|
} |
|
118
|
|
|
|
|
119
|
|
|
/** |
|
120
|
|
|
* @param string $errorCode |
|
121
|
|
|
*/ |
|
122
|
|
|
private function _getErrorMessages($errorCode) |
|
123
|
|
|
{ |
|
124
|
|
|
$errorMessages = Array( |
|
125
|
|
|
'INSECURE_URL' => 'Firebase does not support non-ssl traffic. Please try your request again over https.', |
|
126
|
|
|
'INVALID_JSON' => 'Invalid data; couldn\'t parse JSON object, array, or value. Perhaps you\'re using invalid characters in your key names.', |
|
127
|
|
|
'NO_DATA' => 'Missing data; Perhaps you forgot to send the data.' |
|
128
|
|
|
); |
|
129
|
|
|
|
|
130
|
|
|
return $errorMessages[$errorCode]; |
|
131
|
|
|
} |
|
132
|
|
|
} |
|
133
|
|
|
|
The PSR-1: Basic Coding Standard recommends that a file should either introduce new symbols, that is classes, functions, constants or similar, or have side effects. Side effects are anything that executes logic, like for example printing output, changing ini settings or writing to a file.
The idea behind this recommendation is that merely auto-loading a class should not change the state of an application. It also promotes a cleaner style of programming and makes your code less prone to errors, because the logic is not spread out all over the place.
To learn more about the PSR-1, please see the PHP-FIG site on the PSR-1.