Completed
Pull Request — master (#201)
by
unknown
01:40
created

TestCase::readJsonFile()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
c 0
b 0
f 0
nc 1
nop 1
dl 0
loc 4
rs 10
1
<?php
2
3
namespace Moip\Tests;
4
5
use Moip\Auth\OAuth;
6
use Moip\Moip;
7
use Moip\Resource\Customer;
8
use Moip\Resource\Orders;
9
use PHPUnit_Framework_TestCase;
10
use Requests_Response;
11
12
/**
13
 * class TestCase.
14
 */
15
abstract class TestCase extends PHPUnit_Framework_TestCase
16
{
17
    /**
18
     * Variables representing the test modes. On MOCK mode no http request will be made.
19
     * In SANDBOX mode HTTP requests will be made to the Moip::SANDBOX_ENDPOINT, the authentication information
20
     * is retrieved from the MOIP_TOKEN and MOIP_KEY environment variables.
21
     */
22
    const MOCK = 'mock';
23
    const SANDBOX = 'sandbox';
24
25
    /**
26
     * Intance of \Moip\Moip.
27
     *
28
     * @var \Moip\Moip
29
     * */
30
    protected $moip;
31
32
    /**
33
     * @var string current format for dates.
34
     */
35
    protected $date_format = 'Y-m-d';
36
37
    /**
38
     * @var string date used for testing.
39
     */
40
    protected $date_string = '1989-06-01';
41
    //todo: add the ability to use the play(https://github.com/rodrigosaito/mockwebserver-player) files from the jada sdk
42
    //the two responses below were based on the moip Java sdk's test files (https://github.com/moip/moip-sdk-java/)
43
    /**
44
     * @var string response from the client moip API.
45
     */
46
    protected $body_client;
47
48
    /**
49
     * @var string response from the order moip API.
50
     */
51
    protected $body_order;
52
53
    /**
54
     * @var string response from moip API.
55
     */
56
    protected $body_cc_pay_pci;
57
58
    /**
59
     * @var string response from moip API.
60
     */
61
    protected $body_cc_pay_pci_store;
62
63
    /**
64
     * @var string response from moip API.
65
     */
66
    protected $body_cc_pay_pci_escrow;
67
68
    /**
69
     * @var string response from moip API.
70
     */
71
    protected $body_release_escrow;
72
73
    /**
74
     * @var string response from moip API.
75
     */
76
    protected $body_billet_pay;
77
78
    /**
79
     * @var string response from moip API.
80
     */
81
    protected $body_refund_full_bankaccount;
82
83
    /**
84
     * @var string response from moip API.
85
     */
86
    protected $body_refund_partial_bankaccount;
87
88
    /**
89
     * @var string response from moip API.
90
     */
91
    protected $body_notification_preference;
92
93
    /**
94
     * @var string response from moip API.
95
     */
96
    protected $body_moip_account;
97
98
    /**
99
     * @var string response from moip API.
100
     */
101
    protected $body_order_list;
102
103
    /**
104
     * @var string response from moip API.
105
     */
106
    protected $body_notification_list;
107
108
    /**
109
     * @var string response from moip API.
110
     */
111
    protected $body_transfers_create;
112
113
    /**
114
     * @var string response from moip API.
115
     */
116
    protected $body_transfers_list;
117
118
    /**
119
     * @var string response from moip API.
120
     */
121
    protected $body_transfers_revert;
122
123
    /**
124
     * @var string holds the last generated customer ownId. In mock mode it'll be always the default, but it changes on sandbox mode.
125
     */
126
    protected $last_cus_id = 'meu_id_customer';
127
128
    /**
129
     * @var string same as `$last_cus_id` but for orders.
130
     *
131
     * @see $last_cus_id
132
     */
133
    protected $last_ord_id = 'meu_id_pedido';
134
    protected $sandbox_mock = self::MOCK;
135
136
    public function __construct()
137
    {
138
        parent::__construct();
139
140
        $this->body_client = $this->readJsonFile('jsons/customer/create');
141
142
        $this->body_order = $this->readJsonFile('jsons/order/create');
143
144
        $this->body_cc_pay_pci = $this->readJsonFile('jsons/payment/create_cc_pci');
145
146
        $this->body_cc_pay_pci_store = $this->readJsonFile('jsons/payment/create_cc_pci_store');
147
148
        $this->body_cc_pay_pci_escrow = $this->readJsonFile('jsons/payment/create_cc_pci_escrow');
149
150
        $this->body_release_escrow = $this->readJsonFile('jsons/escrow/release');
151
152
        $this->body_billet_pay = $this->readJsonFile('jsons/payment/create_billet');
153
154
        $this->body_billet_multipay = $this->readJsonFile('jsons/multipayment/create_billet');
0 ignored issues
show
Bug introduced by
The property body_billet_multipay does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
155
156
        $this->body_cc_multipay = $this->readJsonFile('jsons/multipayment/create_cc');
0 ignored issues
show
Bug introduced by
The property body_cc_multipay does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
157
158
        $this->body_refund_full_bankaccount = $this->readJsonFile('jsons/refund/full_bankaccount');
159
160
        $this->body_refund_partial_bankaccount = $this->readJsonFile('jsons/refund/partial_bankaccount');
161
162
        $this->body_notification_preference = $this->readJsonFile('jsons/notification/create');
163
164
        $this->body_moip_account = $this->readJsonFile('jsons/account/create');
165
166
        $this->body_order_list = $this->readJsonFile('jsons/order/get_list');
167
168
        $this->body_add_credit_card = $this->readJsonFile('jsons/customer/add_credit_card');
0 ignored issues
show
Bug introduced by
The property body_add_credit_card does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
169
170
        $this->body_list_webhook_no_filter = $this->readJsonFile('jsons/webhooks/get_no_filter');
0 ignored issues
show
Bug introduced by
The property body_list_webhook_no_filter does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
171
172
        $this->body_list_webhook_pagination = $this->readJsonFile('jsons/webhooks/get_pagination');
0 ignored issues
show
Bug introduced by
The property body_list_webhook_pagination does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
173
174
        $this->body_list_webhook_all_filters = $this->readJsonFile('jsons/webhooks/get_all_filters');
0 ignored issues
show
Bug introduced by
The property body_list_webhook_all_filters does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
175
176
        $this->body_notification_list = $this->readJsonFile('jsons/notification/list');
177
178
        $this->body_multiorder = $this->readJsonFile('jsons/multiorder/create');
0 ignored issues
show
Bug introduced by
The property body_multiorder does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
179
180
        $this->body_cc_delay_capture = $this->readJsonFile('jsons/payment/create_cc_delay_capture');
0 ignored issues
show
Bug introduced by
The property body_cc_delay_capture does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
181
182
        $this->body_capture_pay = $this->readJsonFile('jsons/payment/capture');
0 ignored issues
show
Bug introduced by
The property body_capture_pay does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
183
184
        $this->body_capture_multipay = $this->readJsonFile('jsons/multipayment/capture');
0 ignored issues
show
Bug introduced by
The property body_capture_multipay does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
185
186
        $this->body_cancel_pay = $this->readJsonFile('jsons/payment/cancel_pre_authorized');
0 ignored issues
show
Bug introduced by
The property body_cancel_pay does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
187
188
        $this->body_cancel_multipay = $this->readJsonFile('jsons/multipayment/cancel_pre_authorized');
0 ignored issues
show
Bug introduced by
The property body_cancel_multipay does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
189
190
        $this->body_get_pay = $this->readJsonFile('jsons/payment/get');
0 ignored issues
show
Bug introduced by
The property body_get_pay does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
191
192
        $this->body_get_multipay = $this->readJsonFile('jsons/multipayment/get');
0 ignored issues
show
Bug introduced by
The property body_get_multipay does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
193
194
        $this->body_transfers_create = $this->readJsonFile('jsons/transfers/create');
195
196
        $this->body_transfers_list = $this->readJsonFile('jsons/transfers/list');
197
198
        $this->body_transfers_revert = $this->readJsonFile('jsons/transfers/revert');
199
200
        $this->body_keys = $this->readJsonFile('jsons/keys/get');
0 ignored issues
show
Bug introduced by
The property body_keys does not exist. Did you maybe forget to declare it?

In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:

class MyClass { }

$x = new MyClass();
$x->foo = true;

Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion:

class MyClass {
    public $foo;
}

$x = new MyClass();
$x->foo = true;
Loading history...
201
    }
202
203
    /**
204
     * Sets up the fixture, for example, open a network connection.
205
     * This method is called before a test is executed.
206
     */
207
    public function setUp()
208
    {
209
        // check if we can run the request on sandbox
210
        $moip_access_token = getenv('MOIP_ACCESS_TOKEN');
211
212
        if ($moip_access_token) {
213
            $this->sandbox_mock = self::SANDBOX;
214
            $auth = new OAuth($moip_access_token);
215
        } else {
216
            $this->sandbox_mock = self::MOCK;
217
            $auth = $this->getMock('\Moip\Contracts\Authentication');
218
        }
219
        $this->moip = new Moip($auth, Moip::ENDPOINT_SANDBOX);
220
    }
221
222
    /**
223
     * Method to read JSON from a file.
224
     *
225
     * @param string $filename location of file
226
     */
227
    public function readJsonFile($filename)
228
    {
229
        return file_get_contents($filename.'.json', FILE_USE_INCLUDE_PATH);
230
    }
231
232
    /**
233
     * If in MOCK mode returns a mocked Requests_Sessesion if in SANDBOX mode, creates a new session.
234
     *
235
     * @param string $body        what the request will return
236
     * @param int    $status_code what http code the request will return
237
     */
238
    public function mockHttpSession($body, $status_code = 200)
239
    {
240
        if ($this->sandbox_mock == self::SANDBOX) {
241
            $this->moip->createNewSession();
242
243
            return;
244
        }
245
        $resp = new Requests_Response();
246
        $resp->body = $body;
247
        $resp->status_code = $status_code;
248
        $sess = $this->getMock('\Requests_Session');
249
        $sess->expects($this->once())->method('request')->willReturn($resp);
250
        $this->moip->setSession($sess);
251
    }
252
253
    /**
254
     * Creates a customer.
255
     *
256
     * @return Customer
257
     */
258
    public function createCustomer()
259
    {
260
        if ($this->sandbox_mock == self::SANDBOX) {
261
            $this->last_cus_id = uniqid('CUS-');
262
        } else {
263
            $this->last_cus_id = 'meu_id_sandbox';
264
        }
265
266
        $customer = $this->moip->customers()->setOwnId($this->last_cus_id)
267
            ->setBirthDate(\DateTime::createFromFormat($this->date_format, $this->date_string))
268
            ->setFullname('Jose Silva')
269
            ->setEmail('[email protected]')
270
            ->setTaxDocument('22222222222', 'CPF')
271
            ->setPhone(11, 66778899, 55)
272
            ->addAddress(Customer::ADDRESS_SHIPPING, 'Avenida Faria Lima', '2927', 'Itaim', 'Sao Paulo', 'SP', '01234000', '8');
273
274
        return $customer;
275
    }
276
277
    /**
278
     * Creates a account.
279
     *
280
     * @return Account
281
     */
282
    public function createAccount()
283
    {
284
        $moip = new Moip(new OAuth('1tldio91gi74r34zv30d4saz8yuuws5'), Moip::ENDPOINT_SANDBOX);
285
286
        $uniqEmail = 'fulano'.uniqid('MPA-').'@detal123.com.br';
287
288
        $account = $moip->accounts()
289
            ->setEmail($uniqEmail)
290
            ->setName('Fulano')
291
            ->setLastName('de Tal')
292
            ->setBirthDate('1987-11-27')
293
            ->setTaxDocument('22222222222')
294
            ->setPhone(11, 988888888)
295
            ->addAddress('Av. Ibirapuera', '2035', 'Moema', 'Sao Paulo', 'SP', '04078010')
296
            ->setIdentityDocument('411111115', 'SSP', '2000-05-06')
297
            ->create();
298
299
        return $account;
300
    }
301
302
    /**
303
     * Creates an order.
304
     *
305
     * @return Orders
306
     */
307
    public function createOrder()
308
    {
309 View Code Duplication
        if ($this->sandbox_mock == self::SANDBOX) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across 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...
310
            $this->last_ord_id = uniqid('ORD-');
311
        } else {
312
            $this->last_ord_id = 'meu_id_pedido';
313
        }
314
315
        $order = $this->moip->orders()->setCustomer($this->createCustomer())
316
            ->addItem('Nome do produto', 1, 'Mais info...', 100000)
317
            ->addItem('abacaxi', 2, 'Abacaxi de terra de areia', 990)
318
            ->setDiscount(1000)
319
            ->setShippingAmount(1490)
320
            ->setOwnId($this->last_ord_id);
321
322
        return $order;
323
    }
324
325
    /**
326
     * Creates a multiorder.
327
     *
328
     * @return Multiorders
329
     */
330
    public function createMultiorder()
331
    {
332 View Code Duplication
        if ($this->sandbox_mock == self::SANDBOX) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across 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...
333
            $this->last_ord_id = uniqid('MOR-');
334
        } else {
335
            $this->last_ord_id = 'meu_id_pedido';
336
        }
337
338
        $order = $this->moip->orders()->setOwnId(uniqid())
339
            ->addItem('bicicleta 1', 1, 'sku1', 10000)
340
            ->addItem('bicicleta 2', 1, 'sku2', 11000)
341
            ->addItem('bicicleta 3', 1, 'sku3', 12000)
342
            ->addItem('bicicleta 4', 1, 'sku4', 13000)
343
            ->setShippingAmount(3000)
344
            ->setAddition(1000)
345
            ->setDiscount(5000)
346
            ->setCustomer($this->createCustomer())
347
            ->addReceiver('MPA-VB5OGTVPCI52', 'PRIMARY', null);
348
349
        $order2 = $this->moip->orders()->setOwnId(uniqid())
350
            ->addItem('bicicleta 1', 1, 'sku1', 10000)
351
            ->addItem('bicicleta 2', 1, 'sku2', 11000)
352
            ->addItem('bicicleta 3', 1, 'sku3', 12000)
353
            ->setShippingAmount(3000)
354
            ->setAddition(1000)
355
            ->setDiscount(5000)
356
            ->setCustomer($this->createCustomer())
357
            ->addReceiver('MPA-IFYRB1HBL73Z', 'PRIMARY', null);
358
359
        $multiorder = $this->moip->multiorders()
360
                ->setOwnId(uniqid())
361
                ->addOrder($order)
362
                ->addOrder($order2);
363
364
        return $multiorder;
365
    }
366
367
    /**
368
     * Tears down the fixture, for example, close a network connection.
369
     * This method is called after a test is executed.
370
     */
371
    public function tearDown()
372
    {
373
        $this->moip = null;
374
    }
375
}
376