Path: blob/1.0-develop/tests/Integration/Services/Backups/DeleteBackupServiceTest.php
7460 views
<?php12namespace Pterodactyl\Tests\Integration\Services\Backups;34use GuzzleHttp\Psr7\Request;5use GuzzleHttp\Psr7\Response;6use Pterodactyl\Models\Backup;7use GuzzleHttp\Exception\ClientException;8use Pterodactyl\Extensions\Backups\BackupManager;9use Pterodactyl\Extensions\Filesystem\S3Filesystem;10use Pterodactyl\Services\Backups\DeleteBackupService;11use Pterodactyl\Tests\Integration\IntegrationTestCase;12use Pterodactyl\Repositories\Wings\DaemonBackupRepository;13use Pterodactyl\Exceptions\Service\Backup\BackupLockedException;14use Pterodactyl\Exceptions\Http\Connection\DaemonConnectionException;1516class DeleteBackupServiceTest extends IntegrationTestCase17{18public function testLockedBackupCannotBeDeleted()19{20$server = $this->createServerModel();21$backup = Backup::factory()->create([22'server_id' => $server->id,23'is_locked' => true,24]);2526$this->expectException(BackupLockedException::class);2728$this->app->make(DeleteBackupService::class)->handle($backup);29}3031public function testFailedBackupThatIsLockedCanBeDeleted()32{33$server = $this->createServerModel();34$backup = Backup::factory()->create([35'server_id' => $server->id,36'is_locked' => true,37'is_successful' => false,38]);3940$mock = $this->mock(DaemonBackupRepository::class);41$mock->expects('setServer->delete')->with($backup)->andReturn(new Response());4243$this->app->make(DeleteBackupService::class)->handle($backup);4445$backup->refresh();4647$this->assertNotNull($backup->deleted_at);48}4950public function testExceptionThrownDueToMissingBackupIsIgnored()51{52$server = $this->createServerModel();53$backup = Backup::factory()->create(['server_id' => $server->id]);5455$mock = $this->mock(DaemonBackupRepository::class);56$mock->expects('setServer->delete')->with($backup)->andThrow(57new DaemonConnectionException(58new ClientException('', new Request('DELETE', '/'), new Response(404))59)60);6162$this->app->make(DeleteBackupService::class)->handle($backup);6364$backup->refresh();6566$this->assertNotNull($backup->deleted_at);67}6869public function testExceptionIsThrownIfNot404()70{71$server = $this->createServerModel();72$backup = Backup::factory()->create(['server_id' => $server->id]);7374$mock = $this->mock(DaemonBackupRepository::class);75$mock->expects('setServer->delete')->with($backup)->andThrow(76new DaemonConnectionException(77new ClientException('', new Request('DELETE', '/'), new Response(500))78)79);8081$this->expectException(DaemonConnectionException::class);8283$this->app->make(DeleteBackupService::class)->handle($backup);8485$backup->refresh();8687$this->assertNull($backup->deleted_at);88}8990public function testS3ObjectCanBeDeleted()91{92$server = $this->createServerModel();93$backup = Backup::factory()->create([94'disk' => Backup::ADAPTER_AWS_S3,95'server_id' => $server->id,96]);9798$manager = $this->mock(BackupManager::class);99$adapter = $this->mock(S3Filesystem::class);100101$manager->expects('adapter')->with(Backup::ADAPTER_AWS_S3)->andReturn($adapter);102103$adapter->expects('getBucket')->andReturn('foobar');104$adapter->expects('getClient->deleteObject')->with([105'Bucket' => 'foobar',106'Key' => sprintf('%s/%s.tar.gz', $server->uuid, $backup->uuid),107]);108109$this->app->make(DeleteBackupService::class)->handle($backup);110111$this->assertSoftDeleted($backup);112}113}114115116