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"
|
- 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'
|
- cat vendor/laravel/framework/src/Illuminate/Foundation/Application.php| grep 'const VERSION'
|
||||||
|
|
||||||
script: ./test
|
script: ./fulltest
|
||||||
|
|
||||||
after_success:
|
after_success:
|
||||||
- bash <(curl -s https://codecov.io/bash)
|
- 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.');
|
$this->info('Listing all tenants.');
|
||||||
tenancy()->all()->each(function ($tenant) {
|
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\Migrate::class,
|
||||||
Commands\Rollback::class,
|
Commands\Rollback::class,
|
||||||
Commands\TenantList::class,
|
Commands\TenantList::class,
|
||||||
|
Commands\CreateTenant::class,
|
||||||
Commands\MigrateFresh::class,
|
Commands\MigrateFresh::class,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
|
||||||
3
test
3
test
|
|
@ -1,10 +1,7 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# for development
|
|
||||||
docker-compose up -d
|
|
||||||
printf "Variant 1\n\n"
|
printf "Variant 1\n\n"
|
||||||
docker-compose exec test env TENANCY_TEST_STORAGE_DRIVER=db vendor/bin/phpunit --coverage-php coverage/2.cov "$@"
|
docker-compose exec test env TENANCY_TEST_STORAGE_DRIVER=db vendor/bin/phpunit --coverage-php coverage/2.cov "$@"
|
||||||
printf "Variant 2\n\n"
|
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 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');
|
Artisan::call('tenants:migrate-fresh');
|
||||||
$this->assertFalse(DB::table('users')->exists());
|
$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