diff --git a/src/app/Console/Commands/Domain/StatusCommand.php b/src/app/Console/Commands/Domain/StatusCommand.php --- a/src/app/Console/Commands/Domain/StatusCommand.php +++ b/src/app/Console/Commands/Domain/StatusCommand.php @@ -28,7 +28,7 @@ */ public function handle() { - $domain = $this->getDomain($this->argument('domain')); + $domain = $this->getDomain($this->argument('domain'), true); if (!$domain) { $this->error("Domain not found."); @@ -39,17 +39,25 @@ 'active' => Domain::STATUS_ACTIVE, 'suspended' => Domain::STATUS_SUSPENDED, 'deleted' => Domain::STATUS_DELETED, - 'ldapReady' => Domain::STATUS_LDAP_READY, - 'verified' => Domain::STATUS_VERIFIED, 'confirmed' => Domain::STATUS_CONFIRMED, + 'verified' => Domain::STATUS_VERIFIED, + 'ldapReady' => Domain::STATUS_LDAP_READY, ]; - foreach ($statuses as $text => $bit) { - $func = 'is' . \ucfirst($text); + $domain_state = []; - $this->info(sprintf("%d %s: %s", $bit, $text, $domain->$func())); + foreach ($statuses as $text => $bit) { + if ($text == 'deleted') { + $status = $domain->trashed(); + } else { + $status = $domain->{'is' . \ucfirst($text)}(); + } + + if ($status) { + $domain_state[] = "$text ($bit)"; + } } - $this->info("In total: {$domain->status}"); + $this->info("Status ({$domain->status}): " . \implode(', ', $domain_state)); } } diff --git a/src/app/Console/Commands/User/StatusCommand.php b/src/app/Console/Commands/User/StatusCommand.php --- a/src/app/Console/Commands/User/StatusCommand.php +++ b/src/app/Console/Commands/User/StatusCommand.php @@ -32,7 +32,6 @@ if (!$user) { $this->error("User not found."); - $this->error("Try ./artisan scalpel:user:read --attr=email --attr=tenant_id " . $this->argument('user')); return 1; } @@ -47,13 +46,18 @@ $user_state = []; - foreach (\array_keys($statuses) as $state) { - $func = 'is' . \ucfirst($state); - if ($user->$func()) { - $user_state[] = $state; + foreach ($statuses as $text => $bit) { + if ($text == 'deleted') { + $status = $user->trashed(); + } else { + $status = $user->{'is' . \ucfirst($text)}(); + } + + if ($status) { + $user_state[] = "$text ($bit)"; } } - $this->info("Status: " . \implode(',', $user_state)); + $this->info("Status ({$user->status}): " . \implode(', ', $user_state)); } } diff --git a/src/tests/Feature/Console/Domain/StatusTest.php b/src/tests/Feature/Console/Domain/StatusTest.php --- a/src/tests/Feature/Console/Domain/StatusTest.php +++ b/src/tests/Feature/Console/Domain/StatusTest.php @@ -2,29 +2,63 @@ namespace Tests\Feature\Console\Domain; +use Illuminate\Support\Facades\Queue; use Tests\TestCase; class StatusTest extends TestCase { /** + * {@inheritDoc} + */ + public function setUp(): void + { + parent::setUp(); + + $this->deleteTestDomain('domain-delete.com'); + } + + /** + * {@inheritDoc} + */ + public function tearDown(): void + { + $this->deleteTestDomain('domain-delete.com'); + + parent::tearDown(); + } + + /** * Test the command */ public function testHandle(): void { + Queue::fake(); + // Non-existing domain $code = \Artisan::call("domain:status unknown.org"); $output = trim(\Artisan::output()); $this->assertSame(1, $code); $this->assertSame("Domain not found.", $output); - // Existing domain $code = \Artisan::call("domain:status kolab.org"); $output = trim(\Artisan::output()); $this->assertSame(0, $code); + $this->assertSame("Status (114): active (2), confirmed (16), verified (32), ldapReady (64)", $output); - $this->assertTrue(strpos($output, "In total: 114") !== false); + // Test deleted domain + $user = $this->getTestUser('john@kolab.org'); + $domain = $this->getTestDomain('domain-delete.com', [ + 'status' => \App\Domain::STATUS_NEW, + 'type' => \App\Domain::TYPE_HOSTED, + ]); + $package_domain = \App\Package::where('title', 'domain-hosting')->first(); + $domain->assignPackage($package_domain, $user); + $domain->delete(); - // TODO: More precise output testing + $code = \Artisan::call("domain:status {$domain->namespace}"); + $output = trim(\Artisan::output()); + $this->assertSame(0, $code); + $this->assertSame("Status (1): deleted (8)", $output); } } diff --git a/src/tests/Feature/Console/User/StatusTest.php b/src/tests/Feature/Console/User/StatusTest.php --- a/src/tests/Feature/Console/User/StatusTest.php +++ b/src/tests/Feature/Console/User/StatusTest.php @@ -2,28 +2,60 @@ namespace Tests\Feature\Console\User; +use Illuminate\Support\Facades\Queue; use Tests\TestCase; class StatusTest extends TestCase { /** + * {@inheritDoc} + */ + public function setUp(): void + { + parent::setUp(); + + $this->deleteTestUser('user@force-delete.com'); + } + + /** + * {@inheritDoc} + */ + public function tearDown(): void + { + $this->deleteTestUser('user@force-delete.com'); + + parent::tearDown(); + } + + /** * Test command runs */ public function testHandle(): void { + Queue::fake(); + + // Non-existing user $code = \Artisan::call("user:status unknown"); $output = trim(\Artisan::output()); $this->assertSame(1, $code); - $this->assertSame( - "User not found.\nTry ./artisan scalpel:user:read --attr=email --attr=tenant_id unknown", - $output - ); + $this->assertSame("User not found.", $output); + // Existing user $code = \Artisan::call("user:status john@kolab.org"); $output = trim(\Artisan::output()); $this->assertSame(0, $code); - $this->assertSame("Status: active,ldapReady,imapReady", $output); + $this->assertSame("Status (51): active (2), ldapReady (16), imapReady (32)", $output); + + $user = $this->getTestUser('user@force-delete.com'); + $user->delete(); + + // Deleted user + $code = \Artisan::call("user:status {$user->email}"); + $output = trim(\Artisan::output()); + + $this->assertSame(0, $code); + $this->assertSame("Status (3): active (2), deleted (8)", $output); } }