1
0
Fork 0
mirror of https://github.com/archtechx/tenancy.git synced 2025-12-12 17:04:04 +00:00

[2.x] Add CreateTenant command (#153)

* Add CreateTenant command, fix TenantList output

* Create command test
This commit is contained in:
Samuel Štancl 2019-10-04 20:22:23 +02:00 committed by GitHub
parent 40f8fa346e
commit d4472469f0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 69 additions and 5 deletions

View file

@ -20,7 +20,7 @@ before_script:
- export DB_USERNAME=root DB_PASSWORD="" DB_DATABASE=tenancy CODECOV_TOKEN="24382d15-84e7-4a55-bea4-c4df96a24a9b"
- cat vendor/laravel/framework/src/Illuminate/Foundation/Application.php| grep 'const VERSION'
script: ./test
script: ./fulltest
after_success:
- bash <(curl -s https://codecov.io/bash)

7
fulltest Executable file
View file

@ -0,0 +1,7 @@
#!/bin/bash
set -e
# for development
docker-compose up -d
./test "$@"
docker-compose exec test vendor/bin/phpcov merge --clover clover.xml coverage/

View file

@ -0,0 +1,47 @@
<?php
declare(strict_types=1);
namespace Stancl\Tenancy\Commands;
use Illuminate\Console\Command;
use Stancl\Tenancy\Tenant;
class CreateTenant extends Command
{
protected $signature = 'tenants:create
{--d|domain=* : The tenant\'s domains.}
{data?* : The tenant\'s data. Separate keys and values by `=`, e.g. `plan=free`.}';
protected $description = 'Create a tenant.';
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$tenant = Tenant::new()
->withDomains($this->getDomains())
->withData($this->getData())
->save();
$this->info($tenant->id);
}
public function getDomains(): array
{
return $this->option('domain');
}
public function getData(): array
{
return array_reduce($this->argument('data'), function ($data, $pair) {
[$key, $value] = explode('=', $pair, 2);
$data[$key] = $value;
return $data;
}, []);
}
}

View file

@ -31,7 +31,7 @@ class TenantList extends Command
{
$this->info('Listing all tenants.');
tenancy()->all()->each(function ($tenant) {
$this->line("[Tenant] id: {$tenant['id']} @ ", implode('; ', $tenant->domains));
$this->line("[Tenant] id: {$tenant['id']} @ " . implode('; ', $tenant->domains));
});
}
}

View file

@ -65,6 +65,7 @@ class TenancyServiceProvider extends ServiceProvider
Commands\Migrate::class,
Commands\Rollback::class,
Commands\TenantList::class,
Commands\CreateTenant::class,
Commands\MigrateFresh::class,
]);

3
test
View file

@ -1,10 +1,7 @@
#!/bin/bash
set -e
# for development
docker-compose up -d
printf "Variant 1\n\n"
docker-compose exec test env TENANCY_TEST_STORAGE_DRIVER=db vendor/bin/phpunit --coverage-php coverage/2.cov "$@"
printf "Variant 2\n\n"
docker-compose exec test env TENANCY_TEST_STORAGE_DRIVER=redis vendor/bin/phpunit --coverage-php coverage/1.cov "$@"
docker-compose exec test vendor/bin/phpcov merge --clover clover.xml coverage/

View file

@ -156,4 +156,16 @@ class CommandsTest extends TestCase
Artisan::call('tenants:migrate-fresh');
$this->assertFalse(DB::table('users')->exists());
}
/** @test */
public function create_command_works()
{
Artisan::call('tenants:create -d aaa.localhost -d bbb.localhost plan=free email=foo@test.local');
$tenant = tenancy()->all()[1]; // a tenant is autocreated prior to this
$data = $tenant->data;
unset($data['id']);
$this->assertSame(['plan' => 'free', 'email' => 'foo@test.local'], $data);
$this->assertSame(['aaa.localhost', 'bbb.localhost'], $tenant->domains);
}
}