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