Files
kulakpos_web/vendor/fedapay/fedapay-php/tests/PayoutTest.php
triagungbiantoro 417b7b7453
All checks were successful
Build, Push and Deploy / build-and-push (push) Successful in 3m27s
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 16s
Build, Push and Deploy / deploy-staging (push) Successful in 31s
Build, Push and Deploy / deploy-production (push) Has been skipped
harga pada beranda terhubung ke manage plans di dashboard admin
2026-04-25 21:57:25 +07:00

713 lines
24 KiB
PHP
Executable File

<?php
namespace Tests;
use Faker\Factory;
class PayoutTest extends BaseTestCase
{
private function createPayout()
{
$data = [
'customer' => ['id' => 1],
'currency' => ['iso' => 'XOF'],
'amount' => 1000,
];
$body = [
'v1/payout' => [
'id' => 1,
'klass' => 'v1/payout',
'reference' => '109329828',
'amount' => 1000,
'status' => 'pending',
'customer' => [
'id' => 1,
'klass' => 'v1/customer',
],
'balance_id' => 1,
'mode' => 'mtn',
'created_at' => '2018-03-12T09:09:03.969Z',
'updated_at' => '2018-03-12T09:09:03.969Z'
]
];
$this->mockRequest('post', '/v1/payouts', $data, $body);
return \FedaPay\Payout::create($data);
}
/**
* Should return array of FedaPay\Payout
*/
public function testShouldReturnPayouts()
{
$body = [
'v1/payouts' => [
[
'klass' => 'v1/payout',
'id' => 1,
'reference' => '1539796844261',
'amount' => 1000,
'status' => 'pending',
'customer_id' => 1,
'mode' => 'mtn',
'last_error_code' => null,
'last_error_message' => null,
'created_at' => '2018-10-17T17:20:44.261Z',
'updated_at' => '2018-10-17T17:22:47.816Z',
'currency_id' => 1,
'scheduled_at' => '2018-10-17T17:22:06.626Z',
'sent_at' => '2018-10-17T17:22:47.803Z',
'failed_at' => null,
'deleted_at' => null
]
],
'meta' => [
"current_page" => 1,
"next_page" => null,
"prev_page" => null,
"total_pages" => 1,
"total_count" => 11,
"per_page" => 25
]
];
$this->mockRequest('get', '/v1/payouts', [], $body);
$object = \FedaPay\Payout::all();
$this->assertInstanceOf(\FedaPay\FedaPayObject::class, $object);
$this->assertInstanceOf(\FedaPay\FedaPayObject::class, $object->meta);
$this->assertInstanceOf(\FedaPay\Payout::class, $object->payouts[0]);
$this->assertEquals(1, $object->payouts[0]->id);
$this->assertEquals('1539796844261', $object->payouts[0]->reference);
$this->assertEquals(1000, $object->payouts[0]->amount);
$this->assertEquals('pending', $object->payouts[0]->status);
$this->assertEquals(1, $object->payouts[0]->customer_id);
$this->assertEquals(1, $object->payouts[0]->currency_id);
$this->assertEquals('mtn', $object->payouts[0]->mode);
}
/**
* Should return array of FedaPay\Payout
*/
public function testShouldCreateAPayout()
{
$data = [
'customer' => ['id' => 1],
'currency' => ['iso' => 'XOF'],
'amount' => 1000,
'mode' => 'mtn',
'scheduled_at' => '2018-03-12T09:09:03.969Z',
'include' => 'customer,currency'
];
$body = [
'v1/payout' => [
'amount' => 1000,
'currency_id' => 1,
'created_at' => '2018-10-23T15:21:50.434Z',
'customer_id' => 1,
'deleted_at' => null,
'failed_at' => null,
'id' => 13,
'klass' => 'v1/payout',
'last_error_code' => null,
'last_error_message' => null,
'mode' => 'mtn',
'reference' => '1540308110435',
'scheduled_at' => '2018-11-12T09:09:03.969Z',
'sent_at' => null,
'status' => 'pending',
'updated_at' => '2018-10-23T15:21:50.434Z',
'customer' => [
'klass' => 'v1/customer',
'id' => 1,
'firstname' => 'SOHOU',
'lastname' => 'Zidial',
'email' => 'zinsou@test.com',
'account_id' => 1,
'created_at' => '2018-10-17T16:03:24.061Z',
'updated_at' => '2018-10-17T16:03:24.061Z'
]
]
];
$this->mockRequest('post', '/v1/payouts', $data, $body);
$payout = \FedaPay\Payout::create($data);
$this->assertInstanceOf(\FedaPay\Payout::class, $payout);
$this->assertEquals(13, $payout->id);
$this->assertEquals('1540308110435', $payout->reference);
$this->assertEquals(1000, $payout->amount);
$this->assertEquals('pending', $payout->status);
$this->assertInstanceOf(\FedaPay\Customer::class, $payout->customer);
$this->assertEquals(1, $payout->customer->id);
$this->assertEquals('mtn', $payout->mode);
}
/**
* Should return array of FedaPay\Payout
*/
public function testShouldCreatePayoutInBatch()
{
$data = [
'payouts' => [
'customer' => ['id' => 1],
'currency' => ['iso' => 'XOF'],
'amount' => 1000,
'mode' => 'mtn',
'scheduled_at' => '2018-03-12T09:09:03.969Z'
],
'include' => 'customer,currency'
];
$body = [
'v1/payout_batch' => [
'klass' => 'v1/payout_batch',
'payouts' => [
[
'amount' => 1000,
'currency_id' => 1,
'created_at' => '2018-10-23T15:21:50.434Z',
'customer_id' => 1,
'deleted_at' => null,
'failed_at' => null,
'id' => 13,
'klass' => 'v1/payout',
'last_error_code' => null,
'last_error_message' => null,
'mode' => 'mtn',
'reference' => '1540308110435',
'scheduled_at' => '2018-11-12T09:09:03.969Z',
'sent_at' => null,
'status' => 'pending',
'updated_at' => '2018-10-23T15:21:50.434Z',
'customer' => [
'klass' => 'v1/customer',
'id' => 1,
'firstname' => 'SOHOU',
'lastname' => 'Zidial',
'email' => 'zinsou@test.com',
'account_id' => 1,
'created_at' => '2018-10-17T16:03:24.061Z',
'updated_at' => '2018-10-17T16:03:24.061Z'
]
]
],
'errors' => []
]
];
$this->mockRequest('post', '/v1/payouts/batch', $data, $body);
$object = \FedaPay\Payout::createInBatch($data);
$this->assertInstanceOf(\FedaPay\FedaPayObject::class, $object);
$this->assertEquals(13, $object->payouts[0]->id);
$this->assertEquals('1540308110435', $object->payouts[0]->reference);
$this->assertEquals(1000, $object->payouts[0]->amount);
$this->assertEquals('pending', $object->payouts[0]->status);
$this->assertInstanceOf(\FedaPay\Customer::class, $object->payouts[0]->customer);
$this->assertEquals(1, $object->payouts[0]->customer->id);
$this->assertEquals('mtn', $object->payouts[0]->mode);
}
/**
* Should retrieve a Payout
*/
public function testShouldRetrievedAPayout()
{
$body = [
'v1/payout' => [
'amount' => 1000,
'currency_id' => 1,
'created_at' => '2018-10-23T15:21:50.434Z',
'customer_id' => 1,
'deleted_at' => null,
'failed_at' => null,
'id' => 13,
'klass' => 'v1/payout',
'last_error_code' => null,
'last_error_message' => null,
'mode' => 'mtn',
'reference' => '1540308110435',
'scheduled_at' => '2018-11-12T09:09:03.969Z',
'sent_at' => null,
'status' => 'pending',
'updated_at' => '2018-10-23T15:21:50.434Z'
]
];
$this->mockRequest('get', '/v1/payouts/13', [], $body);
$payout = \FedaPay\Payout::retrieve(13);
$this->assertInstanceOf(\FedaPay\Payout::class, $payout);
$this->assertEquals(13, $payout->id);
$this->assertEquals('1540308110435', $payout->reference);
$this->assertEquals(1000, $payout->amount);
$this->assertEquals('pending', $payout->status);
$this->assertEquals('mtn', $payout->mode);
}
/**
* Should start a Payout
*/
public function testShouldScheduleAPayout()
{
$payout = $this->createPayout();
$body = [
'v1/payouts' => [
[
'klass' => 'v1/payout',
'id' => 1,
'reference' => '1540316134325',
'amount' => 1000,
'status' => 'started',
'customer_id' => 1,
'currency_id' => 1,
'mode' => 'mtn',
'last_error_code' => null,
'last_error_message' => null,
'created_at' => '2018-10-23T17:35:34.325Z',
'updated_at' => '2018-10-23T17:36:40.086Z',
'scheduled_at' => '2018-11-01 18:30:22',
'sent_at' => null,
'started_at' => '2018-11-01 18:30:22',
'failed_at' => null,
'deleted_at' => null
]
]
];
$data = [
'payouts' => [[
'id' => 1,
'scheduled_at' => '2018-11-01 18:30:22'
]]
];
$this->mockRequest('put', '/v1/payouts/start', $data, $body);
$payout->schedule('2018-11-01 18:30:22');
$this->assertEquals('2018-11-01 18:30:22', $payout->scheduled_at);
$this->assertEquals('2018-11-01 18:30:22', $payout->started_at);
$this->assertEquals('started', $payout->status);
}
/**
* Should start a Payout with phone number
*/
public function testShouldScheduleAPayoutWithPhoneNumber()
{
$payout = $this->createPayout();
$body = [
'v1/payouts' => [
[
'klass' => 'v1/payout',
'id' => 1,
'reference' => '1540316134325',
'amount' => 1000,
'status' => 'started',
'customer_id' => 1,
'currency_id' => 1,
'mode' => 'mtn',
'last_error_code' => null,
'last_error_message' => null,
'created_at' => '2018-10-23T17:35:34.325Z',
'updated_at' => '2018-10-23T17:36:40.086Z',
'scheduled_at' => '2018-11-01 18:30:22',
'sent_at' => null,
'started_at' => '2018-11-01 18:30:22',
'failed_at' => null,
'deleted_at' => null
]
]
];
$data = [
'payouts' => [[
'id' => 1,
'scheduled_at' => '2018-11-01 18:30:22',
'phone_number' => [
'number' => '66000001',
'country' => 'BJ'
]
]]
];
$this->mockRequest('put', '/v1/payouts/start', $data, $body);
$payout->schedule('2018-11-01 18:30:22', [
'phone_number' => [
'number' => '66000001',
'country' => 'BJ'
]
]);
$this->assertEquals('2018-11-01 18:30:22', $payout->scheduled_at);
$this->assertEquals('2018-11-01 18:30:22', $payout->started_at);
$this->assertEquals('started', $payout->status);
}
/**
* Should fail schedule all payouts
*/
public function testShouldFailScheduleAllPayouts()
{
$data = [[
'scheduled_at' => '2018-11-01 18:30:22'
]];
$this->expectException('\InvalidArgumentException');
$this->expectExceptionMessage('Invalid id argument. You must specify payout id.');
\FedaPay\Payout::scheduleAll($data);
}
/**
* Should schedule all Payouts
*/
public function testShouldScheduleAllPayouts()
{
$body = [
'v1/payouts' => [
[
'klass' => 'v1/payout',
'id' => 1,
'reference' => '1540316134325',
'amount' => 1000,
'status' => 'started',
'customer_id' => 1,
'currency_id' => 1,
'mode' => 'mtn',
'last_error_code' => null,
'last_error_message' => null,
'created_at' => '2018-10-23T17:35:34.325Z',
'updated_at' => '2018-10-23T17:36:40.086Z',
'scheduled_at' => '2018-11-01 18:30:22',
'sent_at' => null,
'started_at' => '2018-11-01 18:30:22',
'failed_at' => null,
'deleted_at' => null
]
]
];
$data = [[
'id' => 1,
'scheduled_at' => '2018-11-01 18:30:22'
]];
$this->mockRequest('put', '/v1/payouts/start', ['payouts' => $data], $body);
$object = \FedaPay\Payout::scheduleAll($data);
$this->assertInstanceOf(\FedaPay\FedaPayObject::class, $object);
$this->assertInstanceOf(\FedaPay\Payout::class, $object->payouts[0]);
$this->assertEquals(1, $object->payouts[0]->id);
$this->assertEquals('1540316134325', $object->payouts[0]->reference);
$this->assertEquals(1000, $object->payouts[0]->amount);
$this->assertEquals('started', $object->payouts[0]->status);
$this->assertEquals('mtn', $object->payouts[0]->mode);
}
/**
* Should send a Payout now
*/
public function testShouldSendAPayoutNow()
{
$payout = $this->createPayout();
$body = [
'v1/payouts' => [
[
'klass' => 'v1/payout',
'id' => 1,
'reference' => '1540316134325',
'amount' => 1000,
'status' => 'sent',
'customer_id' => 1,
'currency_id' => 1,
'mode' => 'mtn',
'last_error_code' => null,
'last_error_message' => null,
'created_at' => '2018-10-23T17:35:34.325Z',
'updated_at' => '2018-10-23T17:36:40.086Z',
'scheduled_at' => '2018-11-01 18:30:22',
'sent_at' => '2018-11-01 18:30:22',
'started_at' => '2018-11-01 18:30:22',
'failed_at' => null,
'deleted_at' => null
]
]
];
$data = [
'payouts' => [[
'id' => 1
]]
];
$this->mockRequest('put', '/v1/payouts/start', $data, $body);
$payout->sendNow();
$this->assertEquals('2018-11-01 18:30:22', $payout->sent_at);
$this->assertEquals('sent', $payout->status);
}
/**
* Should send a Payout now with phone number
*/
public function testShouldSendAPayoutNowWithPhoneNumber()
{
$payout = $this->createPayout();
$body = [
'v1/payouts' => [
[
'klass' => 'v1/payout',
'id' => 1,
'reference' => '1540316134325',
'amount' => 1000,
'status' => 'sent',
'customer_id' => 1,
'currency_id' => 1,
'mode' => 'mtn',
'last_error_code' => null,
'last_error_message' => null,
'created_at' => '2018-10-23T17:35:34.325Z',
'updated_at' => '2018-10-23T17:36:40.086Z',
'scheduled_at' => '2018-11-01 18:30:22',
'sent_at' => '2018-11-01 18:30:22',
'started_at' => '2018-11-01 18:30:22',
'failed_at' => null,
'deleted_at' => null
]
]
];
$data = [
'payouts' => [[
'id' => 1,
'phone_number' => [
'number' => '66000001',
'country' => 'BJ'
]
]]
];
$this->mockRequest('put', '/v1/payouts/start', $data, $body);
$payout->sendNow([
'phone_number' => [
'number' => '66000001',
'country' => 'BJ'
]
]);
$this->assertEquals('2018-11-01 18:30:22', $payout->sent_at);
$this->assertEquals('sent', $payout->status);
}
/**
* Should send all payouts now
*/
public function testShouldSendAllPayoutsNow()
{
$body = [
'v1/payouts' => [
[
'klass' => 'v1/payout',
'id' => 1,
'reference' => '1540316134325',
'amount' => 1000,
'status' => 'sent',
'customer_id' => 1,
'currency_id' => 1,
'mode' => 'mtn',
'last_error_code' => null,
'last_error_message' => null,
'created_at' => '2018-10-23T17:35:34.325Z',
'updated_at' => '2018-10-23T17:36:40.086Z',
'scheduled_at' => '2018-11-01 18:30:22',
'sent_at' => null,
'started_at' => '2018-11-01 18:30:22',
'failed_at' => null,
'deleted_at' => null
]
]
];
$data = [[
'id' => 1
]];
$this->mockRequest('put', '/v1/payouts/start', ['payouts' => $data], $body);
$object = \FedaPay\Payout::sendAllNow([['id' => 1]]);
$this->assertInstanceOf(\FedaPay\FedaPayObject::class, $object);
$this->assertInstanceOf(\FedaPay\Payout::class, $object->payouts[0]);
$this->assertEquals(1, $object->payouts[0]->id);
$this->assertEquals('1540316134325', $object->payouts[0]->reference);
$this->assertEquals(1000, $object->payouts[0]->amount);
$this->assertEquals('sent', $object->payouts[0]->status);
$this->assertEquals('mtn', $object->payouts[0]->mode);
}
/**
* Should update a payout
*/
public function testShouldUpdateAPayout()
{
$data = [
'customer' => ['id' => 1],
'currency' => ['iso' => 'XOF'],
'amount' => 1000
];
$body = [
'v1/payout' => [
'id' => 1,
'klass' => 'v1/payout',
'reference' => '109329828',
'amount' => 1000,
'status' => 'pending',
'customer' => [
'id' => 1,
'klass' => 'v1/customer',
],
'currency' => [
'id' => 1,
'klass' => 'v1/currency',
'iso' => 'XOF'
],
'mode' => null,
'created_at' => '2018-03-12T09:09:03.969Z',
'updated_at' => '2018-03-12T09:09:03.969Z',
]
];
$this->mockRequest('put', '/v1/payouts/1', $data, $body);
$payout = \FedaPay\Payout::update(1, $data);
$this->assertInstanceOf(\FedaPay\Payout::class, $payout);
$this->assertEquals(1, $payout->id);
$this->assertEquals('109329828', $payout->reference);
$this->assertEquals(1000, $payout->amount);
$this->assertEquals('pending', $payout->status);
$this->assertInstanceOf(\FedaPay\Customer::class, $payout->customer);
$this->assertEquals(1, $payout->customer->id);
$this->assertInstanceOf(\FedaPay\Currency::class, $payout->currency);
$this->assertEquals(1, $payout->currency->id);
$this->assertEquals(null, $payout->mode);
}
/**
* Should update a payout with save
*/
public function testShouldUpdateAPayoutWithSave()
{
$data = [
'customer' => ['id' => 1],
'currency' => ['iso' => 'XOF'],
'amount' => 1000,
];
$body = [
'v1/payout' => [
'id' => 1,
'klass' => 'v1/payout',
'reference' => '109329828',
'amount' => 1000,
'status' => 'pending',
'customer' => [
'id' => 1,
'klass' => 'v1/customer',
],
'currency' => [
'id' => 1,
'klass' => 'v1/currency',
'iso' => 'XOF'
],
'mode' => 'mtn',
'created_at' => '2018-03-12T09:09:03.969Z',
'updated_at' => '2018-03-12T09:09:03.969Z',
]
];
$this->mockRequest('post', '/v1/payouts', $data, $body);
$payout = \FedaPay\Payout::create($data);
$payout->amount = 5000;
$updateData = [
'klass' => 'v1/payout',
'reference' => '109329828',
'amount' => 5000,
'status' => 'pending',
'customer' => [
'klass' => 'v1/customer',
],
'currency' => [
'klass' => 'v1/currency',
'iso' => 'XOF'
],
'mode' => 'mtn',
'created_at' => '2018-03-12T09:09:03.969Z',
'updated_at' => '2018-03-12T09:09:03.969Z',
];
$this->mockRequest('put', '/v1/payouts/1', $updateData, $body);
$payout->save();
}
/**
* Should delete a payout
*/
public function testShouldDeleteAPayout()
{
$data = [
'customer' => ['id' => 1],
'currency' => ['iso' => 'XOF'],
'amount' => 1000,
];
$body = [
'v1/payout' => [
'id' => 1,
'klass' => 'v1/payout',
'reference' => '109329828',
'amount' => 1000,
'status' => 'pending',
'customer' => [
'id' => 1,
'klass' => 'v1/customer',
],
'currency' => [
'id' => 1,
'klass' => 'v1/currency',
'iso' => 'XOF'
],
'mode' => 'mtn',
'created_at' => '2018-03-12T09:09:03.969Z',
'updated_at' => '2018-03-12T09:09:03.969Z',
]
];
$this->mockRequest('post', '/v1/payouts', $data, $body);
$payout = \FedaPay\Payout::create($data);
$this->mockRequest('delete', '/v1/payouts/1');
$payout->delete();
}
}