mivita/tests/Feature/DeleteAllKasSubdomainsCommandTest.php
Kevin 84238c7694 Subdomain-Cleanup-Commands
Neue Artisan-Commands DeleteAllKasSubdomains und DeletePartnerShopSubdomains
zum Aufraeumen von KAS-/Partnershop-Subdomains, jeweils mit Feature-Tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 13:37:45 +00:00

109 lines
3.6 KiB
PHP

<?php
use App\Http\Controllers\Api\KasController;
use Tests\TestCase;
uses(TestCase::class);
it('erstellt ohne force nur eine temporäre kas liste', function () {
$listFile = sys_get_temp_dir().'/kas-subdomains-dry-run-test-'.uniqid().'.json';
$kas = \Mockery::mock(KasController::class);
$kas->shouldReceive('action')
->once()
->with('get_subdomains')
->andReturn([
['subdomain_name' => 'api.mivita.care', 'subdomain_path' => '/api/public/', 'php_version' => '8.2'],
['subdomain_name' => 'shop.mivita.care', 'subdomain_path' => '/mein.mivita.care/public/', 'php_version' => '8.2'],
]);
$this->app->instance(KasController::class, $kas);
$this->artisan('subdomains:delete-all-kas', [
'--list-file' => $listFile,
])->assertSuccessful();
$data = json_decode(file_get_contents($listFile), true);
expect(file_exists($listFile))->toBeTrue();
expect($data['count'])->toBe(2);
expect($data['subdomains'])->toHaveCount(2);
expect($data['mode'])->toBe('dry-run');
@unlink($listFile);
});
it('löscht mit force alle subdomains aus der kas liste ohne datenbankabgleich', function () {
$listFile = sys_get_temp_dir().'/kas-subdomains-force-test-'.uniqid().'.json';
$kas = \Mockery::mock(KasController::class);
$kas->shouldReceive('action')
->once()
->with('get_subdomains')
->andReturn([
['subdomain_name' => 'api.mivita.care', 'subdomain_path' => '/api/public/'],
['subdomain_name' => 'preview.mivita.care', 'subdomain_path' => '/preview/public/'],
['subdomain_name' => 'partner.mivita.care', 'subdomain_path' => '/mein.mivita.care/public/'],
]);
$kas->shouldReceive('action')
->once()
->with('delete_subdomain', ['subdomain_name' => 'api.mivita.care'])
->andReturn('TRUE');
$kas->shouldReceive('action')
->once()
->with('delete_subdomain', ['subdomain_name' => 'partner.mivita.care'])
->andReturn('TRUE');
$kas->shouldReceive('action')
->once()
->with('delete_subdomain', ['subdomain_name' => 'preview.mivita.care'])
->andReturn('TRUE');
$this->app->instance(KasController::class, $kas);
$this->artisan('subdomains:delete-all-kas', [
'--force' => true,
'--list-file' => $listFile,
])->assertSuccessful();
$data = json_decode(file_get_contents($listFile), true);
expect($data['count'])->toBe(3);
expect($data['mode'])->toBe('delete');
@unlink($listFile);
});
it('kann optional auf eine hauptdomain und ein limit begrenzen', function () {
$listFile = sys_get_temp_dir().'/kas-subdomains-filter-test-'.uniqid().'.json';
$kas = \Mockery::mock(KasController::class);
$kas->shouldReceive('action')
->once()
->with('get_subdomains')
->andReturn([
['subdomain_name' => 'a.mivita.care'],
['subdomain_name' => 'b.mivita.care'],
['subdomain_name' => 'extern.example.com'],
]);
$kas->shouldReceive('action')
->once()
->with('delete_subdomain', ['subdomain_name' => 'a.mivita.care'])
->andReturn('TRUE');
$this->app->instance(KasController::class, $kas);
$this->artisan('subdomains:delete-all-kas', [
'--force' => true,
'--domain' => 'mivita.care',
'--limit' => 1,
'--list-file' => $listFile,
])->assertSuccessful();
$data = json_decode(file_get_contents($listFile), true);
expect($data['count'])->toBe(1);
expect($data['domain_filter'])->toBe('mivita.care');
expect($data['subdomains'])->toHaveCount(1);
@unlink($listFile);
});