misc_pterodactyl-panel/tests/Integration/Http/Controllers/Admin/UserControllerTest.php

60 lines
2.4 KiB
PHP
Raw Permalink Normal View History

<?php
namespace Pterodactyl\Tests\Integration\Http\Controllers\Admin;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
use Pterodactyl\Models\User;
use Pterodactyl\Models\Subuser;
use Illuminate\Pagination\LengthAwarePaginator;
use Pterodactyl\Http\Controllers\Admin\UserController;
use Pterodactyl\Tests\Integration\IntegrationTestCase;
class UserControllerTest extends IntegrationTestCase
{
/**
* Test that the index route controller for the user listing returns the expected user
* data with the number of servers they are assigned to, and the number of servers they
* are a subuser of.
*
* @see https://github.com/pterodactyl/panel/issues/2469
*/
public function testIndexReturnsExpectedData()
{
$unique = Str::random(16);
$users = [
User::factory()->create(['username' => $unique . '_1']),
User::factory()->create(['username' => $unique . '_2']),
];
$servers = [
$this->createServerModel(['owner_id' => $users[0]->id]),
$this->createServerModel(['owner_id' => $users[0]->id]),
$this->createServerModel(['owner_id' => $users[0]->id]),
$this->createServerModel(['owner_id' => $users[1]->id]),
];
Subuser::query()->forceCreate(['server_id' => $servers[0]->id, 'user_id' => $users[1]->id]);
Subuser::query()->forceCreate(['server_id' => $servers[1]->id, 'user_id' => $users[1]->id]);
/** @var \Pterodactyl\Http\Controllers\Admin\UserController $controller */
$controller = $this->app->make(UserController::class);
$request = Request::create('/admin/users?filter[username]=' . $unique, 'GET');
$this->app->instance(Request::class, $request);
$data = $controller->index($request)->getData();
$this->assertArrayHasKey('users', $data);
$this->assertInstanceOf(LengthAwarePaginator::class, $data['users']);
/** @var \Pterodactyl\Models\User[] $response */
$response = $data['users']->items();
$this->assertCount(2, $response);
$this->assertInstanceOf(User::class, $response[0]);
$this->assertSame(3, (int) $response[0]->servers_count);
$this->assertSame(0, (int) $response[0]->subuser_of_count);
$this->assertSame(1, (int) $response[1]->servers_count);
$this->assertSame(2, (int) $response[1]->subuser_of_count);
}
}