Files
panel/tests/Integration/Api/Client/Server/Files/CompressFilesTest.php
2025-12-24 17:32:53 -08:00

46 lines
1.7 KiB
PHP

<?php
namespace Pterodactyl\Tests\Integration\Api\Client\Server\Files;
use Mockery\MockInterface;
use Pterodactyl\Models\Permission;
use Pterodactyl\Repositories\Wings\DaemonFileRepository;
use Pterodactyl\Tests\Integration\Api\Client\ClientApiIntegrationTestCase;
class CompressFilesTest extends ClientApiIntegrationTestCase
{
public function testEndpointRequiresAuthorization(): void
{
[$user, $server] = $this->generateTestAccount([Permission::ACTION_CONTROL_CONSOLE]);
$this->postJson($this->link($server, '/files/compress'))->assertUnauthorized();
$this->actingAs($user)
->postJson($this->link($server, '/files/compress'))
->assertForbidden();
}
public function testEndpointTriggersWingsCall(): void
{
[$user, $server] = $this->generateTestAccount([Permission::ACTION_FILE_ARCHIVE]);
$this->mock(DaemonFileRepository::class, function (MockInterface $mock) {
$mock->expects('setServer->compressFiles')->with('/', ['test.txt'])->andReturn([
'name' => 'test.tar.gz',
'mime' => 'application/gzip',
]);
});
$this->actingAs($user)
->postJson($endpoint = $this->link($server, '/files/compress'), [])
->assertUnprocessable()
->assertJsonPath('errors.0.meta', ['source_field' => 'files', 'rule' => 'required']);
$this->postJson($endpoint, ['root' => '/', 'files' => ['test.txt']])
->assertOk()
->assertJsonPath('object', 'file_object')
->assertJsonPath('attributes.name', 'test.tar.gz')
->assertJsonPath('attributes.mimetype', 'application/gzip');
}
}