47 lines
1.5 KiB
PHP
47 lines
1.5 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use App\Services\Supplier\SupplierPortalClient;
|
|
use Illuminate\Support\Carbon;
|
|
use Illuminate\Support\Facades\Cache;
|
|
use Illuminate\Support\Facades\Http;
|
|
|
|
beforeEach(function (): void {
|
|
config(['services.supplier.portal_url' => 'https://crm.bp-gr.ru']);
|
|
Cache::store('redis')->put('supplier:session', ['phpsessid' => 'test', 'csrf' => 'test'], now()->addHour());
|
|
});
|
|
|
|
it('requestNumbersReport posts a generation request and returns report id', function (): void {
|
|
Http::fake([
|
|
'crm.bp-gr.ru/admin/report/generate*' => Http::response(['id' => 508346], 200),
|
|
]);
|
|
|
|
$client = app(SupplierPortalClient::class);
|
|
$id = $client->requestNumbersReport(Carbon::parse('2026-05-17'), Carbon::parse('2026-05-18'));
|
|
|
|
expect($id)->toBe(508346);
|
|
});
|
|
|
|
it('waitReportReady polls until status is processed', function (): void {
|
|
Http::fakeSequence('crm.bp-gr.ru/admin/report/status*')
|
|
->push(['status' => 'building'], 200)
|
|
->push(['status' => 'processed'], 200);
|
|
|
|
$client = app(SupplierPortalClient::class);
|
|
$client->waitReportReady(508346);
|
|
|
|
expect(true)->toBeTrue(); // не бросил исключение — отчёт дождался
|
|
});
|
|
|
|
it('downloadReport returns raw CSV body', function (): void {
|
|
Http::fake([
|
|
'crm.bp-gr.ru/admin/report/getfile*' => Http::response("Name;Tag;Phone\nB1_a.com;t;79991234567\n", 200),
|
|
]);
|
|
|
|
$client = app(SupplierPortalClient::class);
|
|
$csv = $client->downloadReport(508346);
|
|
|
|
expect($csv)->toContain('Name;Tag;Phone');
|
|
});
|