Expose Care service-token APIs to create queues and counters.
Deploy Ladill Queue / deploy (push) Successful in 1m0s
Deploy Ladill Queue / deploy (push) Successful in 1m0s
Specialty module activation needs idempotent queue/counter upserts (by external_key or name+branch) plus soft deactivate, without opening Queue admin for each Care specialty. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -97,4 +97,115 @@ class CareIntegrationTest extends TestCase
|
||||
$this->assertSame('uuid', (new Counter)->getRouteKeyName());
|
||||
$this->assertSame('uuid', (new ServiceQueue)->getRouteKeyName());
|
||||
}
|
||||
|
||||
public function test_care_can_create_queue_and_counter_idempotently(): void
|
||||
{
|
||||
$owner = 'care-owner-uuid';
|
||||
$headers = $this->careHeaders($owner);
|
||||
$this->provisionCareOrg($owner);
|
||||
|
||||
$queueResponse = $this->postJson('/api/v1/queues', [
|
||||
'owner' => $owner,
|
||||
'name' => 'Dentistry',
|
||||
'prefix' => 'DEN',
|
||||
'branch_name' => 'Main',
|
||||
'external_key' => 'care:specialty:dentistry:queue:1',
|
||||
'strategy' => 'fifo',
|
||||
], $headers)
|
||||
->assertCreated()
|
||||
->assertJsonPath('data.name', 'Dentistry')
|
||||
->assertJsonPath('data.external_key', 'care:specialty:dentistry:queue:1');
|
||||
|
||||
$queueUuid = $queueResponse->json('data.uuid');
|
||||
|
||||
$this->postJson('/api/v1/queues', [
|
||||
'owner' => $owner,
|
||||
'name' => 'Dentistry Desk',
|
||||
'prefix' => 'DEN',
|
||||
'branch_name' => 'Main',
|
||||
'external_key' => 'care:specialty:dentistry:queue:1',
|
||||
'strategy' => 'fifo',
|
||||
], $headers)
|
||||
->assertOk()
|
||||
->assertJsonPath('data.uuid', $queueUuid)
|
||||
->assertJsonPath('data.name', 'Dentistry Desk');
|
||||
|
||||
$this->assertSame(1, ServiceQueue::owned($owner)->count());
|
||||
|
||||
$counterResponse = $this->postJson('/api/v1/counters', [
|
||||
'owner' => $owner,
|
||||
'name' => 'Dentistry counter',
|
||||
'branch_name' => 'Main',
|
||||
'queue_uuids' => [$queueUuid],
|
||||
'external_key' => 'care:specialty:dentistry:counter:1',
|
||||
], $headers)
|
||||
->assertCreated()
|
||||
->assertJsonPath('data.name', 'Dentistry counter')
|
||||
->assertJsonPath('data.branch', 'Main')
|
||||
->assertJsonPath('data.queues.0.uuid', $queueUuid);
|
||||
|
||||
$counterUuid = $counterResponse->json('data.uuid');
|
||||
|
||||
$this->postJson('/api/v1/counters', [
|
||||
'owner' => $owner,
|
||||
'name' => 'Dentistry counter',
|
||||
'branch_name' => 'Main',
|
||||
'queue_uuids' => [$queueUuid],
|
||||
'external_key' => 'care:specialty:dentistry:counter:1',
|
||||
], $headers)
|
||||
->assertOk()
|
||||
->assertJsonPath('data.uuid', $counterUuid);
|
||||
|
||||
$this->assertSame(1, Counter::owned($owner)->count());
|
||||
|
||||
$this->getJson('/api/v1/counters?owner='.$owner, $headers)
|
||||
->assertOk()
|
||||
->assertJsonPath('data.0.uuid', $counterUuid)
|
||||
->assertJsonPath('data.0.branch', 'Main')
|
||||
->assertJsonPath('data.0.queues.0.name', 'Dentistry Desk');
|
||||
}
|
||||
|
||||
public function test_care_can_soft_deactivate_counter(): void
|
||||
{
|
||||
$owner = 'care-owner-uuid';
|
||||
$headers = $this->careHeaders($owner);
|
||||
$organization = $this->provisionCareOrg($owner);
|
||||
$branch = Branch::owned($owner)->where('organization_id', $organization->id)->firstOrFail();
|
||||
$counter = Counter::create([
|
||||
'owner_ref' => $owner,
|
||||
'organization_id' => $organization->id,
|
||||
'branch_id' => $branch->id,
|
||||
'name' => 'Eye care counter',
|
||||
'status' => 'offline',
|
||||
'is_active' => true,
|
||||
]);
|
||||
|
||||
$this->patchJson('/api/v1/counters/'.$counter->uuid, [
|
||||
'owner' => $owner,
|
||||
'is_active' => false,
|
||||
], $headers)
|
||||
->assertOk()
|
||||
->assertJsonPath('data.is_active', false);
|
||||
|
||||
$this->assertFalse($counter->fresh()->is_active);
|
||||
$this->assertDatabaseHas('queue_counters', ['id' => $counter->id]);
|
||||
}
|
||||
|
||||
public function test_care_can_ensure_branch_by_name_idempotently(): void
|
||||
{
|
||||
$owner = 'care-owner-uuid';
|
||||
$headers = $this->careHeaders($owner);
|
||||
$this->provisionCareOrg($owner);
|
||||
|
||||
// Free plan is capped at 1 branch; provision already created Main — upsert must not duplicate.
|
||||
$this->postJson('/api/v1/branches', [
|
||||
'owner' => $owner,
|
||||
'name' => 'Main',
|
||||
], $headers)
|
||||
->assertOk()
|
||||
->assertJsonPath('data.name', 'Main')
|
||||
->assertJsonPath('data.is_active', true);
|
||||
|
||||
$this->assertSame(1, Branch::owned($owner)->count());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user