Files
alfa-bank-sdk/tests/Feature/Salary/SalaryTest.php

86 lines
3.1 KiB
PHP

<?php
use Apoloz\AlfaBank\Core\AlfaBankConnector;
use Apoloz\AlfaBank\Data\Salary\SalaryAccountApplicationData;
use Apoloz\AlfaBank\Data\Salary\SalaryEmployeeData;
use Apoloz\AlfaBank\Data\Salary\SalaryOrganizationData;
use Apoloz\AlfaBank\Data\Salary\SalaryPayrollApplicationData;
use Apoloz\AlfaBank\Requests\Salary\CreateAccountApplicationRequest;
use Apoloz\AlfaBank\Requests\Salary\CreatePayrollApplicationRequest;
use Apoloz\AlfaBank\Requests\Salary\GetAccountApplicationStatusRequest;
use Saloon\Http\Faking\MockResponse;
use Spatie\LaravelData\DataCollection;
test('can create salary account application', function () {
$mockClient = new \Saloon\Http\Faking\MockClient([
CreateAccountApplicationRequest::class => MockResponse::make(['id' => 'ACC-123'], 201),
]);
$config = createTestConfig();
$connector = new AlfaBankConnector($config);
$connector->withMockClient($mockClient);
$payload = new SalaryAccountApplicationData(
applicationId: 'app-1',
applicationCreatedAt: '2023-10-10T10:00:00Z',
registryNumber: 'reg-1',
registryCreatedAt: '2023-10-10T10:00:00Z',
contractNumber: 'cnt-1',
bic: '044...',
organization: new SalaryOrganizationData('Org LLC', '407...', '770...'),
rowsCount: 1,
employees: SalaryEmployeeData::collect([
['firstName' => 'Ivan', 'lastName' => 'Ivanov']
], DataCollection::class)
);
$response = $connector->send(new CreateAccountApplicationRequest($payload));
expect($response->status())->toBe(201);
});
test('can create salary payroll application', function () {
$mockClient = new \Saloon\Http\Faking\MockClient([
CreatePayrollApplicationRequest::class => MockResponse::make(['id' => 'PAY-123'], 201),
]);
$config = createTestConfig();
$connector = new AlfaBankConnector($config);
$connector->withMockClient($mockClient);
$payload = new SalaryPayrollApplicationData(
applicationId: 'app-2',
applicationCreatedAt: '2023-10-10T10:00:00Z',
totalAmount: 1000.0,
payrollId: 'pay-1',
admissionValue: '1',
registryNumber: 'reg-2',
registryCreatedAt: '2023-10-10',
contractNumber: 'cnt-1',
bic: '044...',
organization: new SalaryOrganizationData('Org LLC', '407...', '770...'),
rowsCount: 1,
employees: SalaryEmployeeData::collect([
['firstName' => 'Ivan', 'lastName' => 'Ivanov', 'amount' => 1000.0]
], DataCollection::class)
);
$response = $connector->send(new CreatePayrollApplicationRequest($payload));
expect($response->status())->toBe(201);
});
test('can get salary application status', function () {
$mockClient = new \Saloon\Http\Faking\MockClient([
GetAccountApplicationStatusRequest::class => MockResponse::make(['status' => 'PROCESSED'], 200),
]);
$config = createTestConfig();
$connector = new AlfaBankConnector($config);
$connector->withMockClient($mockClient);
$response = $connector->send(new GetAccountApplicationStatusRequest('ACC-123'));
expect($response->status())->toBe(200);
});