Completed
Pull Request — master (#173)
by
unknown
01:49
created

TestCase::__construct()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 30
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 15
nc 1
nop 0
dl 0
loc 30
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
147
    /**
148
     * Sets up the fixture, for example, open a network connection.
149
     * This method is called before a test is executed.
150
     */
151
    public function setUp()
152
    {
153
        // check if we can run the request on sandbox
154
        $moip_access_token = getenv('MOIP_ACCESS_TOKEN');
155
156
        if ($moip_access_token) {
157
            $this->sandbox_mock = self::SANDBOX;
158
            $auth = new OAuth($moip_access_token);
159
        } else {
160
            $this->sandbox_mock = self::MOCK;
161
            $auth = $this->getMock('\Moip\Contracts\Authentication');
162
        }
163
        $this->moip = new Moip($auth, Moip::ENDPOINT_SANDBOX);
164
    }
165
166
    /**
167
     * Method to read JSON from a file.
168
     *
169
     * @param string $filename location of file
170
     */
171
    public function readJsonFile($filename)
172
    {
173
        return file_get_contents("$filename.json", FILE_USE_INCLUDE_PATH);
174
    }
175
176
    /**
177
     * If in MOCK mode returns a mocked Requests_Sessesion if in SANDBOX mode, creates a new session.
178
     *
179
     * @param string $body        what the request will return
180
     * @param int    $status_code what http code the request will return
181
     */
182
    public function mockHttpSession($body, $status_code = 200)
183
    {
184
        if ($this->sandbox_mock == self::SANDBOX) {
185
            $this->moip->createNewSession();
186
187
            return;
188
        }
189
        $resp = new Requests_Response();
190
        $resp->body = $body;
191
        $resp->status_code = $status_code;
192
        $sess = $this->getMock('\Requests_Session');
193
        $sess->expects($this->once())->method('request')->willReturn($resp);
194
        $this->moip->setSession($sess);
195
    }
196
197
    /**
198
     * Creates a customer.
199
     *
200
     * @return Customer
201
     */
202
    public function createCustomer()
203
    {
204
        if ($this->sandbox_mock == self::SANDBOX) {
205
            $this->last_cus_id = uniqid('CUS-');
206
        } else {
207
            $this->last_cus_id = 'meu_id_sandbox';
208
        }
209
210
        $customer = $this->moip->customers()->setOwnId($this->last_cus_id)
211
            ->setBirthDate(\DateTime::createFromFormat($this->date_format, $this->date_string))
212
            ->setFullname('Jose Silva')
213
            ->setEmail('[email protected]')
214
            ->setTaxDocument('22222222222', 'CPF')
215
            ->setPhone(11, 66778899, 55)
216
            ->addAddress(Customer::ADDRESS_SHIPPING, 'Avenida Faria Lima', '2927', 'Itaim', 'Sao Paulo', 'SP', '01234000', '8');
217
218
        return $customer;
219
    }
220
221
    /**
222
     * Creates a account.
223
     *
224
     * @return Account
225
     */
226
    public function createAccount()
227
    {
228
        $moip = new Moip(new OAuth('1tldio91gi74r34zv30d4saz8yuuws5'), Moip::ENDPOINT_SANDBOX);
229
230
        $uniqEmail = 'fulano'.uniqid('MPA-').'@detal123.com.br';
231
232
        $account = $moip->accounts()
233
            ->setEmail($uniqEmail)
234
            ->setName('Fulano')
235
            ->setLastName('de Tal')
236
            ->setBirthDate('1987-11-27')
237
            ->setTaxDocument('22222222222')
238
            ->setPhone(11, 988888888)
239
            ->addAddress('Av. Ibirapuera', '2035', 'Moema', 'Sao Paulo', 'SP', '04078010')
240
            ->setIdentityDocument('411111115', 'SSP', '2000-05-06')
241
            ->create();
242
243
        return $account;
244
    }
245
246
    /**
247
     * Creates an order.
248
     *
249
     * @return Orders
250
     */
251
    public function createOrder()
252
    {
253
        if ($this->sandbox_mock == self::SANDBOX) {
254
            $this->last_ord_id = uniqid('ORD-');
255
        } else {
256
            $this->last_ord_id = 'meu_id_pedido';
257
        }
258
259
        $order = $this->moip->orders()->setCustomer($this->createCustomer())
260
            ->addItem('Nome do produto', 1, 'Mais info...', 100000)
261
            ->addItem('abacaxi', 2, 'Abacaxi de terra de areia', 990)
262
            ->setDiscount(1000)
263
            ->setShippingAmount(1490)
264
            ->setOwnId($this->last_ord_id);
265
266
        return $order;
267
    }
268
269
    /**
270
     * Tears down the fixture, for example, close a network connection.
271
     * This method is called after a test is executed.
272
     */
273
    public function tearDown()
274
    {
275
        $this->moip = null;
276
    }
277
}
278