Completed
Push — master ( 915aa4...b9392e )
by Harry
02:17
created

testAddingFormParamsOptionsWillBeIgnored()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 22
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 22
rs 9.2
c 0
b 0
f 0
cc 1
eloc 13
nc 1
nop 0
1
<?php
2
/**
3
 * This file is part of graze/gigya-client
4
 *
5
 * Copyright (c) 2016 Nature Delivered Ltd. <https://www.graze.com>
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 *
10
 * @license https://github.com/graze/gigya-client/blob/master/LICENSE.md
11
 * @link    https://github.com/graze/gigya-client
12
 */
13
14
namespace Graze\Gigya\Test\Unit;
15
16
use Exception;
17
use Graze\Gigya\Gigya;
18
use Graze\Gigya\Response\ResponseFactoryInterface;
19
use Graze\Gigya\Test\TestCase;
20
use Graze\Gigya\Test\TestFixtures;
21
use Graze\Gigya\Validation\ResponseValidatorInterface;
22
use GuzzleHttp\HandlerStack;
23
use GuzzleHttp\Psr7\Response;
24
use Mockery as m;
25
26
/**
27
 * @runTestsInSeparateProcesses
28
 * @preserveGlobalState disabled
29
 */
30
class GigyaTest extends TestCase
31
{
32
    /** @var mixed */
33
    private $factory;
34
    /** @var string */
35
    private $certPath;
36
    /** @var mixed */
37
    private $handlerStack;
38
    /** @var mixed */
39
    private $guzzleClient;
40
41
    public function setUp()
42
    {
43
        parent::setUp();
44
        $this->guzzleClient = m::mock('overload:GuzzleHttp\Client');
45
        $this->handlerStack = m::mock(new HandlerStack())->makePartial();
46
        $this->factory = m::mock(ResponseFactoryInterface::class);
47
        $this->certPath = realpath(__DIR__ . '/../../src/' . Gigya::CERTIFICATE_FILE);
48
    }
49
50
    /**
51
     * @param string      $key
52
     * @param string      $secret
53
     * @param string      $dc
54
     * @param string|null $userKey
55
     *
56
     * @return Gigya
57
     */
58
    public function createClient($key = 'key', $secret = 'secret', $dc = Gigya::DC_EU, $userKey = null)
59
    {
60
        $options = [
61
            'uidValidator' => false,
62
            'factory'      => $this->factory,
63
            'guzzle'       => ['handler' => $this->handlerStack],
64
        ];
65
66
        return new Gigya($key, $secret, $dc, $userKey, $options);
67
    }
68
69
    /**
70
     * @param string $fixtureName
71
     * @param string $uri
72
     * @param array  $getOptions
73
     *
74
     * @return mixed MockInterface and ResponseInterface
75
     */
76
    private function setupCall($fixtureName, $uri, array $getOptions)
77
    {
78
        $response = new Response(200, [], TestFixtures::getFixture($fixtureName));
79
80
        $this->guzzleClient->shouldReceive('post')
81
                           ->with(
82
                               $uri,
83
                               $getOptions
84
                           )
85
                           ->andReturn($response);
86
87
        $gigyaResponse = m::mock('Graze\Gigya\Response\ResponseInterface');
88
89
        $this->factory->shouldReceive('getResponse')
90
                      ->with($response)
91
                      ->andReturn($gigyaResponse);
92
93
        return $gigyaResponse;
94
    }
95
96
    public function testDefaultConstructor()
97
    {
98
        $client = new Gigya('key', 'secret');
99
        static::assertInstanceOf(Gigya::class, $client);
100
    }
101
102 View Code Duplication
    public function testConstructorConfig()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
103
    {
104
        $this->guzzleClient->shouldReceive('__construct')
105
                           ->once()
106
                           ->with(
107
                               [
108
                                   'handler' => $this->handlerStack,
109
                               ]
110
                           )
111
                           ->andReturn($this->guzzleClient);
112
113
        $response = new Response(200, [], TestFixtures::getFixture('account.getAccountInfo'));
114
115
        $this->guzzleClient->shouldReceive('post')
116
                           ->with(
117
                               'https://accounts.au1.gigya.com/accounts.getAccountInfo',
118
                               [
119
                                   'cert'        => 'some_cert.pem',
120
                                   'auth'        => 'oauth',
121
                                   'verify'      => $this->certPath,
122
                                   'form_params' => [],
123
                               ]
124
                           )
125
                           ->andReturn($response);
126
127
        $gigyaResponse = m::mock('Graze\Gigya\Response\ResponseInterface');
128
129
        $this->factory->shouldReceive('getResponse')
130
                      ->with($response)
131
                      ->andReturn($gigyaResponse);
132
133
        $config = [
134
            'auth'         => 'oauth',
135
            'uidValidator' => false,
136
            'factory'      => $this->factory,
137
            'guzzle'       => [
138
                'handler' => $this->handlerStack,
139
            ],
140
            'options'      => [
141
                'cert' => 'some_cert.pem',
142
            ],
143
        ];
144
        $client = new Gigya('key', 'secret', Gigya::DC_AU, null, $config);
145
146
        static::assertSame($gigyaResponse, $client->accounts()->getAccountInfo());
147
    }
148
149 View Code Duplication
    public function testOAuth2AuthConstructor()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
150
    {
151
        $this->guzzleClient->shouldReceive('__construct')
152
                           ->once()
153
                           ->with(
154
                               [
155
                                   'handler' => $this->handlerStack,
156
                               ]
157
                           )
158
                           ->andReturn($this->guzzleClient);
159
160
        $response = new Response(200, [], TestFixtures::getFixture('account.getAccountInfo'));
161
162
        $this->guzzleClient->shouldReceive('post')
163
                           ->with(
164
                               'https://accounts.au1.gigya.com/accounts.getAccountInfo',
165
                               [
166
                                   'cert'        => 'some_cert.pem',
167
                                   'auth'        => 'gigya-oauth2',
168
                                   'verify'      => $this->certPath,
169
                                   'form_params' => [],
170
                               ]
171
                           )
172
                           ->andReturn($response);
173
174
        $gigyaResponse = m::mock('Graze\Gigya\Response\ResponseInterface');
175
176
        $this->factory->shouldReceive('getResponse')
177
                      ->with($response)
178
                      ->andReturn($gigyaResponse);
179
180
        $config = [
181
            'auth'         => 'gigya-oauth2',
182
            'uidValidator' => false,
183
            'factory'      => $this->factory,
184
            'guzzle'       => [
185
                'handler' => $this->handlerStack,
186
            ],
187
            'options'      => [
188
                'cert' => 'some_cert.pem',
189
            ],
190
        ];
191
        $client = new Gigya('key', 'secret', Gigya::DC_AU, null, $config);
192
193
        static::assertSame($gigyaResponse, $client->accounts()->getAccountInfo());
194
    }
195
196 View Code Duplication
    public function testCredentialsAuthConstructor()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
197
    {
198
        $this->guzzleClient->shouldReceive('__construct')
199
                           ->with(
200
                               [
201
                                   'handler' => $this->handlerStack,
202
                               ]
203
                           )
204
                           ->once()
205
                           ->andReturn($this->guzzleClient);
206
207
        $response = new Response(200, [], TestFixtures::getFixture('account.getAccountInfo'));
208
209
        $this->guzzleClient->shouldReceive('post')
210
                           ->with(
211
                               'https://accounts.au1.gigya.com/accounts.getAccountInfo',
212
                               [
213
                                   'cert'        => 'some_cert.pem',
214
                                   'auth'        => 'credentials',
215
                                   'verify'      => $this->certPath,
216
                                   'form_params' => [],
217
                               ]
218
                           )
219
                           ->once()
220
                           ->andReturn($response);
221
222
        $gigyaResponse = m::mock('Graze\Gigya\Response\ResponseInterface');
223
224
        $this->factory->shouldReceive('getResponse')
225
                      ->with($response)
226
                      ->andReturn($gigyaResponse);
227
228
        $config = [
229
            'auth'         => 'credentials',
230
            'uidValidator' => false,
231
            'factory'      => $this->factory,
232
            'guzzle'       => [
233
                'handler' => $this->handlerStack,
234
            ],
235
            'options'      => [
236
                'cert' => 'some_cert.pem',
237
            ],
238
        ];
239
        $client = new Gigya('key', 'secret', Gigya::DC_AU, null, $config);
240
241
        static::assertSame($gigyaResponse, $client->accounts()->getAccountInfo());
242
    }
243
244
    public function testSettingKeyAndSecretWillPassToGuzzleClient()
245
    {
246
        $key = 'key' . rand(1, 1000);
247
        $secret = 'secret' . rand(1001, 2000002);
248
249
        $gigyaResponse = $this->setupCall(
250
            'accounts.getAccountInfo',
251
            'https://accounts.eu1.gigya.com/accounts.getAccountInfo',
252
            [
253
                'auth'        => 'gigya',
254
                'verify'      => $this->certPath,
255
                'form_params' => [],
256
            ]
257
        );
258
        $client = $this->createClient($key, $secret, Gigya::DC_EU, null);
259
        $client->setFactory($this->factory);
260
261
        $result = $client->accounts()->getAccountInfo([]);
262
263
        static::assertSame($gigyaResponse, $result);
264
    }
265
266 View Code Duplication
    public function testSettingDataCenterToAuWillCallAuUri()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
267
    {
268
        $gigyaResponse = $this->setupCall(
269
            'accounts.getAccountInfo',
270
            'https://accounts.au1.gigya.com/accounts.getAccountInfo',
271
            [
272
                'auth'        => 'gigya',
273
                'verify'      => $this->certPath,
274
                'form_params' => [],
275
            ]
276
        );
277
        $client = $this->createClient('key', 'secret', Gigya::DC_AU);
278
279
        $result = $client->accounts()->getAccountInfo([]);
280
281
        static::assertSame($gigyaResponse, $result);
282
    }
283
284 View Code Duplication
    public function testSettingDataCenterToUsWillCallUsUri()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
285
    {
286
        $gigyaResponse = $this->setupCall(
287
            'accounts.getAccountInfo',
288
            'https://accounts.us1.gigya.com/accounts.getAccountInfo',
289
            [
290
                'auth'        => 'gigya',
291
                'verify'      => $this->certPath,
292
                'form_params' => [],
293
            ]
294
        );
295
        $client = $this->createClient('key', 'secret', Gigya::DC_US);
296
297
        $result = $client->accounts()->getAccountInfo([]);
298
299
        static::assertSame($gigyaResponse, $result);
300
    }
301
302 View Code Duplication
    public function testSettingTheUserKeyWillPassItThroughToGuzzle()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
303
    {
304
        $gigyaResponse = $this->setupCall(
305
            'accounts.getAccountInfo',
306
            'https://accounts.eu1.gigya.com/accounts.getAccountInfo',
307
            [
308
                'auth'        => 'gigya',
309
                'verify'      => $this->certPath,
310
                'form_params' => [],
311
            ]
312
        );
313
        $client = $this->createClient('key', 'userSecret', Gigya::DC_EU, 'userKey');
314
        $client->setFactory($this->factory);
315
316
        $result = $client->accounts()->getAccountInfo([]);
317
318
        static::assertSame($gigyaResponse, $result);
319
    }
320
321 View Code Duplication
    public function testPassingParamsThroughToTheMethodWillPassThroughToGuzzle()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
322
    {
323
        $gigyaResponse = $this->setupCall(
324
            'accounts.getAccountInfo',
325
            'https://socialize.eu1.gigya.com/socialize.notifyLogin',
326
            [
327
                'auth'        => 'gigya',
328
                'verify'      => $this->certPath,
329
                'form_params' => [
330
                    'param' => 'passedThrough',
331
                ],
332
            ]
333
        );
334
        $client = $this->createClient();
335
336
        $result = $client->socialize()->notifyLogin(['param' => 'passedThrough']);
337
338
        static::assertSame($gigyaResponse, $result);
339
    }
340
341 View Code Duplication
    public function testCallingChildMethodsCallTheCorrectUri()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
342
    {
343
        $gigyaResponse = $this->setupCall(
344
            'accounts.getAccountInfo',
345
            'https://fidm.eu1.gigya.com/fidm.saml.idp.getConfig',
346
            [
347
                'auth'        => 'gigya',
348
                'verify'      => $this->certPath,
349
                'form_params' => [
350
                    'params' => 'passedThrough',
351
                ],
352
            ]
353
        );
354
        $client = $this->createClient();
355
356
        $result = $client->saml()->idp()->getConfig(['params' => 'passedThrough']);
357
358
        static::assertSame($gigyaResponse, $result);
359
    }
360
361 View Code Duplication
    public function testTfaCallingChildMethodsCallTheCorrectUri()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
362
    {
363
        $gigyaResponse = $this->setupCall(
364
            'accounts.getAccountInfo',
365
            'https://accounts.eu1.gigya.com/accounts.tfa.getCertificate',
366
            [
367
                'auth'        => 'gigya',
368
                'verify'      => $this->certPath,
369
                'form_params' => [
370
                    'params' => 'passedThrough',
371
                ],
372
            ]
373
        );
374
        $client = $this->createClient();
375
376
        $result = $client->accounts()->tfa()->getCertificate(['params' => 'passedThrough']);
377
378
        static::assertSame($gigyaResponse, $result);
379
    }
380
381
    /**
382
     * @dataProvider clientCallDataProvider
383
     *
384
     * @param string $namespace
385
     * @param string $method
386
     * @param string $expectedUri
387
     */
388
    public function testClientCalls($namespace, $method, $expectedUri)
389
    {
390
        $gigyaResponse = $this->setupCall(
391
            'accounts.getAccountInfo',
392
            $expectedUri,
393
            [
394
                'auth'        => 'gigya',
395
                'verify'      => $this->certPath,
396
                'form_params' => [
397
                    'params' => 'passedThrough',
398
                ],
399
            ]
400
        );
401
        $client = $this->createClient();
402
403
        $result = $client->{$namespace}()->{$method}(['params' => 'passedThrough']);
404
405
        static::assertSame($gigyaResponse, $result);
406
    }
407
408
    /**
409
     * @expectedException \BadMethodCallException
410
     * @expectedExceptionMessage No Arguments should be supplied for Gigya call
411
     */
412
    public function testCallingMagicMethodWithArgumentsThrowsAnException()
413
    {
414
        $client = $this->createClient();
415
        $client->custom('params');
0 ignored issues
show
Documentation Bug introduced by
The method custom does not exist on object<Graze\Gigya\Gigya>? Since you implemented __call, maybe consider adding a @method annotation.

If you implement __call and you know which methods are available, you can improve IDE auto-completion and static analysis by adding a @method annotation to the class.

This is often the case, when __call is implemented by a parent class and only the child class knows which methods exist:

class ParentClass {
    private $data = array();

    public function __call($method, array $args) {
        if (0 === strpos($method, 'get')) {
            return $this->data[strtolower(substr($method, 3))];
        }

        throw new \LogicException(sprintf('Unsupported method: %s', $method));
    }
}

/**
 * If this class knows which fields exist, you can specify the methods here:
 *
 * @method string getName()
 */
class SomeClass extends ParentClass { }
Loading history...
416
    }
417
418 View Code Duplication
    public function testAddingOptionsPassesThroughTheOptionsToGuzzle()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
419
    {
420
        $gigyaResponse = $this->setupCall(
421
            'accounts.getAccountInfo',
422
            'https://accounts.eu1.gigya.com/accounts.getAccountInfo',
423
            [
424
                'auth'        => 'gigya',
425
                'verify'      => $this->certPath,
426
                'form_params' => [
427
                    'params' => 'passedThrough',
428
                ],
429
                'option1'     => 'value1',
430
                'option2'     => false,
431
            ]
432
        );
433
        $client = $this->createClient();
434
435
        $client->addOption('option1', 'value1');
436
        $client->addOption('option2', false);
437
438
        $result = $client->accounts()->getAccountInfo(['params' => 'passedThrough']);
439
440
        static::assertSame($gigyaResponse, $result);
441
    }
442
443 View Code Duplication
    public function testAddingOptionsWithASingleCallPassesThroughTheOptionsToGuzzle()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
444
    {
445
        $gigyaResponse = $this->setupCall(
446
            'accounts.getAccountInfo',
447
            'https://accounts.eu1.gigya.com/accounts.getAccountInfo',
448
            [
449
                'auth'        => 'gigya',
450
                'verify'      => $this->certPath,
451
                'form_params' => [
452
                    'params' => 'passedThrough',
453
                ],
454
                'option1'     => 'value1',
455
                'option2'     => true,
456
            ]
457
        );
458
        $client = $this->createClient();
459
460
        $client->addOptions(
461
            [
462
                'option1' => 'value1',
463
                'option2' => true,
464
            ]
465
        );
466
467
        $result = $client->accounts()->getAccountInfo(['params' => 'passedThrough']);
468
469
        static::assertSame($gigyaResponse, $result);
470
    }
471
472 View Code Duplication
    public function testAddingTheSameOptionAgainWillTakeTheLastValueSet()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
473
    {
474
        $gigyaResponse = $this->setupCall(
475
            'accounts.getAccountInfo',
476
            'https://accounts.eu1.gigya.com/accounts.getAccountInfo',
477
            [
478
                'auth'        => 'gigya',
479
                'verify'      => $this->certPath,
480
                'form_params' => [
481
                    'params' => 'passedThrough',
482
                ],
483
                'option1'     => false,
484
            ]
485
        );
486
        $client = $this->createClient();
487
488
        $client->addOption('option1', 'value1');
489
        $client->addOption('option1', false);
490
491
        $result = $client->accounts()->getAccountInfo(['params' => 'passedThrough']);
492
493
        static::assertSame($gigyaResponse, $result);
494
    }
495
496 View Code Duplication
    public function testAddingTheSameOptionAgainWithAddOptionsWillTakeTheLastValueSet()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
497
    {
498
        $gigyaResponse = $this->setupCall(
499
            'accounts.getAccountInfo',
500
            'https://accounts.eu1.gigya.com/accounts.getAccountInfo',
501
            [
502
                'auth'        => 'gigya',
503
                'verify'      => $this->certPath,
504
                'form_params' => [
505
                    'params' => 'passedThrough',
506
                ],
507
                'option1'     => true,
508
            ]
509
        );
510
        $client = $this->createClient();
511
512
        $client->addOption('option1', 'value1');
513
        $client->addOptions(['option1' => true]);
514
515
        $result = $client->accounts()->getAccountInfo(['params' => 'passedThrough']);
516
517
        static::assertSame($gigyaResponse, $result);
518
    }
519
520
    public function testAddingFormParamsOptionsWillBeIgnored()
521
    {
522
        $gigyaResponse = $this->setupCall(
523
            'accounts.getAccountInfo',
524
            'https://accounts.eu1.gigya.com/accounts.getAccountInfo',
525
            [
526
                'auth'        => 'gigya',
527
                'verify'      => 'notAFile',
528
                'form_params' => [
529
                    'params' => 'passedThrough',
530
                ],
531
            ]
532
        );
533
        $client = $this->createClient();
534
535
        $client->addOption('form_params', 'random');
536
        $client->addOption('verify', 'notAFile');
537
538
        $result = $client->accounts()->getAccountInfo(['params' => 'passedThrough']);
539
540
        static::assertSame($gigyaResponse, $result);
541
    }
542
543 View Code Duplication
    public function testSettingOptionsAsPartOfTheQuery()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
544
    {
545
        $gigyaResponse = $this->setupCall(
546
            'accounts.getAccountInfo',
547
            'https://accounts.eu1.gigya.com/accounts.getAccountInfo',
548
            [
549
                'auth'        => 'gigya',
550
                'verify'      => $this->certPath,
551
                'form_params' => [
552
                    'params' => 'passedThrough',
553
                ],
554
                'custom'      => 'value',
555
            ]
556
        );
557
        $client = $this->createClient();
558
559
        $result = $client->accounts()->getAccountInfo(['params' => 'passedThrough'], ['custom' => 'value']);
560
561
        static::assertSame($gigyaResponse, $result);
562
    }
563
564 View Code Duplication
    public function testSettingGlobalAndRequestOptionsTheRequestOptionsOverrideGlobalOptions()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
565
    {
566
        $gigyaResponse = $this->setupCall(
567
            'accounts.getAccountInfo',
568
            'https://accounts.eu1.gigya.com/accounts.getAccountInfo',
569
            [
570
                'auth'        => 'gigya',
571
                'verify'      => $this->certPath,
572
                'form_params' => [
573
                    'params' => 'passedThrough',
574
                ],
575
                'custom'      => 'value',
576
            ]
577
        );
578
        $client = $this->createClient();
579
580
        $client->addOption('custom', 'notUsed');
581
582
        $result = $client->accounts()->getAccountInfo(['params' => 'passedThrough'], ['custom' => 'value']);
583
584
        static::assertSame($gigyaResponse, $result);
585
    }
586
587
    public function testSettingRequestOptionsDoOverrideTheParams()
588
    {
589
        $gigyaResponse = $this->setupCall(
590
            'accounts.getAccountInfo',
591
            'https://accounts.eu1.gigya.com/accounts.getAccountInfo',
592
            [
593
                'auth'        => 'gigya',
594
                'verify'      => false,
595
                'form_params' => [
596
                    'params' => 'passedThrough',
597
                ],
598
            ]
599
        );
600
        $client = $this->createClient();
601
602
        $result = $client->accounts()->getAccountInfo(
603
            ['params' => 'passedThrough'],
604
            ['form_params' => 'value', 'verify' => false]
605
        );
606
607
        static::assertSame($gigyaResponse, $result);
608
    }
609
610 View Code Duplication
    public function testSettingParamsWillNotOverwriteTheDefaultParams()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
611
    {
612
        $gigyaResponse = $this->setupCall(
613
            'accounts.getAccountInfo',
614
            'https://accounts.eu1.gigya.com/accounts.getAccountInfo',
615
            [
616
                'auth'        => 'gigya',
617
                'verify'      => $this->certPath,
618
                'form_params' => [
619
                    'secret' => 'newSecret',
620
                ],
621
            ]
622
        );
623
        $client = $this->createClient();
624
625
        $result = $client->accounts()->getAccountInfo(
626
            ['secret' => 'newSecret']
627
        );
628
629
        static::assertSame($gigyaResponse, $result);
630
    }
631
632 View Code Duplication
    public function testCallingAChainWillCallThatChain()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
633
    {
634
        $gigyaResponse = $this->setupCall(
635
            'accounts.getAccountInfo',
636
            'https://fidm.eu1.gigya.com/fidm.saml.idp.getConfig',
637
            [
638
                'auth'        => 'gigya',
639
                'verify'      => $this->certPath,
640
                'form_params' => [
641
                    'secret' => 'newSecret',
642
                ],
643
            ]
644
        );
645
        $client = $this->createClient();
646
647
        $result = $client->fidm()->{'saml.idp.getConfig'}(
0 ignored issues
show
Documentation Bug introduced by
The method fidm does not exist on object<Graze\Gigya\Gigya>? Since you implemented __call, maybe consider adding a @method annotation.

If you implement __call and you know which methods are available, you can improve IDE auto-completion and static analysis by adding a @method annotation to the class.

This is often the case, when __call is implemented by a parent class and only the child class knows which methods exist:

class ParentClass {
    private $data = array();

    public function __call($method, array $args) {
        if (0 === strpos($method, 'get')) {
            return $this->data[strtolower(substr($method, 3))];
        }

        throw new \LogicException(sprintf('Unsupported method: %s', $method));
    }
}

/**
 * If this class knows which fields exist, you can specify the methods here:
 *
 * @method string getName()
 */
class SomeClass extends ParentClass { }
Loading history...
648
            ['secret' => 'newSecret']
649
        );
650
651
        static::assertSame($gigyaResponse, $result);
652
    }
653
654
    public function testWillCallAValidator()
655
    {
656
        $response = $this->setupCall(
657
            'accounts.getAccountInfo',
658
            'https://accounts.eu1.gigya.com/accounts.getAccountInfo',
659
            [
660
                'auth'        => 'gigya',
661
                'verify'      => $this->certPath,
662
                'form_params' => [],
663
            ]
664
        );
665
        $client = $this->createClient();
666
667
        $validator = m::mock(ResponseValidatorInterface::class);
668
        $client->addValidator($validator);
669
        $validator->shouldReceive('canValidate')
670
                  ->with($response)
671
                  ->andReturn(true);
672
        $validator->shouldReceive('assert')
673
                  ->with($response)
674
                  ->andReturn(true);
675
676
        static::assertSame($response, $client->accounts()->getAccountInfo());
677
    }
678
679
    public function tesWillCallMultipleValidators()
680
    {
681
        $response = $this->setupCall(
682
            'accounts.getAccountInfo',
683
            'https://accounts.eu1.gigya.com/accounts.getAccountInfo',
684
            [
685
                'auth'        => 'gigya',
686
                'verify'      => $this->certPath,
687
                'form_params' => [],
688
            ]
689
        );
690
        $client = $this->createClient();
691
692
        $validator = m::mock(ResponseValidatorInterface::class);
693
        $client->addValidator($validator);
694
        $validator->shouldReceive('canValidate')
695
                  ->with($response)
696
                  ->andReturn(true);
697
        $validator->shouldReceive('assert')
698
                  ->with($response)
699
                  ->andReturn(true);
700
        $validator2 = m::mock(ResponseValidatorInterface::class);
701
        $client->addValidator($validator2);
702
        $validator2->shouldReceive('canValidate')
703
                   ->with($response)
704
                   ->andReturn(true);
705
        $validator2->shouldReceive('assert')
706
                   ->with($response)
707
                   ->andReturn(true);
708
709
        static::assertSame($response, $client->accounts()->getAccountInfo());
710
    }
711
712
    /**
713
     * @expectedException \Exception
714
     */
715
    public function testTheValidatorThrowingAnExceptionWillPassthrough()
716
    {
717
        $response = $this->setupCall(
718
            'accounts.getAccountInfo',
719
            'https://accounts.eu1.gigya.com/accounts.getAccountInfo',
720
            [
721
                'auth'        => 'gigya',
722
                'verify'      => $this->certPath,
723
                'form_params' => [],
724
            ]
725
        );
726
        $client = $this->createClient();
727
728
        $validator = m::mock(ResponseValidatorInterface::class);
729
        $validator2 = m::mock(ResponseValidatorInterface::class);
730
        $client->addValidator($validator);
731
        $client->addValidator($validator2);
732
        $exception = new Exception();
733
        $validator->shouldReceive('canValidate')
734
                  ->with($response)
735
                  ->andReturn(true);
736
        $validator->shouldReceive('assert')
737
                  ->with($response)
738
                  ->andThrow($exception);
739
740
        $client->accounts()->getAccountInfo();
741
    }
742
743
    public function testTheValidatorWillOnlyCallAssertWhenItCanValidate()
744
    {
745
        $response = $this->setupCall(
746
            'accounts.getAccountInfo',
747
            'https://accounts.eu1.gigya.com/accounts.getAccountInfo',
748
            [
749
                'auth'        => 'gigya',
750
                'verify'      => $this->certPath,
751
                'form_params' => [],
752
            ]
753
        );
754
        $client = $this->createClient();
755
756
        $validator = m::mock(ResponseValidatorInterface::class);
757
        $validator2 = m::mock(ResponseValidatorInterface::class);
758
        $client->addValidator($validator);
759
        $client->addValidator($validator2);
760
        $validator->shouldReceive('canValidate')
761
                  ->with($response)
762
                  ->andReturn(true);
763
        $validator->shouldReceive('assert')
764
                  ->with($response)
765
                  ->andReturn(true);
766
        $validator2->shouldReceive('canValidate')
767
                   ->with($response)
768
                   ->andReturn(false);
769
770
        static::assertSame($response, $client->accounts()->getAccountInfo());
771
    }
772
773
    public function testRemoveSubscriberWillDetachFromEmitter()
774
    {
775
        $response = $this->setupCall(
776
            'accounts.getAccountInfo',
777
            'https://accounts.eu1.gigya.com/accounts.getAccountInfo',
778
            [
779
                'auth'        => 'gigya',
780
                'verify'      => $this->certPath,
781
                'form_params' => [],
782
            ]
783
        );
784
        $client = $this->createClient();
785
786
        static::assertSame($response, $client->accounts()->getAccountInfo());
787
788
        $fn = function (callable $handler) {
789
            return $handler;
790
        };
791
        $this->handlerStack->shouldReceive('push')
792
                           ->with($fn)
793
                           ->once();
794
795
        $client->addHandler($fn);
796
797
        $this->handlerStack->shouldReceive('remove')
798
                           ->with($fn)
799
                           ->once();
800
801
        $client->removeHandler($fn);
802
    }
803
804
    /**
805
     * @return array
806
     */
807
    public function clientCallDataProvider()
808
    {
809
        return [
810
            ['accounts', 'getAccountInfo', 'https://accounts.eu1.gigya.com/accounts.getAccountInfo'],
811
            ['accounts', 'tfa.getCertificate', 'https://accounts.eu1.gigya.com/accounts.tfa.getCertificate'],
812
            ['audit', 'search', 'https://audit.eu1.gigya.com/audit.search'],
813
            ['comments', 'analyzeMediaItem', 'https://comments.eu1.gigya.com/comments.analyzeMediaItem'],
814
            ['dataStore', 'get', 'https://ds.eu1.gigya.com/ds.get'],
815
            ['ds', 'get', 'https://ds.eu1.gigya.com/ds.get'],
816
            ['gameMechanics', 'getChallengeStatus', 'https://gm.eu1.gigya.com/gm.getChallengeStatus'],
817
            ['gm', 'getChallengeStatus', 'https://gm.eu1.gigya.com/gm.getChallengeStatus'],
818
            ['identityStorage', 'getSchema', 'https://ids.eu1.gigya.com/ids.getSchema'],
819
            ['ids', 'getSchema', 'https://ids.eu1.gigya.com/ids.getSchema'],
820
            ['reports', 'getGMStats', 'https://reports.eu1.gigya.com/reports.getGMStats'],
821
            ['saml', 'setConfig', 'https://fidm.eu1.gigya.com/fidm.saml.setConfig'],
822
            ['fidm', 'saml.setConfig', 'https://fidm.eu1.gigya.com/fidm.saml.setConfig'],
823
            ['saml', 'idp.getConfig', 'https://fidm.eu1.gigya.com/fidm.saml.idp.getConfig'],
824
            ['fidm', 'saml.idp.getConfig', 'https://fidm.eu1.gigya.com/fidm.saml.idp.getConfig'],
825
            ['socialize', 'checkin', 'https://socialize.eu1.gigya.com/socialize.checkin'],
826
        ];
827
    }
828
}
829