CaiWuXiTong/tests/Unit/EcommerceFinance/DingProcessRefreshQueueTest.php
yueyang 7b8a5e1214 feat: 增加OA进行中流程按需刷新 (#785)
页面进入时仅异步刷新当前页审批中的流程,并自动载入最新镜像。
2026-10-30 15:04:43 +08:00

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'],
);
}
}