Path: blob/1.0-develop/tests/Integration/Api/Client/ClientApiIntegrationTestCase.php
7459 views
<?php12namespace Pterodactyl\Tests\Integration\Api\Client;34use Pterodactyl\Models\Node;5use Pterodactyl\Models\Task;6use Pterodactyl\Models\User;7use Pterodactyl\Models\Model;8use Pterodactyl\Models\Backup;9use Pterodactyl\Models\Server;10use Pterodactyl\Models\Database;11use Pterodactyl\Models\Location;12use Pterodactyl\Models\Schedule;13use Illuminate\Support\Collection;14use Pterodactyl\Models\Allocation;15use Pterodactyl\Models\DatabaseHost;16use Pterodactyl\Tests\Integration\TestResponse;17use Pterodactyl\Tests\Integration\IntegrationTestCase;18use Illuminate\Database\Eloquent\Model as EloquentModel;19use Pterodactyl\Transformers\Api\Client\BaseClientTransformer;2021abstract class ClientApiIntegrationTestCase extends IntegrationTestCase22{23/**24* Cleanup after running tests.25*/26protected function tearDown(): void27{28Database::query()->forceDelete();29DatabaseHost::query()->forceDelete();30Backup::query()->forceDelete();31Server::query()->forceDelete();32Node::query()->forceDelete();33Location::query()->forceDelete();34User::query()->forceDelete();3536parent::tearDown();37}3839/**40* Override the default createTestResponse from Illuminate so that we can41* just dump 500-level errors to the screen in the tests without having42* to keep re-assigning variables.43*44* @param \Illuminate\Http\Response $response45* @param \Illuminate\Http\Request $request46*47* @return \Illuminate\Testing\TestResponse48*/49protected function createTestResponse($response, $request)50{51return TestResponse::fromBaseResponse($response, $request);52}5354/**55* Returns a link to the specific resource using the client API.56*/57protected function link(mixed $model, ?string $append = null): string58{59switch (get_class($model)) {60case Server::class:61$link = "/api/client/servers/$model->uuid";62break;63case Schedule::class:64$link = "/api/client/servers/{$model->server->uuid}/schedules/$model->id";65break;66case Task::class:67$link = "/api/client/servers/{$model->schedule->server->uuid}/schedules/{$model->schedule->id}/tasks/$model->id";68break;69case Allocation::class:70$link = "/api/client/servers/{$model->server->uuid}/network/allocations/$model->id";71break;72case Backup::class:73$link = "/api/client/servers/{$model->server->uuid}/backups/$model->uuid";74break;75default:76throw new \InvalidArgumentException(sprintf('Cannot create link for Model of type %s', class_basename($model)));77}7879return $link . ($append ? '/' . ltrim($append, '/') : '');80}8182/**83* Asserts that the data passed through matches the output of the data from the transformer. This84* will remove the "relationships" key when performing the comparison.85*/86protected function assertJsonTransformedWith(array $data, Model|EloquentModel $model)87{88$reflect = new \ReflectionClass($model);89$transformer = sprintf('\\Pterodactyl\\Transformers\\Api\\Client\\%sTransformer', $reflect->getShortName());9091$transformer = new $transformer();92$this->assertInstanceOf(BaseClientTransformer::class, $transformer);9394$this->assertSame(95$transformer->transform($model),96Collection::make($data)->except(['relationships'])->toArray()97);98}99}100101102