Path: blob/1.0-develop/tests/Integration/Api/Application/ApplicationApiIntegrationTestCase.php
7460 views
<?php12namespace Pterodactyl\Tests\Integration\Api\Application;34use Illuminate\Http\Request;5use Pterodactyl\Models\User;6use PHPUnit\Framework\Assert;7use Pterodactyl\Models\ApiKey;8use Pterodactyl\Services\Acl\Api\AdminAcl;9use Pterodactyl\Tests\Integration\IntegrationTestCase;10use Illuminate\Foundation\Testing\DatabaseTransactions;11use Pterodactyl\Tests\Traits\Integration\CreatesTestModels;12use Pterodactyl\Transformers\Api\Application\BaseTransformer;13use Pterodactyl\Transformers\Api\Client\BaseClientTransformer;14use Pterodactyl\Tests\Traits\Http\IntegrationJsonRequestAssertions;1516abstract class ApplicationApiIntegrationTestCase extends IntegrationTestCase17{18use CreatesTestModels;19use DatabaseTransactions;20use IntegrationJsonRequestAssertions;2122private ApiKey $key;2324private User $user;2526/**27* Bootstrap application API tests. Creates a default admin user and associated API key28* and also sets some default headers required for accessing the API.29*/30public function setUp(): void31{32parent::setUp();3334$this->user = $this->createApiUser();35$this->key = $this->createApiKey($this->user);3637$this38->withHeader('Accept', 'application/vnd.pterodactyl.v1+json')39->withHeader('Authorization', 'Bearer ' . $this->key->identifier . decrypt($this->key->token));40}4142public function getApiUser(): User43{44return $this->user;45}4647public function getApiKey(): ApiKey48{49return $this->key;50}5152/**53* Creates a new default API key and refreshes the headers using it.54*/55protected function createNewDefaultApiKey(User $user, array $permissions = []): ApiKey56{57$this->key = $this->createApiKey($user, $permissions);5859$this->withHeader('Authorization', 'Bearer ' . $this->key->identifier . decrypt($this->key->token));6061return $this->key;62}6364/**65* Create an administrative user.66*/67protected function createApiUser(): User68{69return User::factory()->create([70'root_admin' => true,71]);72}7374/**75* Create a new application API key for a given user model.76*/77protected function createApiKey(User $user, array $permissions = []): ApiKey78{79return ApiKey::factory()->create(array_merge([80'user_id' => $user->id,81'key_type' => ApiKey::TYPE_APPLICATION,82'r_servers' => AdminAcl::READ | AdminAcl::WRITE,83'r_nodes' => AdminAcl::READ | AdminAcl::WRITE,84'r_allocations' => AdminAcl::READ | AdminAcl::WRITE,85'r_users' => AdminAcl::READ | AdminAcl::WRITE,86'r_locations' => AdminAcl::READ | AdminAcl::WRITE,87'r_nests' => AdminAcl::READ | AdminAcl::WRITE,88'r_eggs' => AdminAcl::READ | AdminAcl::WRITE,89'r_database_hosts' => AdminAcl::READ | AdminAcl::WRITE,90'r_server_databases' => AdminAcl::READ | AdminAcl::WRITE,91], $permissions));92}9394/**95* Return a transformer that can be used for testing purposes.96*/97protected function getTransformer(string $abstract): BaseTransformer98{99$request = Request::createFromGlobals();100$request->setUserResolver(function () {101return $this->getApiKey()->user;102});103104$transformer = $abstract::fromRequest($request);105106Assert::assertInstanceOf(BaseTransformer::class, $transformer);107Assert::assertNotInstanceOf(BaseClientTransformer::class, $transformer);108109return $transformer;110}111}112113114