mirror of
https://github.com/archtechx/tenancy.git
synced 2025-12-12 19:34:04 +00:00
[2.x] Add CreateTenant command (#153)
* Add CreateTenant command, fix TenantList output * Create command test
This commit is contained in:
parent
40f8fa346e
commit
d4472469f0
7 changed files with 69 additions and 5 deletions
|
|
@ -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
7
fulltest
Executable 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/
|
||||
47
src/Commands/CreateTenant.php
Normal file
47
src/Commands/CreateTenant.php
Normal 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;
|
||||
}, []);
|
||||
}
|
||||
}
|
||||
|
|
@ -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));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
3
test
|
|
@ -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/
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue