Completed
Push — master ( 4a5840...1f0278 )
by
unknown
11s
created

TestCase::__construct()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 36
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 18
nc 1
nop 0
dl 0
loc 36
rs 8.8571
c 0
b 0
f 0
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 holds the last generated customer ownId. In mock mode it'll be always the default, but it changes on sandbox mode.
105
     */
106
    protected $last_cus_id = 'meu_id_customer';
107
108
    /**
109
     * @var string same as `$last_cus_id` but for orders.
110
     *
111
     * @see $last_cus_id
112
     */
113
    protected $last_ord_id = 'meu_id_pedido';
114
    protected $sandbox_mock = self::MOCK;
115
116
    public function __construct()
117
    {
118
        parent::__construct();
119
120
        $this->body_client = $this->readJsonFile('jsons/customer/create');
121
122
        $this->body_order = $this->readJsonFile('jsons/order/create');
123
124
        $this->body_cc_pay_pci = $this->readJsonFile('jsons/payment/create_cc_pci');
125
126
        $this->body_cc_pay_pci_store = $this->readJsonFile('jsons/payment/create_cc_pci_store');
127
128
        $this->body_cc_pay_pci_escrow = $this->readJsonFile('jsons/payment/create_cc_pci_escrow');
129
130
        $this->body_release_escrow = $this->readJsonFile('jsons/escrow/release');
131
132
        $this->body_billet_pay = $this->readJsonFile('jsons/payment/create_billet');
133
134
        $this->body_refund_full_bankaccount = $this->readJsonFile('jsons/refund/full_bankaccount');
135
136
        $this->body_refund_partial_bankaccount = $this->readJsonFile('jsons/refund/partial_bankaccount');
137
138
        $this->body_notification_preference = $this->readJsonFile('jsons/notification/create');
139
140
        $this->body_moip_account = $this->readJsonFile('jsons/account/create');
141
142
        $this->body_order_list = $this->readJsonFile('jsons/order/get_list');
143
144
        $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...
145
146
        $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...
147
148
        $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...
149
150
        $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...
151
    }
152
153
    /**
154
     * Sets up the fixture, for example, open a network connection.
155
     * This method is called before a test is executed.
156
     */
157
    public function setUp()
158
    {
159
        // check if we can run the request on sandbox
160
        $moip_access_token = getenv('MOIP_ACCESS_TOKEN');
161
162
        if ($moip_access_token) {
163
            $this->sandbox_mock = self::SANDBOX;
164
            $auth = new OAuth($moip_access_token);
165
        } else {
166
            $this->sandbox_mock = self::MOCK;
167
            $auth = $this->getMock('\Moip\Contracts\Authentication');
168
        }
169
        $this->moip = new Moip($auth, Moip::ENDPOINT_SANDBOX);
170
    }
171
172
    /**
173
     * Method to read JSON from a file.
174
     *
175
     * @param string $filename location of file
176
     */
177
    public function readJsonFile($filename)
178
    {
179
        return file_get_contents("$filename.json", FILE_USE_INCLUDE_PATH);
180
    }
181
182
    /**
183
     * If in MOCK mode returns a mocked Requests_Sessesion if in SANDBOX mode, creates a new session.
184
     *
185
     * @param string $body        what the request will return
186
     * @param int    $status_code what http code the request will return
187
     */
188
    public function mockHttpSession($body, $status_code = 200)
189
    {
190
        if ($this->sandbox_mock == self::SANDBOX) {
191
            $this->moip->createNewSession();
192
193
            return;
194
        }
195
        $resp = new Requests_Response();
196
        $resp->body = $body;
197
        $resp->status_code = $status_code;
198
        $sess = $this->getMock('\Requests_Session');
199
        $sess->expects($this->once())->method('request')->willReturn($resp);
200
        $this->moip->setSession($sess);
201
    }
202
203
    /**
204
     * Creates a customer.
205
     *
206
     * @return Customer
207
     */
208
    public function createCustomer()
209
    {
210
        if ($this->sandbox_mock == self::SANDBOX) {
211
            $this->last_cus_id = uniqid('CUS-');
212
        } else {
213
            $this->last_cus_id = 'meu_id_sandbox';
214
        }
215
216
        $customer = $this->moip->customers()->setOwnId($this->last_cus_id)
217
            ->setBirthDate(\DateTime::createFromFormat($this->date_format, $this->date_string))
218
            ->setFullname('Jose Silva')
219
            ->setEmail('[email protected]')
220
            ->setTaxDocument('22222222222', 'CPF')
221
            ->setPhone(11, 66778899, 55)
222
            ->addAddress(Customer::ADDRESS_SHIPPING, 'Avenida Faria Lima', '2927', 'Itaim', 'Sao Paulo', 'SP', '01234000', '8');
223
224
        return $customer;
225
    }
226
227
    /**
228
     * Creates a account.
229
     *
230
     * @return Account
231
     */
232
    public function createAccount()
233
    {
234
        $moip = new Moip(new OAuth('1tldio91gi74r34zv30d4saz8yuuws5'), Moip::ENDPOINT_SANDBOX);
235
236
        $uniqEmail = 'fulano'.uniqid('MPA-').'@detal123.com.br';
237
238
        $account = $moip->accounts()
239
            ->setEmail($uniqEmail)
240
            ->setName('Fulano')
241
            ->setLastName('de Tal')
242
            ->setBirthDate('1987-11-27')
243
            ->setTaxDocument('22222222222')
244
            ->setPhone(11, 988888888)
245
            ->addAddress('Av. Ibirapuera', '2035', 'Moema', 'Sao Paulo', 'SP', '04078010')
246
            ->setIdentityDocument('411111115', 'SSP', '2000-05-06')
247
            ->create();
248
249
        return $account;
250
    }
251
252
    /**
253
     * Creates an order.
254
     *
255
     * @return Orders
256
     */
257
    public function createOrder()
258
    {
259
        if ($this->sandbox_mock == self::SANDBOX) {
260
            $this->last_ord_id = uniqid('ORD-');
261
        } else {
262
            $this->last_ord_id = 'meu_id_pedido';
263
        }
264
265
        $order = $this->moip->orders()->setCustomer($this->createCustomer())
266
            ->addItem('Nome do produto', 1, 'Mais info...', 100000)
267
            ->addItem('abacaxi', 2, 'Abacaxi de terra de areia', 990)
268
            ->setDiscount(1000)
269
            ->setShippingAmount(1490)
270
            ->setOwnId($this->last_ord_id);
271
272
        return $order;
273
    }
274
275
    /**
276
     * Tears down the fixture, for example, close a network connection.
277
     * This method is called after a test is executed.
278
     */
279
    public function tearDown()
280
    {
281
        $this->moip = null;
282
    }
283
}
284