. */ declare(strict_types=1); namespace Fisharebest\Webtrees; use Fisharebest\Webtrees\Http\Controllers\Admin\UsersController; use Fisharebest\Webtrees\Services\UserService; use Symfony\Component\HttpFoundation\Request; /** * Test the user administration pages */ class UserAdminTest extends TestCase { protected static $uses_database = true; /** * @covers \Fisharebest\Webtrees\Http\Controllers\Admin\UsersController * @covers \Fisharebest\Webtrees\Services\DatatablesService * @return void */ public function testUserDetailsAreShownOnUserAdminPage(): void { $user_service = new UserService(); $user_service->create('AdminName', 'Administrator', 'admin@example.com', 'secret'); $user_service->create('UserName', 'RealName', 'user@example.com', 'secret'); $controller = app(UsersController::class); $response = app()->dispatch($controller, 'data'); $this->assertContains('AdminName', $response->getContent()); $this->assertContains('Administrator', $response->getContent()); $this->assertContains('admin@example.com', $response->getContent()); $this->assertContains('UserName', $response->getContent()); $this->assertContains('RealName', $response->getContent()); $this->assertContains('user@example.com', $response->getContent()); } /** * @covers \Fisharebest\Webtrees\Http\Controllers\Admin\UsersController * @covers \Fisharebest\Webtrees\Services\DatatablesService * @return void */ public function testFilteringUserAdminPage(): void { $user_service = new UserService(); $user_service->create('AdminName', 'Administrator', 'admin@example.com', 'secret'); $user_service->create('UserName', 'RealName', 'user@example.com', 'secret'); $request = new Request(['search' => ['value' => 'admin']]); app()->instance(Request::class, $request); $controller = app(UsersController::class); $response = app()->dispatch($controller, 'data'); $this->assertContains('AdminName', $response->getContent()); $this->assertContains('Administrator', $response->getContent()); $this->assertContains('admin@example.com', $response->getContent()); $this->assertNotContains('UserName', $response->getContent()); $this->assertNotContains('RealName', $response->getContent()); $this->assertNotContains('user@example.com', $response->getContent()); } /** * @covers \Fisharebest\Webtrees\Http\Controllers\Admin\UsersController * @covers \Fisharebest\Webtrees\Services\DatatablesService * @return void */ public function testPaginatingUserAdminPage(): void { $user_service = new UserService(); $user_service->create('AdminName', 'Administrator', 'admin@example.com', 'secret'); $user_service->create('UserName', 'RealName', 'user@example.com', 'secret'); $request = new Request(['length' => 1]); app()->instance(Request::class, $request); $controller = app(UsersController::class); $response = app()->dispatch($controller, 'data'); $this->assertContains('AdminName', $response->getContent()); $this->assertNotContains('UserName', $response->getContent()); } /** * @covers \Fisharebest\Webtrees\Http\Controllers\Admin\UsersController * @covers \Fisharebest\Webtrees\Services\DatatablesService * @return void */ public function testSortingUserAdminPage(): void { $user_service = new UserService(); $user_service->create('AdminName', 'Administrator', 'admin@example.com', 'secret'); $user_service->create('UserName', 'RealName', 'user@example.com', 'secret'); $request = new Request(['order' => [['column' => 2, 'dir' => 'asc']]]); app()->instance(Request::class, $request); $controller = app(UsersController::class); $response = app()->dispatch($controller, 'data'); $pos1 = strpos($response->getContent(), 'AdminName'); $pos2 = strpos($response->getContent(), 'UserName'); $this->assertLessThan($pos2, $pos1); $request = new Request(['order' => [['column' => 2, 'dir' => 'desc']]]); app()->instance(Request::class, $request); $controller = app(UsersController::class); $response = app()->dispatch($controller, 'data'); $pos1 = strpos($response->getContent(), 'AdminName'); $pos2 = strpos($response->getContent(), 'UserName'); $this->assertGreaterThan($pos2, $pos1); } }