Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 185
0.00% covered (danger)
0.00%
0 / 18
CRAP
0.00% covered (danger)
0.00%
0 / 1
TypesTest
0.00% covered (danger)
0.00%
0 / 184
0.00% covered (danger)
0.00%
0 / 18
506
0.00% covered (danger)
0.00%
0 / 1
 setUpBeforeClass
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 tearDownAfterClass
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 verifyClassMembers
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
6
 verifyClassConstants
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
6
 verifyObjectTypes
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
12
 testMessageType
0.00% covered (danger)
0.00%
0 / 10
0.00% covered (danger)
0.00%
0 / 1
2
 testPresenceMessageType
0.00% covered (danger)
0.00%
0 / 17
0.00% covered (danger)
0.00%
0 / 1
2
 testTokenRequestType
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
2
 testTokenDetailsType
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
2
 testStatsType
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 1
2
 testErrorInfoType
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 testClientOptionsType
0.00% covered (danger)
0.00%
0 / 29
0.00% covered (danger)
0.00%
0 / 1
2
 testAuthOptionsType
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
2
 testTokenParamsType
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
2
 testChannelOptionsType
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 testCipherParamsType
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
2
 testStatsTypes
0.00% covered (danger)
0.00%
0 / 46
0.00% covered (danger)
0.00%
0 / 1
2
 testHttpPaginatedResponseType
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2namespace tests;
3use Ably\AblyRest;
4use Ably\Auth;
5use Ably\Exceptions\AblyException;
6
7require_once __DIR__ . '/factories/TestApp.php';
8
9class TypesTest extends \PHPUnit_Framework_TestCase {
10
11    public static function setUpBeforeClass() {
12    }
13
14    public static function tearDownAfterClass() {
15    }
16
17    protected function verifyClassMembers( $class, $expectedMembers ) {
18        $valid = true;
19        foreach( $expectedMembers as $member ) {
20            $this->assertTrue( property_exists( $class, $member ), "Expected class `$class` to contain a field named `$member`." );
21        }
22    }
23
24    protected function verifyClassConstants( $class, $expectedMembers ) {
25        foreach( $expectedMembers as $member => $value ) {
26            $this->assertEquals( $value, constant( "$class::$member" ),
27                "Expected class `$class` to have a constant `$member` with a value of `$value`."
28            );
29        }
30    }
31
32    protected function verifyObjectTypes( $obj, $expectedTypes ) {
33        foreach( $obj as $key => $value ) {
34            if ( gettype( $value ) == 'object' ) {
35                $this->assertEquals( $expectedTypes[$key], get_class( $value ),
36                    "Expected object (".get_class($obj).") to contain a member `$key` of type `".$expectedTypes[$key]."`."
37                );
38            } else {
39                $this->assertEquals( $expectedTypes[$key], gettype( $value ),
40                    "Expected object (".get_class($obj).") to contain a member `$key` of type `".$expectedTypes[$key]."`."
41                );
42            }
43        }
44    }
45
46    public function testMessageType() {
47        $this->verifyClassMembers( '\Ably\Models\Message', [
48            'id',
49            'clientId',
50            'connectionId',
51            'connectionKey',
52            'name',
53            'data',
54            'encoding',
55            'timestamp',
56        ] );
57    }
58
59    public function testPresenceMessageType() {
60        $this->verifyClassMembers( '\Ably\Models\PresenceMessage', [
61            'id',
62            'action',
63            'clientId',
64            'connectionId',
65            'data',
66            'encoding',
67            'timestamp',
68            'memberKey'
69        ] );
70
71        $this->verifyClassConstants( '\Ably\Models\PresenceMessage', [
72            'ABSENT'  => 0,
73            'PRESENT' => 1,
74            'ENTER'   => 2,
75            'LEAVE'   => 3,
76            'UPDATE'  => 4
77        ] );
78    }
79
80    public function testTokenRequestType() {
81        $this->verifyClassMembers( '\Ably\Models\TokenRequest', [
82            'keyName',
83            'clientId',
84            'nonce',
85            'mac',
86            'capability',
87            'ttl',
88        ] );
89    }
90
91    public function testTokenDetailsType() {
92        $this->verifyClassMembers( '\Ably\Models\TokenDetails', [
93            'token',
94            'expires',
95            'issued',
96            'capability',
97            'clientId',
98        ] );
99    }
100
101    public function testStatsType() {
102        $this->verifyClassMembers( '\Ably\Models\Stats', [
103            'all',
104            'apiRequests',
105            'channels',
106            'connections',
107            'inbound',
108            'intervalGranularity',
109            'intervalId',
110            'intervalTime',
111            'outbound',
112            'persisted',
113            'tokenRequests'
114        ] );
115    }
116
117    public function testErrorInfoType() {
118        $this->verifyClassMembers( '\Ably\Models\ErrorInfo', [
119            'code',
120            'statusCode',
121            'message',
122        ] );
123    }
124
125    public function testClientOptionsType() {
126        $this->verifyClassMembers( '\Ably\Models\ClientOptions', [
127            'clientId',
128            'logLevel',
129            'logHandler',
130            'tls',
131            'useBinaryProtocol',
132            'key',
133            'token',
134            'tokenDetails',
135            'useTokenAuth',
136            'authCallback',
137            'authUrl',
138            'authMethod',
139            'authHeaders',
140            'authParams',
141            'queryTime',
142            'environment',
143            'restHost',
144            'port',
145            'tlsPort',
146            'httpOpenTimeout',
147            'httpRequestTimeout',
148            'httpMaxRetryCount',
149        ] );
150
151        $co = new \Ably\Models\ClientOptions();
152        $this->assertEquals( 4000, $co->httpOpenTimeout );
153        $this->assertEquals( 10000, $co->httpRequestTimeout );
154        $this->assertEquals( 3, $co->httpMaxRetryCount );
155        $this->assertEquals( 15000, $co->httpMaxRetryDuration );
156    }
157
158    public function testAuthOptionsType() {
159        $this->verifyClassMembers( '\Ably\Models\ClientOptions', [
160            'key',
161            'authCallback',
162            'authUrl',
163            'authMethod',
164            'authHeaders',
165            'authParams',
166            'queryTime',
167        ] );
168    }
169
170    public function testTokenParamsType() {
171        $this->verifyClassMembers( '\Ably\Models\TokenParams', [
172            'ttl',
173            'capability',
174            'clientId',
175            'timestamp',
176        ] );
177    }
178
179    public function testChannelOptionsType() {
180        $this->verifyClassMembers( '\Ably\Models\ChannelOptions', [
181            'cipher',
182        ] );
183    }
184
185    public function testCipherParamsType() {
186        $this->verifyClassMembers( '\Ably\Models\CipherParams', [
187            'algorithm',
188            'key',
189            'keyLength',
190            'mode'
191        ] );
192    }
193
194    public function testStatsTypes() {
195        $stats = new \Ably\Models\Stats();
196        $this->verifyObjectTypes( $stats, [
197            'all'                 => 'Ably\Models\Stats\MessageTypes',
198            'inbound'             => 'Ably\Models\Stats\MessageTraffic',
199            'outbound'            => 'Ably\Models\Stats\MessageTraffic',
200            'persisted'           => 'Ably\Models\Stats\MessageTypes',
201            'connections'         => 'Ably\Models\Stats\ConnectionTypes',
202            'channels'            => 'Ably\Models\Stats\ResourceCount',
203            'apiRequests'         => 'Ably\Models\Stats\RequestCount',
204            'tokenRequests'       => 'Ably\Models\Stats\RequestCount',
205            'intervalId'          => 'string',
206            'intervalGranularity' => 'string',
207            'intervalTime'        => 'integer',
208        ] );
209
210        // verify MessageTypes
211        $this->verifyObjectTypes( $stats->all, [
212            'all'      => 'Ably\Models\Stats\MessageCount',
213            'messages' => 'Ably\Models\Stats\MessageCount',
214            'presence' => 'Ably\Models\Stats\MessageCount',
215        ] );
216
217        // verify MessageCount
218        $this->verifyObjectTypes( $stats->all->all, [
219            'count' => 'integer',
220            'data'  => 'integer',
221        ] );
222
223        // verify MessageTraffic
224        $this->verifyObjectTypes( $stats->inbound, [
225            'all'      => 'Ably\Models\Stats\MessageTypes',
226            'realtime' => 'Ably\Models\Stats\MessageTypes',
227            'rest'     => 'Ably\Models\Stats\MessageTypes',
228            'webhook'  => 'Ably\Models\Stats\MessageTypes',
229        ] );
230
231        // verify ConnectionTypes
232        $this->verifyObjectTypes( $stats->connections, [
233            'all'   => 'Ably\Models\Stats\ResourceCount',
234            'plain' => 'Ably\Models\Stats\ResourceCount',
235            'tls'   => 'Ably\Models\Stats\ResourceCount',
236        ] );
237
238        // verify ResourceCount
239        $this->verifyObjectTypes( $stats->connections->all, [
240            'mean'    => 'integer',
241            'min'     => 'integer',
242            'opened'  => 'integer',
243            'peak'    => 'integer',
244            'refused' => 'integer',
245        ] );
246
247        // verify RequestCount
248        $this->verifyObjectTypes( $stats->apiRequests, [
249            'failed'    => 'integer',
250            'refused'   => 'integer',
251            'succeeded' => 'integer',
252        ] );
253    }
254
255    public function testHttpPaginatedResponseType() {
256        $this->verifyClassMembers( '\Ably\Models\HttpPaginatedResponse', [
257            'items',
258            'statusCode',
259            'success',
260            'errorCode',
261            'errorMessage',
262            'headers',
263        ] );
264    }
265}