82 lines
2.9 KiB
PHP
82 lines
2.9 KiB
PHP
<?php
|
|
|
|
namespace Tests\Unit\EcommerceFinance;
|
|
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Modules\EcommerceFinance\Services\DingProcessDetailMirrorSynchronizer;
|
|
use Modules\EcommerceFinance\Services\DingProcessRefreshQueue;
|
|
use Tests\TestCase;
|
|
|
|
class DingProcessRefreshQueueTest extends TestCase
|
|
{
|
|
private DingProcessRefreshQueue $queue;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
|
|
Storage::fake('local');
|
|
$this->queue = app(DingProcessRefreshQueue::class);
|
|
}
|
|
|
|
public function test_only_requesting_user_can_read_refresh_status(): void
|
|
{
|
|
$request = $this->queue->enqueue(['20261001ABCDEF'], 1, 2);
|
|
$this->assertTrue($request['queued']);
|
|
$this->assertSame('pending', $this->queue->status($request['token'], 1, 2)['status']);
|
|
$this->assertNull($this->queue->status($request['token'], 1, 3));
|
|
$this->assertNull($this->queue->status($request['token'], 2, 2));
|
|
}
|
|
|
|
public function test_refresh_request_can_be_claimed_and_completed(): void
|
|
{
|
|
$request = $this->queue->enqueue(['20261001ABCDEF', '20261002ABCDEF'], 1, 2);
|
|
$claimed = $this->queue->claimNext();
|
|
|
|
$this->assertSame($request['token'], $claimed['token']);
|
|
$this->assertSame(
|
|
['20261001ABCDEF', '20261002ABCDEF'],
|
|
$claimed['business_ids'],
|
|
);
|
|
$this->assertSame('processing', $this->queue->status($request['token'], 1, 2)['status']);
|
|
|
|
$this->queue->complete($request['token'], ['status' => 'succeeded']);
|
|
|
|
$status = $this->queue->status($request['token'], 1, 2);
|
|
$this->assertSame('completed', $status['status']);
|
|
$this->assertSame(2, $status['count']);
|
|
$this->assertNull($status['error']);
|
|
}
|
|
|
|
public function test_empty_or_invalid_business_ids_do_not_create_a_request(): void
|
|
{
|
|
$this->assertSame(
|
|
['queued' => false, 'token' => null, 'count' => 0],
|
|
$this->queue->enqueue([], 1, 2),
|
|
);
|
|
$this->assertSame(
|
|
['queued' => false, 'token' => null, 'count' => 0],
|
|
$this->queue->enqueue(['invalid id'], 1, 2),
|
|
);
|
|
}
|
|
|
|
public function test_command_processes_the_next_refresh_request(): void
|
|
{
|
|
$request = $this->queue->enqueue(['20261001ABCDEF'], 1, 2);
|
|
$synchronizer = \Mockery::mock(DingProcessDetailMirrorSynchronizer::class);
|
|
$synchronizer->shouldReceive('syncBusinessIds')
|
|
->once()
|
|
->with(['20261001ABCDEF'])
|
|
->andReturn(['status' => 'succeeded', 'workflows' => 1]);
|
|
$this->app->instance(DingProcessDetailMirrorSynchronizer::class, $synchronizer);
|
|
|
|
$this->artisan('business-mirror:process-ding-refresh-requests')
|
|
->assertSuccessful();
|
|
|
|
$this->assertSame(
|
|
'completed',
|
|
$this->queue->status($request['token'], 1, 2)['status'],
|
|
);
|
|
}
|
|
}
|