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

TestCase::setUp()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 14
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

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