artisan('client:toggle-status', ['identifier' => $invalidId]) // THEN ->expectsOutput("Invalid client identifier '{$invalidId}'. Expected a valid client identifier.") ->assertFailed(); }); it('errors when client does not exist', function (): void { // GIVEN /** @var \Tests\TestCase $this */ $nonExistentId = 'arcadia_id_' . str_repeat('9', 32); // WHEN $this->artisan('client:toggle-status', ['identifier' => $nonExistentId]) // THEN ->expectsOutput("Client '{$nonExistentId}' not found.") ->assertFailed(); }); it('toggles an active client to inactive when no status argument is passed', function (): void { // GIVEN /** @var \Tests\TestCase $this */ $client = ApiClient::query()->create([ 'id' => (string) Uuid::uuid7(), 'name' => 'Production Gateway', 'slug' => 'test-' . uniqid(), 'identifier' => 'arcadia_id_' . str_repeat('a', 32), 'secret' => 'arcadia_sec_' . str_repeat('b', 86), 'is_active' => true, ]); // WHEN $this->artisan('client:toggle-status', ['identifier' => (string) $client->identifier->value]) // THEN ->expectsOutput("Client 'Production Gateway' (ID: {$client->id}) is now Inactive.") ->assertSuccessful(); $client->refresh(); expect($client->is_active)->toBeFalse(); }); it('toggles an inactive client to active when no status argument is passed', function (): void { // GIVEN /** @var \Tests\TestCase $this */ $client = ApiClient::query()->create([ 'id' => (string) Uuid::uuid7(), 'name' => 'Backup Gateway', 'slug' => 'test-' . uniqid(), 'identifier' => 'arcadia_id_' . str_repeat('c', 32), 'secret' => 'arcadia_sec_' . str_repeat('d', 86), 'is_active' => false, ]); // WHEN $this->artisan('client:toggle-status', ['identifier' => (string) $client->identifier->value]) // THEN ->expectsOutput("Client 'Backup Gateway' (ID: {$client->id}) is now Active.") ->assertSuccessful(); $client->refresh(); expect($client->is_active)->toBeTrue(); }); it('activates an inactive client when activate status is passed', function (): void { // GIVEN /** @var \Tests\TestCase $this */ $client = ApiClient::query()->create([ 'id' => (string) Uuid::uuid7(), 'name' => 'Special Gateway', 'slug' => 'test-' . uniqid(), 'identifier' => 'arcadia_id_' . str_repeat('e', 32), 'secret' => 'arcadia_sec_' . str_repeat('f', 86), 'is_active' => false, ]); // WHEN $this->artisan('client:toggle-status', ['identifier' => (string) $client->identifier->value, 'status' => 'activate']) // THEN ->expectsOutput("Client 'Special Gateway' (ID: {$client->id}) is now Active.") ->assertSuccessful(); $client->refresh(); expect($client->is_active)->toBeTrue(); }); it('deactivates an active client when deactivate status is passed', function (): void { // GIVEN /** @var \Tests\TestCase $this */ $client = ApiClient::query()->create([ 'id' => (string) Uuid::uuid7(), 'name' => 'Special Gateway', 'slug' => 'test-' . uniqid(), 'identifier' => 'arcadia_id_' . str_repeat('g', 32), 'secret' => 'arcadia_sec_' . str_repeat('h', 86), 'is_active' => true, ]); // WHEN $this->artisan('client:toggle-status', ['identifier' => (string) $client->identifier->value, 'status' => 'deactivate']) // THEN ->expectsOutput("Client 'Special Gateway' (ID: {$client->id}) is now Inactive.") ->assertSuccessful(); $client->refresh(); expect($client->is_active)->toBeFalse(); }); it('errors when an invalid status is passed', function (): void { // GIVEN /** @var \Tests\TestCase $this */ $identifier = 'arcadia_id_' . str_repeat('z', 32); ApiClient::query()->create([ 'id' => (string) Uuid::uuid7(), 'name' => 'Some Gateway', 'slug' => 'test-' . uniqid(), 'identifier' => $identifier, 'secret' => 'arcadia_sec_' . str_repeat('z', 86), 'is_active' => true, ]); // WHEN $this->artisan('client:toggle-status', ['identifier' => $identifier, 'status' => 'unknown']) // THEN ->expectsOutput("Invalid status 'unknown'. Expected 'activate' or 'deactivate'.") ->assertFailed(); }); it('provides autocompletion suggestions for identifier', function (): void { // GIVEN /** @var \Tests\TestCase $this */ ApiClient::query()->delete(); ApiClient::query()->create([ 'id' => (string) Uuid::uuid7(), 'name' => 'Production Gateway', 'slug' => 'test-' . uniqid(), 'identifier' => 'arcadia_id_' . str_repeat('a', 32), 'secret' => 'arcadia_sec_' . str_repeat('b', 86), 'is_active' => true, ]); ApiClient::query()->create([ 'id' => (string) Uuid::uuid7(), 'name' => 'Backup Gateway', 'slug' => 'test-' . uniqid(), 'identifier' => 'arcadia_id_' . str_repeat('c', 32), 'secret' => 'arcadia_sec_' . str_repeat('d', 86), 'is_active' => false, ]); /** @var ToggleClientStatusCommand $command */ $command = app(ToggleClientStatusCommand::class); $tester = new CommandCompletionTester($command); // WHEN $suggestions = $tester->complete(['']); // THEN expect($suggestions) ->toContain('arcadia_id_' . str_repeat('a', 32)) ->toContain('arcadia_id_' . str_repeat('c', 32)); }); it('provides autocompletion suggestions for status argument', function (): void { // GIVEN /** @var \Tests\TestCase $this */ /** @var ToggleClientStatusCommand $command */ $command = app(ToggleClientStatusCommand::class); $tester = new CommandCompletionTester($command); $someId = 'arcadia_id_' . str_repeat('1', 32); // WHEN $suggestions = $tester->complete([$someId, '']); // THEN expect($suggestions) ->toContain('activate') ->toContain('deactivate'); }); });