generateTestAccount($permissions); $originalName = $server->name; $originalDescription = $server->description; $response = $this->actingAs($user)->postJson("/api/client/servers/$server->uuid/settings/rename", [ 'name' => '', 'description' => '', ]); $response->assertStatus(Response::HTTP_UNPROCESSABLE_ENTITY); $response->assertJsonPath('errors.0.meta.rule', 'required'); $server = $server->refresh(); $this->assertSame($originalName, $server->name); $this->assertSame($originalDescription, $server->description); $this->actingAs($user) ->postJson("/api/client/servers/$server->uuid/settings/rename", [ 'name' => 'Test Server Name', 'description' => 'This is a test server.', ]) ->assertStatus(Response::HTTP_NO_CONTENT); $server = $server->refresh(); $this->assertSame('Test Server Name', $server->name); $this->assertSame('This is a test server.', $server->description); } /** * Test that a subuser receives a permissions error if they do not have the required permission * and attempt to change the name. */ public function testSubuserCannotChangeServerNameWithoutPermission() { [$user, $server] = $this->generateTestAccount([Permission::ACTION_WEBSOCKET_CONNECT]); $originalName = $server->name; $this->actingAs($user) ->postJson("/api/client/servers/$server->uuid/settings/rename", [ 'name' => 'Test Server Name', ]) ->assertStatus(Response::HTTP_FORBIDDEN); $server = $server->refresh(); $this->assertSame($originalName, $server->name); } /** * Test that a server can be reinstalled. Honestly this test doesn't do much of anything other * than make sure the endpoint works since. * * @dataProvider reinstallPermissionsDataProvider */ public function testServerCanBeReinstalled(array $permissions) { /** @var \Pterodactyl\Models\Server $server */ [$user, $server] = $this->generateTestAccount($permissions); $this->assertTrue($server->isInstalled()); $service = \Mockery::mock(DaemonServerRepository::class); $this->app->instance(DaemonServerRepository::class, $service); $service->expects('setServer') ->with(\Mockery::on(function ($value) use ($server) { return $value->uuid === $server->uuid; })) ->andReturnSelf() ->getMock() ->expects('reinstall') ->andReturnUndefined(); $this->actingAs($user)->postJson("/api/client/servers/$server->uuid/settings/reinstall") ->assertStatus(Response::HTTP_ACCEPTED); $server = $server->refresh(); $this->assertSame(Server::STATUS_INSTALLING, $server->status); } /** * Test that a subuser receives a permissions error if they do not have the required permission * and attempt to reinstall a server. */ public function testSubuserCannotReinstallServerWithoutPermission() { [$user, $server] = $this->generateTestAccount([Permission::ACTION_WEBSOCKET_CONNECT]); $this->actingAs($user) ->postJson("/api/client/servers/$server->uuid/settings/reinstall") ->assertStatus(Response::HTTP_FORBIDDEN); $server = $server->refresh(); $this->assertTrue($server->isInstalled()); } public static function renamePermissionsDataProvider(): array { return [[[]], [[Permission::ACTION_SETTINGS_RENAME]]]; } public static function reinstallPermissionsDataProvider(): array { return [[[]], [[Permission::ACTION_SETTINGS_REINSTALL]]]; } }