summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/Http/Middleware/Router.php21
-rw-r--r--app/Http/RequestHandlers/LoginAction.php (renamed from app/Http/Controllers/Auth/LoginController.php)89
-rw-r--r--app/Http/RequestHandlers/LoginPage.php88
-rw-r--r--app/Http/RequestHandlers/Logout.php60
-rw-r--r--app/Http/RequestHandlers/PasswordRequestPage.php (renamed from app/Http/RequestHandlers/PasswordRequestForm.php)10
-rw-r--r--app/Http/RequestHandlers/PasswordResetPage.php (renamed from app/Http/RequestHandlers/PasswordResetForm.php)7
-rw-r--r--app/Http/RequestHandlers/RegisterAction.php (renamed from app/Http/Controllers/Auth/RegisterController.php)96
-rw-r--r--app/Http/RequestHandlers/RegisterPage.php73
-rw-r--r--app/Http/RequestHandlers/SelectTheme.php15
-rw-r--r--app/Http/RequestHandlers/VerifyEmail.php (renamed from app/Http/Controllers/Auth/VerifyEmailController.php)13
-rw-r--r--resources/views/login-page.phtml2
-rw-r--r--resources/views/register-page.phtml2
-rw-r--r--routes/web.php521
-rw-r--r--tests/TestCase.php5
-rw-r--r--tests/app/Http/Controllers/Admin/ChangesLogControllerTest.php6
-rw-r--r--tests/app/Http/Controllers/Admin/ControlPanelControllerTest.php4
-rw-r--r--tests/app/Http/Controllers/Admin/FixLevel0MediaControllerTest.php6
-rw-r--r--tests/app/Http/Controllers/Admin/ImportThumbnailsControllerTest.php6
-rw-r--r--tests/app/Http/Controllers/Admin/LocationControllerTest.php16
-rw-r--r--tests/app/Http/Controllers/Admin/MapProviderControllerTest.php4
-rw-r--r--tests/app/Http/Controllers/Admin/MediaControllerTest.php14
-rw-r--r--tests/app/Http/Controllers/Admin/ModuleControllerTest.php50
-rw-r--r--tests/app/Http/Controllers/Admin/UpgradeControllerTest.php30
-rw-r--r--tests/app/Http/Controllers/Admin/UsersControllerTest.php16
-rw-r--r--tests/app/Http/Controllers/CalendarControllerTest.php12
-rw-r--r--tests/app/Http/Middleware/CheckCsrfTest.php2
-rw-r--r--tests/app/Http/RequestHandlers/DeleteUserTest.php38
-rw-r--r--tests/app/Http/RequestHandlers/LoginPageTest.php55
-rw-r--r--tests/app/Http/RequestHandlers/MasqueradeAsUserTest.php54
-rw-r--r--tests/app/Http/RequestHandlers/ModuleActionTest.php8
-rw-r--r--tests/app/Http/RequestHandlers/PasswordRequestPageTest.php53
-rw-r--r--tests/app/Http/RequestHandlers/PasswordResetPageTest.php65
-rw-r--r--tests/app/Http/RequestHandlers/PingTest.php53
-rw-r--r--tests/app/Http/RequestHandlers/PrivacyPolicyTest.php4
-rw-r--r--tests/app/Http/RequestHandlers/SelectLanguageTest.php6
-rw-r--r--tests/app/Http/RequestHandlers/SelectThemeTest.php29
-rw-r--r--tests/feature/IndividualListTest.php10
-rw-r--r--tests/feature/UserAdminTest.php2
38 files changed, 917 insertions, 628 deletions
diff --git a/app/Http/Middleware/Router.php b/app/Http/Middleware/Router.php
index 9a19e82435..cedcaf9a0c 100644
--- a/app/Http/Middleware/Router.php
+++ b/app/Http/Middleware/Router.php
@@ -54,41 +54,42 @@ class Router implements MiddlewareInterface, RequestMethodInterface
$this->module_service = $module_service;
}
-
/**
- * @param string $path
+ * @param string $route
+ * @param string $url
* @param string $handler
*
* @return Router
*/
- public function get(string $path, string $handler): Router
+ public function get(string $route, string $url, string $handler): Router
{
- return $this->add(self::METHOD_GET, $path, $handler);
+ return $this->add(self::METHOD_GET, $route, $handler);
}
/**
* @param string $method
- * @param string $path
+ * @param string $route
* @param string $handler
*
* @return Router
*/
- private function add(string $method, string $path, string $handler): Router
+ private function add(string $method, string $route, string $handler): Router
{
- $this->routes[$method][$path] = $handler;
+ $this->routes[$method][$route] = $handler;
return $this;
}
/**
- * @param string $path
+ * @param string $route
+ * @param string $url
* @param string $handler
*
* @return Router
*/
- public function post(string $path, string $handler): Router
+ public function post(string $route, string $url, string $handler): Router
{
- return $this->add(self::METHOD_POST, $path, $handler);
+ return $this->add(self::METHOD_POST, $route, $handler);
}
/**
diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/RequestHandlers/LoginAction.php
index 174d12793a..c6e5506eff 100644
--- a/app/Http/Controllers/Auth/LoginController.php
+++ b/app/Http/RequestHandlers/LoginAction.php
@@ -16,7 +16,7 @@
*/
declare(strict_types=1);
-namespace Fisharebest\Webtrees\Http\Controllers\Auth;
+namespace Fisharebest\Webtrees\Http\RequestHandlers;
use Exception;
use Fisharebest\Webtrees\Auth;
@@ -28,15 +28,14 @@ use Fisharebest\Webtrees\Log;
use Fisharebest\Webtrees\Services\UpgradeService;
use Fisharebest\Webtrees\Services\UserService;
use Fisharebest\Webtrees\Session;
-use Fisharebest\Webtrees\Site;
use Illuminate\Database\Capsule\Manager as DB;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
/**
- * Controller for user login and logout.
+ * Perform a login.
*/
-class LoginController extends AbstractBaseController
+class LoginAction extends AbstractBaseController
{
/** @var UpgradeService */
private $upgrade_service;
@@ -57,69 +56,13 @@ class LoginController extends AbstractBaseController
}
/**
- * Show a login page.
- *
- * @param ServerRequestInterface $request
- *
- * @return ResponseInterface
- */
- public function loginPage(ServerRequestInterface $request): ResponseInterface
- {
- $tree = $request->getAttribute('tree');
-
- // Already logged in?
- if (Auth::check()) {
- $ged = $tree !== null ? $tree->name() : '';
-
- return redirect(route('user-page', ['ged' => $ged]));
- }
-
- $error = $request->getQueryParams()['error'] ?? '';
- $url = $request->getQueryParams()['url'] ?? '';
- $username = $request->getQueryParams()['username'] ?? '';
-
- $title = I18N::translate('Sign in');
-
- switch (Site::getPreference('WELCOME_TEXT_AUTH_MODE')) {
- case 1:
- default:
- $welcome = I18N::translate('Anyone with a user account can access this website.');
- break;
- case 2:
- $welcome = I18N::translate('You need to be an authorized user to access this website.');
- break;
- case 3:
- $welcome = I18N::translate('You need to be a family member to access this website.');
- break;
- case 4:
- $welcome = Site::getPreference('WELCOME_TEXT_AUTH_MODE_' . WT_LOCALE);
- break;
- }
-
- if (Site::getPreference('USE_REGISTRATION_MODULE') === '1') {
- $welcome .= ' ' . I18N::translate('You can apply for an account using the link below.');
- }
-
- $can_register = Site::getPreference('USE_REGISTRATION_MODULE') === '1';
-
- return $this->viewResponse('login-page', [
- 'can_register' => $can_register,
- 'error' => $error,
- 'title' => $title,
- 'url' => $url,
- 'username' => $username,
- 'welcome' => $welcome,
- ]);
- }
-
- /**
* Perform a login.
*
* @param ServerRequestInterface $request
*
* @return ResponseInterface
*/
- public function loginAction(ServerRequestInterface $request): ResponseInterface
+ public function handle(ServerRequestInterface $request): ResponseInterface
{
$username = $request->getParsedBody()['username'] ?? '';
$password = $request->getParsedBody()['password'] ?? '';
@@ -201,28 +144,4 @@ class LoginController extends AbstractBaseController
Session::put('theme', Auth::user()->getPreference('theme'));
I18N::init(Auth::user()->getPreference('language'));
}
-
- /**
- * Perform a logout.
- *
- * @param ServerRequestInterface $request
- *
- * @return ResponseInterface
- */
- public function logoutAction(ServerRequestInterface $request): ResponseInterface
- {
- $tree = $request->getAttribute('tree');
-
- if (Auth::check()) {
- Log::addAuthenticationLog('Logout: ' . Auth::user()->userName() . '/' . Auth::user()->realName());
- Auth::logout();
- FlashMessages::addMessage(I18N::translate('You have signed out.'), 'info');
- }
-
- if ($tree === null) {
- return redirect(route('tree-page'));
- }
-
- return redirect(route('tree-page', ['ged' => $tree->name()]));
- }
}
diff --git a/app/Http/RequestHandlers/LoginPage.php b/app/Http/RequestHandlers/LoginPage.php
new file mode 100644
index 0000000000..be89d77ab7
--- /dev/null
+++ b/app/Http/RequestHandlers/LoginPage.php
@@ -0,0 +1,88 @@
+<?php
+
+/**
+ * webtrees: online genealogy
+ * Copyright (C) 2019 webtrees development team
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+declare(strict_types=1);
+
+namespace Fisharebest\Webtrees\Http\RequestHandlers;
+
+use Fisharebest\Webtrees\Auth;
+use Fisharebest\Webtrees\Http\Controllers\AbstractBaseController;
+use Fisharebest\Webtrees\I18N;
+use Fisharebest\Webtrees\Site;
+use Fisharebest\Webtrees\User;
+use Psr\Http\Message\ResponseInterface;
+use Psr\Http\Message\ServerRequestInterface;
+
+/**
+ * Show a login form.
+ */
+class LoginPage extends AbstractBaseController
+{
+ /**
+ * @param ServerRequestInterface $request
+ *
+ * @return ResponseInterface
+ */
+ public function handle(ServerRequestInterface $request): ResponseInterface
+ {
+ $tree = $request->getAttribute('tree');
+ $user = $request->getAttribute('user');
+
+ // Already logged in?
+ if ($user instanceof User) {
+ $ged = $tree !== null ? $tree->name() : '';
+
+ return redirect(route('user-page', ['ged' => $ged]));
+ }
+
+ $error = $request->getQueryParams()['error'] ?? '';
+ $url = $request->getQueryParams()['url'] ?? '';
+ $username = $request->getQueryParams()['username'] ?? '';
+
+ $title = I18N::translate('Sign in');
+
+ switch (Site::getPreference('WELCOME_TEXT_AUTH_MODE')) {
+ case 1:
+ default:
+ $welcome = I18N::translate('Anyone with a user account can access this website.');
+ break;
+ case 2:
+ $welcome = I18N::translate('You need to be an authorized user to access this website.');
+ break;
+ case 3:
+ $welcome = I18N::translate('You need to be a family member to access this website.');
+ break;
+ case 4:
+ $welcome = Site::getPreference('WELCOME_TEXT_AUTH_MODE_' . WT_LOCALE);
+ break;
+ }
+
+ if (Site::getPreference('USE_REGISTRATION_MODULE') === '1') {
+ $welcome .= ' ' . I18N::translate('You can apply for an account using the link below.');
+ }
+
+ $can_register = Site::getPreference('USE_REGISTRATION_MODULE') === '1';
+
+ return $this->viewResponse('login-page', [
+ 'can_register' => $can_register,
+ 'error' => $error,
+ 'title' => $title,
+ 'url' => $url,
+ 'username' => $username,
+ 'welcome' => $welcome,
+ ]);
+ }
+}
diff --git a/app/Http/RequestHandlers/Logout.php b/app/Http/RequestHandlers/Logout.php
new file mode 100644
index 0000000000..1eeba8a598
--- /dev/null
+++ b/app/Http/RequestHandlers/Logout.php
@@ -0,0 +1,60 @@
+<?php
+
+/**
+ * webtrees: online genealogy
+ * Copyright (C) 2019 webtrees development team
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+declare(strict_types=1);
+
+namespace Fisharebest\Webtrees\Http\RequestHandlers;
+
+use Fisharebest\Webtrees\Auth;
+use Fisharebest\Webtrees\FlashMessages;
+use Fisharebest\Webtrees\I18N;
+use Fisharebest\Webtrees\Log;
+use Fisharebest\Webtrees\Tree;
+use Fisharebest\Webtrees\User;
+use Psr\Http\Message\ResponseInterface;
+use Psr\Http\Message\ServerRequestInterface;
+use Psr\Http\Server\RequestHandlerInterface;
+use function redirect;
+use function route;
+
+/**
+ * Perform a logout.
+ */
+class Logout implements RequestHandlerInterface
+{
+ /**
+ * @param ServerRequestInterface $request
+ *
+ * @return ResponseInterface
+ */
+ public function handle(ServerRequestInterface $request): ResponseInterface
+ {
+ $tree = $request->getAttribute('tree');
+ $user = $request->getAttribute('user');
+
+ if ($user instanceof User) {
+ Log::addAuthenticationLog('Logout: ' . Auth::user()->userName() . '/' . Auth::user()->realName());
+ Auth::logout();
+ FlashMessages::addMessage(I18N::translate('You have signed out.'));
+ }
+
+ if ($tree instanceof Tree) {
+ return redirect(route('tree-page', ['ged' => $tree->name()]));
+ }
+
+ return redirect(route('tree-page'));
+ }
+}
diff --git a/app/Http/RequestHandlers/PasswordRequestForm.php b/app/Http/RequestHandlers/PasswordRequestPage.php
index 9fd706abfe..6976aa35f8 100644
--- a/app/Http/RequestHandlers/PasswordRequestForm.php
+++ b/app/Http/RequestHandlers/PasswordRequestPage.php
@@ -21,6 +21,7 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers;
use Fisharebest\Webtrees\Auth;
use Fisharebest\Webtrees\Http\ViewResponseTrait;
use Fisharebest\Webtrees\I18N;
+use Fisharebest\Webtrees\User;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
@@ -31,7 +32,7 @@ use function route;
/**
* Request a new password.
*/
-class PasswordRequestForm implements RequestHandlerInterface
+class PasswordRequestPage implements RequestHandlerInterface
{
use ViewResponseTrait;
@@ -42,8 +43,11 @@ class PasswordRequestForm implements RequestHandlerInterface
*/
public function handle(ServerRequestInterface $request): ResponseInterface
{
- if (Auth::check()) {
- return redirect(route('user-page'));
+ $user = $request->getAttribute('user');
+
+ // Already logged in?
+ if ($user instanceof User) {
+ return redirect(route('my-account'));
}
$title = I18N::translate('Request a new password');
diff --git a/app/Http/RequestHandlers/PasswordResetForm.php b/app/Http/RequestHandlers/PasswordResetPage.php
index a7f19b8439..003dd763fe 100644
--- a/app/Http/RequestHandlers/PasswordResetForm.php
+++ b/app/Http/RequestHandlers/PasswordResetPage.php
@@ -27,13 +27,12 @@ use Fisharebest\Webtrees\User;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
-
use function redirect;
/**
* Set a new password.
*/
-class PasswordResetForm implements RequestHandlerInterface, StatusCodeInterface
+class PasswordResetPage implements RequestHandlerInterface, StatusCodeInterface
{
use ViewResponseTrait;
@@ -58,10 +57,8 @@ class PasswordResetForm implements RequestHandlerInterface, StatusCodeInterface
public function handle(ServerRequestInterface $request): ResponseInterface
{
$title = I18N::translate('Set a new password');
-
$token = $request->getQueryParams()['token'] ?? '';
-
- $user = $this->user_service->findByToken($token);
+ $user = $this->user_service->findByToken($token);
if ($user instanceof User) {
return $this->viewResponse('password-reset-page', ['title' => $title, 'user' => $user, 'token' => $token]);
diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/RequestHandlers/RegisterAction.php
index a759c9f5a9..f5f113de0f 100644
--- a/app/Http/Controllers/Auth/RegisterController.php
+++ b/app/Http/RequestHandlers/RegisterAction.php
@@ -16,7 +16,7 @@
*/
declare(strict_types=1);
-namespace Fisharebest\Webtrees\Http\Controllers\Auth;
+namespace Fisharebest\Webtrees\Http\RequestHandlers;
use Exception;
use Fisharebest\Webtrees\FlashMessages;
@@ -37,9 +37,9 @@ use Ramsey\Uuid\Uuid;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
/**
- * Controller for user registration.
+ * Process a user registration.
*/
-class RegisterController extends AbstractBaseController
+class RegisterAction extends AbstractBaseController
{
/**
* @var MailService
@@ -64,43 +64,13 @@ class RegisterController extends AbstractBaseController
}
/**
- * Show a registration page.
- *
- * @param ServerRequestInterface $request
- *
- * @return ResponseInterface
- */
- public function registerPage(ServerRequestInterface $request): ResponseInterface
- {
- $this->checkRegistrationAllowed();
-
- $comments = $request->getQueryParams()['comments'] ?? '';
- $email = $request->getQueryParams()['email'] ?? '';
- $realname = $request->getQueryParams()['realname'] ?? '';
- $username = $request->getQueryParams()['username'] ?? '';
-
- $show_caution = Site::getPreference('SHOW_REGISTER_CAUTION') === '1';
-
- $title = I18N::translate('Request a new user account');
-
- return $this->viewResponse('register-page', [
- 'comments' => $comments,
- 'email' => $email,
- 'realname' => $realname,
- 'show_caution' => $show_caution,
- 'title' => $title,
- 'username' => $username,
- ]);
- }
-
- /**
* Perform a registration.
*
* @param ServerRequestInterface $request
*
* @return ResponseInterface
*/
- public function registerAction(ServerRequestInterface $request): ResponseInterface
+ public function handle(ServerRequestInterface $request): ResponseInterface
{
$tree = $request->getAttribute('tree');
@@ -193,6 +163,19 @@ class RegisterController extends AbstractBaseController
}
/**
+ * Check that visitors are allowed to register on this site.
+ *
+ * @return void
+ * @throws NotFoundHttpException
+ */
+ private function checkRegistrationAllowed(): void
+ {
+ if (Site::getPreference('USE_REGISTRATION_MODULE') !== '1') {
+ throw new NotFoundHttpException();
+ }
+ }
+
+ /**
* Check the registration details.
*
* @param ServerRequestInterface $request
@@ -229,49 +212,4 @@ class RegisterController extends AbstractBaseController
throw new Exception(I18N::translate('You are not allowed to send messages that contain external links.') . ' ' . I18N::translate('You should delete the ā€œ%1$sā€ from ā€œ%2$sā€ and try again.', e($match[2]), e($match[1])));
}
}
-
- /**
- * Show an email verification page.
- *
- * @param ServerRequestInterface $request
- *
- * @return ResponseInterface
- */
- public function verifyPage(ServerRequestInterface $request): ResponseInterface
- {
- $this->checkRegistrationAllowed();
-
- $title = I18N::translate('User verification');
-
- return $this->viewResponse('register-page', [
- 'title' => $title,
- ]);
- }
-
- /**
- * Perform a registration.
- *
- * @param ServerRequestInterface $request
- *
- * @return ResponseInterface
- */
- public function verifyAction(ServerRequestInterface $request): ResponseInterface
- {
- $this->checkRegistrationAllowed();
-
- return redirect(route('tree-page'));
- }
-
- /**
- * Check that visitors are allowed to register on this site.
- *
- * @return void
- * @throws NotFoundHttpException
- */
- private function checkRegistrationAllowed(): void
- {
- if (Site::getPreference('USE_REGISTRATION_MODULE') !== '1') {
- throw new NotFoundHttpException();
- }
- }
}
diff --git a/app/Http/RequestHandlers/RegisterPage.php b/app/Http/RequestHandlers/RegisterPage.php
new file mode 100644
index 0000000000..3c98b19e2f
--- /dev/null
+++ b/app/Http/RequestHandlers/RegisterPage.php
@@ -0,0 +1,73 @@
+<?php
+
+/**
+ * webtrees: online genealogy
+ * Copyright (C) 2019 webtrees development team
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+declare(strict_types=1);
+
+namespace Fisharebest\Webtrees\Http\RequestHandlers;
+
+use Fisharebest\Webtrees\Http\Controllers\AbstractBaseController;
+use Fisharebest\Webtrees\I18N;
+use Fisharebest\Webtrees\Site;
+use Psr\Http\Message\ResponseInterface;
+use Psr\Http\Message\ServerRequestInterface;
+use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
+
+/**
+ * Show a registration page.
+ */
+class RegisterPage extends AbstractBaseController
+{
+ /**
+ * @param ServerRequestInterface $request
+ *
+ * @return ResponseInterface
+ */
+ public function handle(ServerRequestInterface $request): ResponseInterface
+ {
+ $this->checkRegistrationAllowed();
+
+ $comments = $request->getQueryParams()['comments'] ?? '';
+ $email = $request->getQueryParams()['email'] ?? '';
+ $realname = $request->getQueryParams()['realname'] ?? '';
+ $username = $request->getQueryParams()['username'] ?? '';
+
+ $show_caution = Site::getPreference('SHOW_REGISTER_CAUTION') === '1';
+
+ $title = I18N::translate('Request a new user account');
+
+ return $this->viewResponse('register-page', [
+ 'comments' => $comments,
+ 'email' => $email,
+ 'realname' => $realname,
+ 'show_caution' => $show_caution,
+ 'title' => $title,
+ 'username' => $username,
+ ]);
+ }
+
+ /**
+ * Check that visitors are allowed to register on this site.
+ *
+ * @return void
+ * @throws NotFoundHttpException
+ */
+ private function checkRegistrationAllowed(): void
+ {
+ if (Site::getPreference('USE_REGISTRATION_MODULE') !== '1') {
+ throw new NotFoundHttpException();
+ }
+ }
+}
diff --git a/app/Http/RequestHandlers/SelectTheme.php b/app/Http/RequestHandlers/SelectTheme.php
index 0527741477..bec5c7d4c6 100644
--- a/app/Http/RequestHandlers/SelectTheme.php
+++ b/app/Http/RequestHandlers/SelectTheme.php
@@ -32,17 +32,6 @@ use function response;
*/
class SelectTheme implements RequestHandlerInterface, StatusCodeInterface
{
- /** @var UserInterface */
- private $user;
-
- /**
- * @param UserInterface $user
- */
- public function __construct(UserInterface $user)
- {
- $this->user = $user;
- }
-
/**
* @param ServerRequestInterface $request
*
@@ -50,11 +39,11 @@ class SelectTheme implements RequestHandlerInterface, StatusCodeInterface
*/
public function handle(ServerRequestInterface $request): ResponseInterface
{
+ $user = $request->getAttribute('user');
$theme = $request->getParsedBody()['theme'];
Session::put('theme', $theme);
-
- $this->user->setPreference('theme', $theme);
+ $user->setPreference('theme', $theme);
return response('', self::STATUS_NO_CONTENT);
}
diff --git a/app/Http/Controllers/Auth/VerifyEmailController.php b/app/Http/RequestHandlers/VerifyEmail.php
index 0ed3e84eba..c71bb06b85 100644
--- a/app/Http/Controllers/Auth/VerifyEmailController.php
+++ b/app/Http/RequestHandlers/VerifyEmail.php
@@ -16,9 +16,9 @@
*/
declare(strict_types=1);
-namespace Fisharebest\Webtrees\Http\Controllers\Auth;
+namespace Fisharebest\Webtrees\Http\RequestHandlers;
-use Fisharebest\Webtrees\Http\Controllers\AbstractBaseController;
+use Fisharebest\Webtrees\Http\ViewResponseTrait;
use Fisharebest\Webtrees\I18N;
use Fisharebest\Webtrees\Log;
use Fisharebest\Webtrees\NoReplyUser;
@@ -29,12 +29,15 @@ use Fisharebest\Webtrees\User;
use Illuminate\Database\Capsule\Manager as DB;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
+use Psr\Http\Server\RequestHandlerInterface;
/**
- * Controller for email verification.
+ * Acknowledge an email verification code.
*/
-class VerifyEmailController extends AbstractBaseController
+class VerifyEmail implements RequestHandlerInterface
{
+ use ViewResponseTrait;
+
/**
* @var MailService
*/
@@ -63,7 +66,7 @@ class VerifyEmailController extends AbstractBaseController
*
* @return ResponseInterface
*/
- public function verify(ServerRequestInterface $request): ResponseInterface
+ public function handle(ServerRequestInterface $request): ResponseInterface
{
$username = $request->getQueryParams()['username'] ?? '';
$token = $request->getQueryParams()['token'] ?? '';
diff --git a/resources/views/login-page.phtml b/resources/views/login-page.phtml
index 99ff82f985..eaa7b40c7b 100644
--- a/resources/views/login-page.phtml
+++ b/resources/views/login-page.phtml
@@ -26,7 +26,7 @@ use Fisharebest\Webtrees\View;
<?= nl2br($welcome, false) ?>
</p>
-<form action="<?= e(route('login')) ?>" class="wt-page-options wt-page-options-login" method="post">
+<form method="post" action="<?= e(route('login-action')) ?>" class="wt-page-options wt-page-options-login">
<?= csrf_field() ?>
<input type="hidden" name="url" value="<?= e($url) ?>">
diff --git a/resources/views/register-page.phtml b/resources/views/register-page.phtml
index f887ef114f..f6b88f28d0 100644
--- a/resources/views/register-page.phtml
+++ b/resources/views/register-page.phtml
@@ -23,7 +23,7 @@ use Fisharebest\Webtrees\View;
</div>
<?php endif ?>
-<form autocomplete="off" class="wt-page-options wt-page-options-register" method="post" action="<?= e(route('register')) ?>">
+<form method="post" action="<?= e(route('register-action')) ?>" autocomplete="off" class="wt-page-options wt-page-options-register">
<?= csrf_field() ?>
<input name="ged" type="hidden" value="<?= $tree instanceof Tree ? e($tree->name()) : '' ?>">
diff --git a/routes/web.php b/routes/web.php
index fc2631d326..e1158e5546 100644
--- a/routes/web.php
+++ b/routes/web.php
@@ -20,16 +20,22 @@ namespace Fisharebest\Webtrees;
use Fisharebest\Webtrees\Http\Middleware\Router;
use Fisharebest\Webtrees\Http\RequestHandlers\DeleteUser;
+use Fisharebest\Webtrees\Http\RequestHandlers\LoginAction;
+use Fisharebest\Webtrees\Http\RequestHandlers\LoginPage;
+use Fisharebest\Webtrees\Http\RequestHandlers\Logout;
use Fisharebest\Webtrees\Http\RequestHandlers\MasqueradeAsUser;
use Fisharebest\Webtrees\Http\RequestHandlers\ModuleAction;
use Fisharebest\Webtrees\Http\RequestHandlers\PasswordRequestAction;
-use Fisharebest\Webtrees\Http\RequestHandlers\PasswordRequestForm;
+use Fisharebest\Webtrees\Http\RequestHandlers\PasswordRequestPage;
use Fisharebest\Webtrees\Http\RequestHandlers\PasswordResetAction;
-use Fisharebest\Webtrees\Http\RequestHandlers\PasswordResetForm;
+use Fisharebest\Webtrees\Http\RequestHandlers\PasswordResetPage;
use Fisharebest\Webtrees\Http\RequestHandlers\Ping;
use Fisharebest\Webtrees\Http\RequestHandlers\PrivacyPolicy;
+use Fisharebest\Webtrees\Http\RequestHandlers\RegisterAction;
+use Fisharebest\Webtrees\Http\RequestHandlers\RegisterPage;
use Fisharebest\Webtrees\Http\RequestHandlers\SelectLanguage;
use Fisharebest\Webtrees\Http\RequestHandlers\SelectTheme;
+use Fisharebest\Webtrees\Http\RequestHandlers\VerifyEmail;
/** @var Tree|null $tree */
@@ -40,281 +46,280 @@ $router = app(Router::class);
// Admin routes.
if (Auth::isAdmin()) {
- $router->get('admin-control-panel', 'Admin\ControlPanelController::controlPanel');
- $router->get('admin-fix-level-0-media', 'Admin\FixLevel0MediaController::fixLevel0Media');
- $router->post('admin-fix-level-0-media-action', 'Admin\FixLevel0MediaController::fixLevel0MediaAction');
- $router->get('admin-fix-level-0-media-data', 'Admin\FixLevel0MediaController::fixLevel0MediaData');
- $router->get('admin-webtrees1-thumbs', 'Admin\ImportThumbnailsController::webtrees1Thumbnails');
- $router->post('admin-webtrees1-thumbs-action', 'Admin\ImportThumbnailsController::webtrees1ThumbnailsAction');
- $router->get('admin-webtrees1-thumbs-data', 'Admin\ImportThumbnailsController::webtrees1ThumbnailsData');
- $router->get('modules', 'Admin\ModuleController::list');
- $router->post('modules', 'Admin\ModuleController::update');
- $router->get('analytics', 'Admin\ModuleController::listAnalytics');
- $router->post('analytics', 'Admin\ModuleController::updateAnalytics');
- $router->get('blocks', 'Admin\ModuleController::listBlocks');
- $router->post('blocks', 'Admin\ModuleController::updateBlocks');
- $router->get('charts', 'Admin\ModuleController::listCharts');
- $router->post('charts', 'Admin\ModuleController::updateCharts');
- $router->get('lists', 'Admin\ModuleController::listLists');
- $router->post('lists', 'Admin\ModuleController::updateLists');
- $router->get('footers', 'Admin\ModuleController::listFooters');
- $router->post('footers', 'Admin\ModuleController::updateFooters');
- $router->get('history', 'Admin\ModuleController::listHistory');
- $router->post('history', 'Admin\ModuleController::updateHistory');
- $router->get('menus', 'Admin\ModuleController::listMenus');
- $router->post('menus', 'Admin\ModuleController::updateMenus');
- $router->get('languages', 'Admin\ModuleController::listLanguages');
- $router->post('languages', 'Admin\ModuleController::updateLanguages');
- $router->get('reports', 'Admin\ModuleController::listReports');
- $router->post('reports', 'Admin\ModuleController::updateReports');
- $router->get('sidebars', 'Admin\ModuleController::listSidebars');
- $router->post('sidebars', 'Admin\ModuleController::updateSidebars');
- $router->get('themes', 'Admin\ModuleController::listThemes');
- $router->post('themes', 'Admin\ModuleController::updateThemes');
- $router->get('tabs', 'Admin\ModuleController::listTabs');
- $router->post('tabs', 'Admin\ModuleController::updateTabs');
- $router->post('delete-module-settings', 'Admin\ModuleController::deleteModuleSettings');
- $router->get('map-data', 'Admin\LocationController::mapData');
- $router->get('map-data-edit', 'Admin\LocationController::mapDataEdit');
- $router->post('map-data-edit', 'Admin\LocationController::mapDataSave');
- $router->post('map-data-delete', 'Admin\LocationController::mapDataDelete');
- $router->get('locations-export', 'Admin\LocationController::exportLocations');
- $router->get('locations-import', 'Admin\LocationController::importLocations');
- $router->post('locations-import', 'Admin\LocationController::importLocationsAction');
- $router->post('locations-import-from-tree', 'Admin\LocationController::importLocationsFromTree');
- $router->get('map-provider', 'Admin\MapProviderController::mapProviderEdit');
- $router->post('map-provider', 'Admin\MapProviderController::mapProviderSave');
- $router->get('admin-media', 'Admin\MediaController::index');
- $router->get('admin-media-data', 'Admin\MediaController::data');
- $router->post('admin-media-delete', 'Admin\MediaController::delete');
- $router->get('admin-media-upload', 'Admin\MediaController::upload');
- $router->post('admin-media-upload', 'Admin\MediaController::uploadAction');
- $router->get('upgrade', 'Admin\UpgradeController::wizard');
- $router->post('upgrade', 'Admin\UpgradeController::step');
- $router->get('admin-users', 'Admin\UsersController::index');
- $router->get('admin-users-data', 'Admin\UsersController::data');
- $router->get('admin-users-create', 'Admin\UsersController::create');
- $router->post('admin-users-create', 'Admin\UsersController::save');
- $router->get('admin-users-edit', 'Admin\UsersController::edit');
- $router->post('admin-users-edit', 'Admin\UsersController::update');
- $router->get('admin-users-cleanup', 'Admin\UsersController::cleanup');
- $router->post('admin-users-cleanup', 'Admin\UsersController::cleanupAction');
- $router->get('admin-clean-data', 'AdminSiteController::cleanData');
- $router->post('admin-clean-data', 'AdminSiteController::cleanDataAction');
- $router->get('admin-site-preferences', 'AdminSiteController::preferencesForm');
- $router->post('admin-site-preferences', 'AdminSiteController::preferencesSave');
- $router->get('admin-site-mail', 'AdminSiteController::mailForm');
- $router->post('admin-site-mail', 'AdminSiteController::mailSave');
- $router->get('admin-site-registration', 'AdminSiteController::registrationForm');
- $router->post('admin-site-registration', 'AdminSiteController::registrationSave');
- $router->get('admin-site-logs', 'AdminSiteController::logs');
- $router->get('admin-site-logs-data', 'AdminSiteController::logsData');
- $router->post('admin-site-logs-delete', 'AdminSiteController::logsDelete');
- $router->get('admin-site-logs-export', 'AdminSiteController::logsExport');
- $router->get('admin-site-information', 'AdminSiteController::serverInformation');
- $router->get('admin-trees', 'AdminTreesController::index');
- $router->post('admin-trees-create', 'AdminTreesController::create');
- $router->post('admin-trees-default', 'AdminTreesController::setDefault');
- $router->post('admin-trees-delete', 'AdminTreesController::delete');
- $router->post('admin-trees-sync', 'AdminTreesController::synchronize');
- $router->get('admin-trees-merge', 'AdminTreesController::merge');
- $router->post('admin-trees-merge', 'AdminTreesController::mergeAction');
- $router->get('user-page-default-edit', 'HomePageController::userPageDefaultEdit');
- $router->post('user-page-default-update', 'HomePageController::userPageDefaultUpdate');
- $router->get('user-page-user-edit', 'HomePageController::userPageUserEdit');
- $router->post('user-page-user-update', 'HomePageController::userPageUserUpdate');
- $router->get('unused-media-thumbnail', 'MediaFileController::unusedMediaThumbnail');
- $router->get('broadcast', 'MessageController::broadcastPage');
- $router->post('broadcast', 'MessageController::broadcastAction');
- $router->post('delete-user', DeleteUser::class);
- $router->post('masquerade', MasqueradeAsUser::class);
+ $router->get('admin-control-panel', '/admin-control-panel', 'Admin\ControlPanelController::controlPanel');
+ $router->get('admin-fix-level-0-media', '/admin-fix-level-0-media', 'Admin\FixLevel0MediaController::fixLevel0Media');
+ $router->post('admin-fix-level-0-media-action', '/admin-fix-level-0-media-action', 'Admin\FixLevel0MediaController::fixLevel0MediaAction');
+ $router->get('admin-fix-level-0-media-data', '/admin-fix-level-0-media-data', 'Admin\FixLevel0MediaController::fixLevel0MediaData');
+ $router->get('admin-webtrees1-thumbs', '/admin-webtrees1-thumbs', 'Admin\ImportThumbnailsController::webtrees1Thumbnails');
+ $router->post('admin-webtrees1-thumbs-action', '/admin-webtrees1-thumbs-action', 'Admin\ImportThumbnailsController::webtrees1ThumbnailsAction');
+ $router->get('admin-webtrees1-thumbs-data', '/admin-webtrees1-thumbs-data', 'Admin\ImportThumbnailsController::webtrees1ThumbnailsData');
+ $router->get('modules', '/modules', 'Admin\ModuleController::list');
+ $router->post('modules', '/modules', 'Admin\ModuleController::update');
+ $router->get('analytics', '/analytics', 'Admin\ModuleController::listAnalytics');
+ $router->post('analytics', '/analytics', 'Admin\ModuleController::updateAnalytics');
+ $router->get('blocks', '/blocks', 'Admin\ModuleController::listBlocks');
+ $router->post('blocks', '/blocks', 'Admin\ModuleController::updateBlocks');
+ $router->get('charts', '/charts', 'Admin\ModuleController::listCharts');
+ $router->post('charts', '/charts', 'Admin\ModuleController::updateCharts');
+ $router->get('lists', '/lists', 'Admin\ModuleController::listLists');
+ $router->post('lists', '/lists', 'Admin\ModuleController::updateLists');
+ $router->get('footers', '/footers', 'Admin\ModuleController::listFooters');
+ $router->post('footers', '/footers', 'Admin\ModuleController::updateFooters');
+ $router->get('history', '/history', 'Admin\ModuleController::listHistory');
+ $router->post('history', '/history', 'Admin\ModuleController::updateHistory');
+ $router->get('menus', '/menus', 'Admin\ModuleController::listMenus');
+ $router->post('menus', '/menus', 'Admin\ModuleController::updateMenus');
+ $router->get('languages', '/languages', 'Admin\ModuleController::listLanguages');
+ $router->post('languages', '/languages', 'Admin\ModuleController::updateLanguages');
+ $router->get('reports', '/reports', 'Admin\ModuleController::listReports');
+ $router->post('reports', '/reports', 'Admin\ModuleController::updateReports');
+ $router->get('sidebars', '/sidebars', 'Admin\ModuleController::listSidebars');
+ $router->post('sidebars', '/sidebars', 'Admin\ModuleController::updateSidebars');
+ $router->get('themes', '/themes', 'Admin\ModuleController::listThemes');
+ $router->post('themes', '/themes', 'Admin\ModuleController::updateThemes');
+ $router->get('tabs', '/tabs', 'Admin\ModuleController::listTabs');
+ $router->post('tabs', '/tabs', 'Admin\ModuleController::updateTabs');
+ $router->post('delete-module-settings', '/delete-module-settings', 'Admin\ModuleController::deleteModuleSettings');
+ $router->get('map-data', '/map-data', 'Admin\LocationController::mapData');
+ $router->get('map-data-edit', '/map-data-edit', 'Admin\LocationController::mapDataEdit');
+ $router->post('map-data-edit', '/map-data-edit', 'Admin\LocationController::mapDataSave');
+ $router->post('map-data-delete', '/map-data-delete', 'Admin\LocationController::mapDataDelete');
+ $router->get('locations-export', '/locations-export', 'Admin\LocationController::exportLocations');
+ $router->get('locations-import', '/locations-import', 'Admin\LocationController::importLocations');
+ $router->post('locations-import', '/locations-import', 'Admin\LocationController::importLocationsAction');
+ $router->post('locations-import-from-tree', '/locations-import-from-tree', 'Admin\LocationController::importLocationsFromTree');
+ $router->get('map-provider', '/map-provider', 'Admin\MapProviderController::mapProviderEdit');
+ $router->post('map-provider', '/map-provider', 'Admin\MapProviderController::mapProviderSave');
+ $router->get('admin-media', '/admin-media', 'Admin\MediaController::index');
+ $router->get('admin-media-data', '/admin-media-data', 'Admin\MediaController::data');
+ $router->post('admin-media-delete', '/admin-media-delete', 'Admin\MediaController::delete');
+ $router->get('admin-media-upload', '/admin-media-upload', 'Admin\MediaController::upload');
+ $router->post('admin-media-upload', '/admin-media-upload', 'Admin\MediaController::uploadAction');
+ $router->get('upgrade', '/upgrade', 'Admin\UpgradeController::wizard');
+ $router->post('upgrade', '/upgrade', 'Admin\UpgradeController::step');
+ $router->get('admin-users', '/admin-users', 'Admin\UsersController::index');
+ $router->get('admin-users-data', '/admin-users-data', 'Admin\UsersController::data');
+ $router->get('admin-users-create', '/admin-users-create', 'Admin\UsersController::create');
+ $router->post('admin-users-create', '/admin-users-create', 'Admin\UsersController::save');
+ $router->get('admin-users-edit', '/admin-users-edit', 'Admin\UsersController::edit');
+ $router->post('admin-users-edit', '/admin-users-edit', 'Admin\UsersController::update');
+ $router->get('admin-users-cleanup', '/admin-users-cleanup', 'Admin\UsersController::cleanup');
+ $router->post('admin-users-cleanup', '/admin-users-cleanup', 'Admin\UsersController::cleanupAction');
+ $router->get('admin-clean-data', '/admin-clean-data', 'AdminSiteController::cleanData');
+ $router->post('admin-clean-data', '/admin-clean-data', 'AdminSiteController::cleanDataAction');
+ $router->get('admin-site-preferences', '/admin-site-preferences', 'AdminSiteController::preferencesForm');
+ $router->post('admin-site-preferences', '/admin-site-preferences', 'AdminSiteController::preferencesSave');
+ $router->get('admin-site-mail', '/admin-site-mail', 'AdminSiteController::mailForm');
+ $router->post('admin-site-mail', '/admin-site-mail', 'AdminSiteController::mailSave');
+ $router->get('admin-site-registration', '/admin-site-registration', 'AdminSiteController::registrationForm');
+ $router->post('admin-site-registration', '/admin-site-registration', 'AdminSiteController::registrationSave');
+ $router->get('admin-site-logs', '/admin-site-logs', 'AdminSiteController::logs');
+ $router->get('admin-site-logs-data', '/admin-site-logs-data', 'AdminSiteController::logsData');
+ $router->post('admin-site-logs-delete', '/admin-site-logs-delete', 'AdminSiteController::logsDelete');
+ $router->get('admin-site-logs-export', '/admin-site-logs-export', 'AdminSiteController::logsExport');
+ $router->get('admin-site-information', '/admin-site-information', 'AdminSiteController::serverInformation');
+ $router->get('admin-trees', '/admin-trees', 'AdminTreesController::index');
+ $router->post('admin-trees-create', '/admin-trees-create', 'AdminTreesController::create');
+ $router->post('admin-trees-default', '/admin-trees-default', 'AdminTreesController::setDefault');
+ $router->post('admin-trees-delete', '/admin-trees-delete', 'AdminTreesController::delete');
+ $router->post('admin-trees-sync', '/admin-trees-sync', 'AdminTreesController::synchronize');
+ $router->get('admin-trees-merge', '/admin-trees-merge', 'AdminTreesController::merge');
+ $router->post('admin-trees-merge', '/admin-trees-merge', 'AdminTreesController::mergeAction');
+ $router->get('user-page-default-edit', '/user-page-default-edit', 'HomePageController::userPageDefaultEdit');
+ $router->post('user-page-default-update', '/user-page-default-update', 'HomePageController::userPageDefaultUpdate');
+ $router->get('user-page-user-edit', '/user-page-user-edit', 'HomePageController::userPageUserEdit');
+ $router->post('user-page-user-update', '/user-page-user-update', 'HomePageController::userPageUserUpdate');
+ $router->get('unused-media-thumbnail', '/unused-media-thumbnail', 'MediaFileController::unusedMediaThumbnail');
+ $router->get('broadcast', '/broadcast', 'MessageController::broadcastPage');
+ $router->post('broadcast', '/broadcast', 'MessageController::broadcastAction');
+ $router->post('delete-user', '/delete-user', DeleteUser::class);
+ $router->post('masquerade', '/masquerade', MasqueradeAsUser::class);
}
// Manager routes.
if ($tree instanceof Tree && Auth::isManager($tree)) {
- $router->get('admin-control-panel-manager', 'Admin\ControlPanelController::controlPanelManager');
- $router->get('admin-changes-log', 'Admin\ChangesLogController::changesLog');
- $router->get('admin-changes-log-data', 'Admin\ChangesLogController::changesLogData');
- $router->get('admin-changes-log-download', 'Admin\ChangesLogController::changesLogDownload');
- $router->get('admin-trees', 'AdminTreesController::index');
- $router->get('admin-trees-check', 'AdminTreesController::check');
- $router->get('admin-trees-duplicates', 'AdminTreesController::duplicates');
- $router->get('admin-trees-export', 'AdminTreesController::export');
- $router->get('admin-trees-download', 'AdminTreesController::exportClient');
- $router->post('admin-trees-export', 'AdminTreesController::exportServer');
- $router->get('admin-trees-import', 'AdminTreesController::importForm');
- $router->post('admin-trees-import', 'AdminTreesController::importAction');
- $router->get('admin-trees-places', 'AdminTreesController::places');
- $router->post('admin-trees-places', 'AdminTreesController::placesAction');
- $router->get('admin-trees-preferences', 'AdminTreesController::preferences');
- $router->post('admin-trees-preferences', 'AdminTreesController::preferencesUpdate');
- $router->get('admin-trees-renumber', 'AdminTreesController::renumber');
- $router->post('admin-trees-renumber', 'AdminTreesController::renumberAction');
- $router->get('admin-trees-unconnected', 'AdminTreesController::unconnected');
- $router->get('tree-page-default-edit', 'HomePageController::treePageDefaultEdit');
- $router->post('tree-page-default-update', 'HomePageController::treePageDefaultUpdate');
- $router->get('tree-page-edit', 'HomePageController::treePageEdit');
- $router->post('import', 'GedcomFileController::import');
- $router->post('tree-page-update', 'HomePageController::treePageUpdate');
- $router->get('merge-records', 'AdminController::mergeRecords');
- $router->post('merge-records', 'AdminController::mergeRecordsAction');
- $router->get('tree-page-block-edit', 'HomePageController::treePageBlockEdit');
- $router->post('tree-page-block-edit', 'HomePageController::treePageBlockUpdate');
- $router->get('tree-preferences', 'AdminController::treePreferencesEdit');
- $router->post('tree-preferences', 'AdminController::treePreferencesUpdate');
- $router->get('tree-privacy', 'AdminController::treePrivacyEdit');
- $router->post('tree-privacy', 'AdminController::treePrivacyUpdate');
+ $router->get('admin-control-panel-manager', '/admin-control-panel-manager', 'Admin\ControlPanelController::controlPanelManager');
+ $router->get('admin-changes-log', '/admin-changes-log', 'Admin\ChangesLogController::changesLog');
+ $router->get('admin-changes-log-data', '/admin-changes-log-data', 'Admin\ChangesLogController::changesLogData');
+ $router->get('admin-changes-log-download', '/admin-changes-log-download', 'Admin\ChangesLogController::changesLogDownload');
+ $router->get('admin-trees', '/admin-trees', 'AdminTreesController::index');
+ $router->get('admin-trees-check', '/admin-trees-check', 'AdminTreesController::check');
+ $router->get('admin-trees-duplicates', '/admin-trees-duplicates', 'AdminTreesController::duplicates');
+ $router->get('admin-trees-export', '/admin-trees-export', 'AdminTreesController::export');
+ $router->get('admin-trees-download', '/admin-trees-download', 'AdminTreesController::exportClient');
+ $router->post('admin-trees-export', '/admin-trees-export', 'AdminTreesController::exportServer');
+ $router->get('admin-trees-import', '/admin-trees-import', 'AdminTreesController::importForm');
+ $router->post('admin-trees-import', '/admin-trees-import', 'AdminTreesController::importAction');
+ $router->get('admin-trees-places', '/admin-trees-places', 'AdminTreesController::places');
+ $router->post('admin-trees-places', '/admin-trees-places', 'AdminTreesController::placesAction');
+ $router->get('admin-trees-preferences', '/admin-trees-preferences', 'AdminTreesController::preferences');
+ $router->post('admin-trees-preferences', '/admin-trees-preferences', 'AdminTreesController::preferencesUpdate');
+ $router->get('admin-trees-renumber', '/admin-trees-renumber', 'AdminTreesController::renumber');
+ $router->post('admin-trees-renumber', '/admin-trees-renumber', 'AdminTreesController::renumberAction');
+ $router->get('admin-trees-unconnected', '/admin-trees-unconnected', 'AdminTreesController::unconnected');
+ $router->get('tree-page-default-edit', '/tree-page-default-edit', 'HomePageController::treePageDefaultEdit');
+ $router->post('tree-page-default-update', '/tree-page-default-update', 'HomePageController::treePageDefaultUpdate');
+ $router->get('tree-page-edit', '/tree-page-edit', 'HomePageController::treePageEdit');
+ $router->post('import', '/import', 'GedcomFileController::import');
+ $router->post('tree-page-update', '/tree-page-update', 'HomePageController::treePageUpdate');
+ $router->get('merge-records', '/merge-records', 'AdminController::mergeRecords');
+ $router->post('merge-records', '/merge-records', 'AdminController::mergeRecordsAction');
+ $router->get('tree-page-block-edit', '/tree-page-block-edit', 'HomePageController::treePageBlockEdit');
+ $router->post('tree-page-block-edit', '/tree-page-block-edit', 'HomePageController::treePageBlockUpdate');
+ $router->get('tree-preferences', '/tree-preferences', 'AdminController::treePreferencesEdit');
+ $router->post('tree-preferences', '/tree-preferences', 'AdminController::treePreferencesUpdate');
+ $router->get('tree-privacy', '/tree-privacy', 'AdminController::treePrivacyEdit');
+ $router->post('tree-privacy', '/tree-privacy', 'AdminController::treePrivacyUpdate');
}
// Moderator routes.
if ($tree instanceof Tree && $tree->getPreference('imported') === '1' && Auth::isModerator($tree)) {
- $router->get('show-pending', 'PendingChangesController::showChanges');
- $router->post('accept-pending', 'PendingChangesController::acceptChange');
- $router->post('reject-pending', 'PendingChangesController::rejectChange');
- $router->post('accept-all-pending', 'PendingChangesController::acceptAllChanges');
- $router->post('reject-all-pending', 'PendingChangesController::rejectAllChanges');
+ $router->get('show-pending', '/show-pending', 'PendingChangesController::showChanges');
+ $router->post('accept-pending', '/accept-pending', 'PendingChangesController::acceptChange');
+ $router->post('reject-pending', '/reject-pending', 'PendingChangesController::rejectChange');
+ $router->post('accept-all-pending', '/accept-all-pending', 'PendingChangesController::acceptAllChanges');
+ $router->post('reject-all-pending', '/reject-all-pending', 'PendingChangesController::rejectAllChanges');
}
// Editor routes.
if ($tree instanceof Tree && $tree->getPreference('imported') === '1' && Auth::isEditor($tree)) {
- $router->get('add-media-file', 'EditMediaController::addMediaFile');
- $router->post('add-media-file', 'EditMediaController::addMediaFileAction');
- $router->get('edit-media-file', 'EditMediaController::editMediaFile');
- $router->post('edit-media-file', 'EditMediaController::editMediaFileAction');
- $router->get('create-media-object', 'EditMediaController::createMediaObject');
- $router->post('create-media-object', 'EditMediaController::createMediaObjectAction');
- $router->post('create-media-from-file', 'EditMediaController::createMediaObjectFromFileAction');
- $router->get('link-media-to-individual', 'EditMediaController::linkMediaToIndividual');
- $router->get('link-media-to-family', 'EditMediaController::linkMediaToFamily');
- $router->get('link-media-to-source', 'EditMediaController::linkMediaToSource');
- $router->post('link-media-to-record', 'EditMediaController::linkMediaToRecordAction');
- $router->get('create-note-object', 'EditNoteController::createNoteObject');
- $router->post('create-note-object', 'EditNoteController::createNoteObjectAction');
- $router->get('edit-note-object', 'EditNoteController::editNoteObject');
- $router->post('edit-note-object', 'EditNoteController::updateNoteObject');
- $router->get('create-repository', 'EditRepositoryController::createRepository');
- $router->post('create-repository', 'EditRepositoryController::createRepositoryAction');
- $router->get('create-source', 'EditSourceController::createSource');
- $router->post('create-source', 'EditSourceController::createSourceAction');
- $router->get('create-submitter', 'EditSubmitterController::createSubmitter');
- $router->post('create-submitter', 'EditSubmitterController::createSubmitterAction');
- $router->get('reorder-children', 'EditFamilyController::reorderChildren');
- $router->post('reorder-children', 'EditFamilyController::reorderChildrenAction');
- $router->get('reorder-media', 'EditIndividualController::reorderMedia');
- $router->post('reorder-media', 'EditIndividualController::reorderMediaAction');
- $router->get('reorder-names', 'EditIndividualController::reorderNames');
- $router->post('reorder-names', 'EditIndividualController::reorderNamesAction');
- $router->get('reorder-spouses', 'EditIndividualController::reorderSpouses');
- $router->post('reorder-spouses', 'EditIndividualController::reorderSpousesAction');
- $router->get('edit-raw-record', 'EditGedcomRecordController::editRawRecord');
- $router->post('edit-raw-record', 'EditGedcomRecordController::editRawRecordAction');
- $router->get('edit-raw-fact', 'EditGedcomRecordController::editRawFact');
- $router->post('edit-raw-fact', 'EditGedcomRecordController::editRawFactAction');
- $router->post('copy-fact', 'EditGedcomRecordController::copyFact');
- $router->post('delete-fact', 'EditGedcomRecordController::deleteFact');
- $router->post('paste-fact', 'EditGedcomRecordController::pasteFact');
- $router->post('delete-record', 'EditGedcomRecordController::deleteRecord');
- $router->get('add-fact', 'EditGedcomRecordController::addFact');
- $router->get('edit-fact', 'EditGedcomRecordController::editFact');
- $router->post('update-fact', 'EditGedcomRecordController::updateFact');
- $router->get('search-replace', 'SearchController::replace');
- $router->post('search-replace', 'SearchController::replaceAction');
- $router->get('add-child-to-family', 'EditFamilyController::addChild');
- $router->post('add-child-to-family', 'EditFamilyController::addChildAction');
- $router->get('add-spouse-to-family', 'EditFamilyController::addSpouse');
- $router->post('add-spouse-to-family', 'EditFamilyController::addSpouseAction');
- $router->get('change-family-members', 'EditFamilyController::changeFamilyMembers');
- $router->post('change-family-members', 'EditFamilyController::changeFamilyMembersAction');
- $router->get('add-child-to-individual', 'EditIndividualController::addChild');
- $router->post('add-child-to-individual', 'EditIndividualController::addChildAction');
- $router->get('add-parent-to-individual', 'EditIndividualController::addParent');
- $router->post('add-parent-to-individual', 'EditIndividualController::addParentAction');
- $router->get('add-spouse-to-individual', 'EditIndividualController::addSpouse');
- $router->post('add-spouse-to-individual', 'EditIndividualController::addSpouseAction');
- $router->get('add-unlinked-individual', 'EditIndividualController::addUnlinked');
- $router->post('add-unlinked-individual', 'EditIndividualController::addUnlinkedAction');
- $router->get('link-child-to-family', 'EditIndividualController::linkChildToFamily');
- $router->post('link-child-to-family', 'EditIndividualController::linkChildToFamilyAction');
- $router->get('link-spouse-to-individual', 'EditIndividualController::linkSpouseToIndividual');
- $router->post('link-spouse-to-individual', 'EditIndividualController::linkSpouseToIndividualAction');
- $router->get('edit-name', 'EditIndividualController::editName');
- $router->post('edit-name', 'EditIndividualController::editNameAction');
- $router->get('add-name', 'EditIndividualController::addName');
- $router->post('add-name', 'EditIndividualController::addNameAction');
+ $router->get('add-media-file', '/add-media-file', 'EditMediaController::addMediaFile');
+ $router->post('add-media-file', '/add-media-file', 'EditMediaController::addMediaFileAction');
+ $router->get('edit-media-file', '/edit-media-file', 'EditMediaController::editMediaFile');
+ $router->post('edit-media-file', '/edit-media-file', 'EditMediaController::editMediaFileAction');
+ $router->get('create-media-object', '/create-media-object', 'EditMediaController::createMediaObject');
+ $router->post('create-media-object', '/create-media-object', 'EditMediaController::createMediaObjectAction');
+ $router->post('create-media-from-file', '/create-media-from-file', 'EditMediaController::createMediaObjectFromFileAction');
+ $router->get('link-media-to-individual', '/link-media-to-individual', 'EditMediaController::linkMediaToIndividual');
+ $router->get('link-media-to-family', '/link-media-to-family', 'EditMediaController::linkMediaToFamily');
+ $router->get('link-media-to-source', '/link-media-to-source', 'EditMediaController::linkMediaToSource');
+ $router->post('link-media-to-record', '/link-media-to-record', 'EditMediaController::linkMediaToRecordAction');
+ $router->get('create-note-object', '/create-note-object', 'EditNoteController::createNoteObject');
+ $router->post('create-note-object', '/create-note-object', 'EditNoteController::createNoteObjectAction');
+ $router->get('edit-note-object', '/edit-note-object', 'EditNoteController::editNoteObject');
+ $router->post('edit-note-object', '/edit-note-object', 'EditNoteController::updateNoteObject');
+ $router->get('create-repository', '/create-repository', 'EditRepositoryController::createRepository');
+ $router->post('create-repository', '/create-repository', 'EditRepositoryController::createRepositoryAction');
+ $router->get('create-source', '/create-source', 'EditSourceController::createSource');
+ $router->post('create-source', '/create-source', 'EditSourceController::createSourceAction');
+ $router->get('create-submitter', '/create-submitter', 'EditSubmitterController::createSubmitter');
+ $router->post('create-submitter', '/create-submitter', 'EditSubmitterController::createSubmitterAction');
+ $router->get('reorder-children', '/reorder-children', 'EditFamilyController::reorderChildren');
+ $router->post('reorder-children', '/reorder-children', 'EditFamilyController::reorderChildrenAction');
+ $router->get('reorder-media', '/reorder-media', 'EditIndividualController::reorderMedia');
+ $router->post('reorder-media', '/reorder-media', 'EditIndividualController::reorderMediaAction');
+ $router->get('reorder-names', '/reorder-names', 'EditIndividualController::reorderNames');
+ $router->post('reorder-names', '/reorder-names', 'EditIndividualController::reorderNamesAction');
+ $router->get('reorder-spouses', '/reorder-spouses', 'EditIndividualController::reorderSpouses');
+ $router->post('reorder-spouses', '/reorder-spouses', 'EditIndividualController::reorderSpousesAction');
+ $router->get('edit-raw-record', '/edit-raw-record', 'EditGedcomRecordController::editRawRecord');
+ $router->post('edit-raw-record', '/edit-raw-record', 'EditGedcomRecordController::editRawRecordAction');
+ $router->get('edit-raw-fact', '/edit-raw-fact', 'EditGedcomRecordController::editRawFact');
+ $router->post('edit-raw-fact', '/edit-raw-fact', 'EditGedcomRecordController::editRawFactAction');
+ $router->post('copy-fact', '/copy-fact', 'EditGedcomRecordController::copyFact');
+ $router->post('delete-fact', '/delete-fact', 'EditGedcomRecordController::deleteFact');
+ $router->post('paste-fact', '/paste-fact', 'EditGedcomRecordController::pasteFact');
+ $router->post('delete-record', '/delete-record', 'EditGedcomRecordController::deleteRecord');
+ $router->get('add-fact', '/add-fact', 'EditGedcomRecordController::addFact');
+ $router->get('edit-fact', '/edit-fact', 'EditGedcomRecordController::editFact');
+ $router->post('update-fact', '/update-fact', 'EditGedcomRecordController::updateFact');
+ $router->get('search-replace', '/search-replace', 'SearchController::replace');
+ $router->post('search-replace', '/search-replace', 'SearchController::replaceAction');
+ $router->get('add-child-to-family', '/add-child-to-family', 'EditFamilyController::addChild');
+ $router->post('add-child-to-family', '/add-child-to-family', 'EditFamilyController::addChildAction');
+ $router->get('add-spouse-to-family', '/add-spouse-to-family', 'EditFamilyController::addSpouse');
+ $router->post('add-spouse-to-family', '/add-spouse-to-family', 'EditFamilyController::addSpouseAction');
+ $router->get('change-family-members', '/change-family-members', 'EditFamilyController::changeFamilyMembers');
+ $router->post('change-family-members', '/change-family-members', 'EditFamilyController::changeFamilyMembersAction');
+ $router->get('add-child-to-individual', '/add-child-to-individual', 'EditIndividualController::addChild');
+ $router->post('add-child-to-individual', '/add-child-to-individual', 'EditIndividualController::addChildAction');
+ $router->get('add-parent-to-individual', '/add-parent-to-individual', 'EditIndividualController::addParent');
+ $router->post('add-parent-to-individual', '/add-parent-to-individual', 'EditIndividualController::addParentAction');
+ $router->get('add-spouse-to-individual', '/add-spouse-to-individual', 'EditIndividualController::addSpouse');
+ $router->post('add-spouse-to-individual', '/add-spouse-to-individual', 'EditIndividualController::addSpouseAction');
+ $router->get('add-unlinked-individual', '/add-unlinked-individual', 'EditIndividualController::addUnlinked');
+ $router->post('add-unlinked-individual', '/add-unlinked-individual', 'EditIndividualController::addUnlinkedAction');
+ $router->get('link-child-to-family', '/link-child-to-family', 'EditIndividualController::linkChildToFamily');
+ $router->post('link-child-to-family', '/link-child-to-family', 'EditIndividualController::linkChildToFamilyAction');
+ $router->get('link-spouse-to-individual', '/link-spouse-to-individual', 'EditIndividualController::linkSpouseToIndividual');
+ $router->post('link-spouse-to-individual', '/link-spouse-to-individual', 'EditIndividualController::linkSpouseToIndividualAction');
+ $router->get('edit-name', '/edit-name', 'EditIndividualController::editName');
+ $router->post('edit-name', '/edit-name', 'EditIndividualController::editNameAction');
+ $router->get('add-name', '/add-name', 'EditIndividualController::addName');
+ $router->post('add-name', '/add-name', 'EditIndividualController::addNameAction');
}
// Member routes.
if ($tree instanceof Tree && $tree->getPreference('imported') === '1' && Auth::isMember($tree)) {
- $router->get('user-page', 'HomePageController::userPage');
- $router->get('user-page-block', 'HomePageController::userPageBlock');
- $router->get('user-page-edit', 'HomePageController::userPageEdit');
- $router->post('user-page-update', 'HomePageController::userPageUpdate');
- $router->get('user-page-block-edit', 'HomePageController::userPageBlockEdit');
- $router->post('user-page-block-edit', 'HomePageController::userPageBlockUpdate');
- $router->get('my-account', 'AccountController::edit');
- $router->post('my-account', 'AccountController::update');
- $router->post('delete-account', 'AccountController::delete');
+ $router->get('user-page', '/my-page', 'HomePageController::userPage');
+ $router->get('user-page-block', '/user-page-block', 'HomePageController::userPageBlock');
+ $router->get('user-page-edit', '/user-page-edit', 'HomePageController::userPageEdit');
+ $router->post('user-page-update', '/user-page-update', 'HomePageController::userPageUpdate');
+ $router->get('user-page-block-edit', '/user-page-block-edit', 'HomePageController::userPageBlockEdit');
+ $router->post('user-page-block-edit', '/user-page-block-edit', 'HomePageController::userPageBlockUpdate');
+ $router->get('my-account', '/my-account', 'AccountController::edit');
+ $router->post('my-account', '/my-account', 'AccountController::update');
+ $router->post('delete-account', '/delete-account', 'AccountController::delete');
}
// Public routes (that need a tree).
if ($tree instanceof Tree && $tree->getPreference('imported') === '1') {
- $router->get('autocomplete-folder', 'AutocompleteController::folder');
- $router->get('autocomplete-page', 'AutocompleteController::page');
- $router->get('autocomplete-place', 'AutocompleteController::place');
- $router->get('calendar', 'CalendarController::page');
- $router->get('calendar-events', 'CalendarController::calendar');
- $router->get('help-text', 'HelpTextController::helpText');
- $router->get('tree-page', 'HomePageController::treePage');
- $router->get('tree-page-block', 'HomePageController::treePageBlock');
- $router->get('media-thumbnail', 'MediaFileController::mediaThumbnail');
- $router->get('media-download', 'MediaFileController::mediaDownload');
- $router->get('family', 'FamilyController::show');
- $router->get('individual', 'IndividualController::show');
- $router->get('individual-tab', 'IndividualController::tab');
- $router->get('media', 'MediaController::show');
- $router->get('contact', 'MessageController::contactPage');
- $router->post('contact', 'MessageController::contactAction');
- $router->get('message', 'MessageController::messagePage');
- $router->post('message', 'MessageController::messageAction');
- $router->get('note', 'NoteController::show');
- $router->get('source', 'SourceController::show');
- $router->get('record', 'GedcomRecordController::show');
- $router->get('repository', 'RepositoryController::show');
- $router->get('report-list', 'ReportEngineController::reportList');
- $router->get('report-setup', 'ReportEngineController::reportSetup');
- $router->get('report-run', 'ReportEngineController::reportRun');
- $router->post('accept-changes', 'PendingChangesController::acceptChanges');
- $router->post('reject-changes', 'PendingChangesController::rejectChanges');
- $router->post('accept-all-changes', 'PendingChangesController::acceptAllChanges');
- $router->post('reject-all-changes', 'PendingChangesController::rejectAllChanges');
- $router->post('select2-family', 'AutocompleteController::select2Family');
- $router->post('select2-individual', 'AutocompleteController::select2Individual');
- $router->post('select2-media', 'AutocompleteController::select2MediaObject');
- $router->post('select2-note', 'AutocompleteController::select2Note');
- $router->post('select2-source', 'AutocompleteController::select2Source');
- $router->post('select2-submitter', 'AutocompleteController::select2Submitter');
- $router->post('select2-repository', 'AutocompleteController::select2Repository');
- $router->get('search-quick', 'SearchController::quick');
- $router->get('search-advanced', 'SearchController::advanced');
- $router->get('search-general', 'SearchController::general');
- $router->get('search-phonetic', 'SearchController::phonetic');
+ $router->get('autocomplete-folder', '/autocomplete-folder', 'AutocompleteController::folder');
+ $router->get('autocomplete-page', '/autocomplete-page', 'AutocompleteController::page');
+ $router->get('autocomplete-place', '/autocomplete-place', 'AutocompleteController::place');
+ $router->get('calendar', '/calendar', 'CalendarController::page');
+ $router->get('calendar-events', '/calendar-events', 'CalendarController::calendar');
+ $router->get('help-text', '/help-text', 'HelpTextController::helpText');
+ $router->get('tree-page', '/tree-page', 'HomePageController::treePage');
+ $router->get('tree-page-block', '/tree-page-block', 'HomePageController::treePageBlock');
+ $router->get('media-thumbnail', '/media-thumbnail', 'MediaFileController::mediaThumbnail');
+ $router->get('media-download', '/media-download', 'MediaFileController::mediaDownload');
+ $router->get('family', '/family/{xref}{/slug}', 'FamilyController::show');
+ $router->get('individual', '/individual/{xref}{/slug}', 'IndividualController::show');
+ $router->get('individual-tab', '/individual-tab', 'IndividualController::tab');
+ $router->get('media', '/media/{xref}{/slug}', 'MediaController::show');
+ $router->get('contact', '/contact', 'MessageController::contactPage');
+ $router->post('contact', '/contact-action', 'MessageController::contactAction');
+ $router->get('message', '/message', 'MessageController::messagePage');
+ $router->post('message', '/message', 'MessageController::messageAction');
+ $router->get('note', '/note/{xref}{/slug}', 'NoteController::show');
+ $router->get('source', '/source/{xref}{/slug}', 'SourceController::show');
+ $router->get('record', '/record/{xref}{/slug}', 'GedcomRecordController::show');
+ $router->get('repository', '/repository/{xref}{/slug}', 'RepositoryController::show');
+ $router->get('report-list', '/report-list', 'ReportEngineController::reportList');
+ $router->get('report-setup', '/report-setup', 'ReportEngineController::reportSetup');
+ $router->get('report-run', '/report-run', 'ReportEngineController::reportRun');
+ $router->post('accept-changes', '/accept-changes', 'PendingChangesController::acceptChanges');
+ $router->post('reject-changes', '/reject-changes', 'PendingChangesController::rejectChanges');
+ $router->post('accept-all-changes', '/accept-all-changes', 'PendingChangesController::acceptAllChanges');
+ $router->post('reject-all-changes', '/reject-all-changes', 'PendingChangesController::rejectAllChanges');
+ $router->post('select2-family', '/select2-family', 'AutocompleteController::select2Family');
+ $router->post('select2-individual', '/select2-individual', 'AutocompleteController::select2Individual');
+ $router->post('select2-media', '/select2-media', 'AutocompleteController::select2MediaObject');
+ $router->post('select2-note', '/select2-note', 'AutocompleteController::select2Note');
+ $router->post('select2-source', '/select2-source', 'AutocompleteController::select2Source');
+ $router->post('select2-submitter', '/select2-submitter', 'AutocompleteController::select2Submitter');
+ $router->post('select2-repository', '/select2-repository', 'AutocompleteController::select2Repository');
+ $router->get('search-quick', '/search-quick', 'SearchController::quick');
+ $router->get('search-advanced', '/search-advanced', 'SearchController::advanced');
+ $router->get('search-general', '/search-general', 'SearchController::general');
+ $router->get('search-phonetic', '/search-phonetic', 'SearchController::phonetic');
}
-// Public routes (that do not need a tree).
-$router->get('login', 'Auth\LoginController::loginPage');
-$router->post('login', 'Auth\LoginController::loginAction');
-$router->get('logout', 'Auth\LoginController::logoutAction');
-$router->post('logout', 'Auth\LoginController::logoutAction');
-$router->get('register', 'Auth\RegisterController::registerPage');
-$router->post('register', 'Auth\RegisterController::registerAction');
-$router->get('verify', 'Auth\VerifyEmailController::verify');
-$router->get('password-request', PasswordRequestForm::class);
-$router->post('password-request', PasswordRequestAction::class);
-$router->get('password-reset', PasswordResetForm::class);
-$router->post('password-reset', PasswordResetAction::class);
-$router->post('language', SelectLanguage::class);
-$router->post('theme', SelectTheme::class);
-$router->get('privacy-policy', PrivacyPolicy::class);
-$router->get('module', ModuleAction::class);
-$router->post('module', ModuleAction::class);
-$router->get('ping', Ping::class);
+$router->get('login', '/login', LoginPage::class);
+$router->post('login-action', '/login', LoginAction::class);
+$router->get('logout', '/logout', Logout::class);
+$router->post('logout-action', '/logout', Logout::class);
+$router->get('register', '/register', RegisterPage::class);
+$router->post('register-action', '/register', RegisterAction::class);
+$router->get('verify', '/verify', VerifyEmail::class);
+$router->get('password-request', '/password-request', PasswordRequestPage::class);
+$router->post('password-request-action', '/password-request', PasswordRequestAction::class);
+$router->get('password-reset', '/password-reset', PasswordResetPage::class);
+$router->post('password-reset-action', '/password-reset', PasswordResetAction::class);
+$router->post('language', '/language', SelectLanguage::class);
+$router->post('theme', '/theme', SelectTheme::class);
+$router->get('privacy-policy', '/privacy-policy', PrivacyPolicy::class);
+$router->get('module', '/module', ModuleAction::class);
+$router->post('module', '/module', ModuleAction::class);
+$router->get('ping', '/ping', Ping::class);
diff --git a/tests/TestCase.php b/tests/TestCase.php
index b47ed389b4..326783bff8 100644
--- a/tests/TestCase.php
+++ b/tests/TestCase.php
@@ -17,6 +17,7 @@ declare(strict_types=1);
namespace Fisharebest\Webtrees;
+use Fig\Http\Message\RequestMethodInterface;
use Fig\Http\Message\StatusCodeInterface;
use Fisharebest\Localization\Locale\LocaleEnUs;
use Fisharebest\Localization\Locale\LocaleInterface;
@@ -54,7 +55,7 @@ use const UPLOAD_ERR_OK;
/**
* Base class for unit tests
*/
-class TestCase extends \PHPUnit\Framework\TestCase implements StatusCodeInterface
+class TestCase extends \PHPUnit\Framework\TestCase implements StatusCodeInterface, RequestMethodInterface
{
/** @var object */
public static $mock_functions;
@@ -131,7 +132,7 @@ class TestCase extends \PHPUnit\Framework\TestCase implements StatusCodeInterfac
*
* @return ServerRequestInterface
*/
- protected static function createRequest(string $method = 'GET', array $query = [], array $params = [], array $files = []): ServerRequestInterface
+ protected static function createRequest(string $method = self::METHOD_GET, array $query = [], array $params = [], array $files = []): ServerRequestInterface
{
/** @var ServerRequestFactoryInterface */
$server_request_factory = app(ServerRequestFactoryInterface::class);
diff --git a/tests/app/Http/Controllers/Admin/ChangesLogControllerTest.php b/tests/app/Http/Controllers/Admin/ChangesLogControllerTest.php
index 727f4ef356..43a845e849 100644
--- a/tests/app/Http/Controllers/Admin/ChangesLogControllerTest.php
+++ b/tests/app/Http/Controllers/Admin/ChangesLogControllerTest.php
@@ -41,7 +41,7 @@ class ChangesLogControllerTest extends TestCase
{
app()->instance(Tree::class, Tree::create('', ''));
- $request = self::createRequest('GET', ['route' => 'admin-changes-log']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'admin-changes-log']);
$response = app(ChangesLogController::class)->changesLog($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -57,7 +57,7 @@ class ChangesLogControllerTest extends TestCase
Auth::login($user);
$individual = $tree->createIndividual("0 @@ INDI\n1 NAME Joe Bloggs");
- $request = self::createRequest('GET', [
+ $request = self::createRequest(self::METHOD_GET, [
'route' => 'admin-changes-log-data',
'search' => 'Joe',
'from' => '2000-01-01',
@@ -82,7 +82,7 @@ class ChangesLogControllerTest extends TestCase
Auth::login($user);
$tree->createIndividual("0 @@ INDI\n1 NAME Joe Bloggs");
- $request = self::createRequest('GET', [
+ $request = self::createRequest(self::METHOD_GET, [
'route' => 'admin-changes-log-download',
'ged' => $tree->name(),
]);
diff --git a/tests/app/Http/Controllers/Admin/ControlPanelControllerTest.php b/tests/app/Http/Controllers/Admin/ControlPanelControllerTest.php
index bb351d8c84..5e41336d13 100644
--- a/tests/app/Http/Controllers/Admin/ControlPanelControllerTest.php
+++ b/tests/app/Http/Controllers/Admin/ControlPanelControllerTest.php
@@ -39,7 +39,7 @@ class ControlPanelControllerTest extends TestCase
{
app()->instance(Tree::class, Tree::create('', ''));
- $request = self::createRequest('GET', ['route' => 'control-panel']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'control-panel']);
$response = app(ControlPanelController::class)->controlPanel($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -50,7 +50,7 @@ class ControlPanelControllerTest extends TestCase
*/
public function testControlPanelManager(): void
{
- $request = self::createRequest('GET', ['route' => 'control-panel']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'control-panel']);
$response = app(ControlPanelController::class)->controlPanelManager($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
diff --git a/tests/app/Http/Controllers/Admin/FixLevel0MediaControllerTest.php b/tests/app/Http/Controllers/Admin/FixLevel0MediaControllerTest.php
index 144c819993..9b57c38f31 100644
--- a/tests/app/Http/Controllers/Admin/FixLevel0MediaControllerTest.php
+++ b/tests/app/Http/Controllers/Admin/FixLevel0MediaControllerTest.php
@@ -37,7 +37,7 @@ class FixLevel0MediaControllerTest extends TestCase
public function testFixLevel0Media(): void
{
$controller = new FixLevel0MediaController(new DatatablesService());
- $request = self::createRequest('GET', ['route' => 'admin-fix-level-0-media']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'admin-fix-level-0-media']);
$response = $controller->fixLevel0Media($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -50,7 +50,7 @@ class FixLevel0MediaControllerTest extends TestCase
{
$tree = Tree::create('name', 'title');
$controller = new FixLevel0MediaController(new DatatablesService());
- $request = self::createRequest('POST', ['route' => 'admin-fix-level-0-media'], [
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'admin-fix-level-0-media'], [
'tree_id' => $tree->id(),
'fact_id' => '',
'indi_xref' => '',
@@ -69,7 +69,7 @@ class FixLevel0MediaControllerTest extends TestCase
$datatables_service = new DatatablesService();
$tree = Tree::create('name', 'title');
$controller = new FixLevel0MediaController($datatables_service);
- $request = self::createRequest('GET', ['route' => 'admin-fix-level-0-media-data', ['tree_id' => $tree->id()]]);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'admin-fix-level-0-media-data', ['tree_id' => $tree->id()]]);
$response = $controller->fixLevel0MediaData($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
diff --git a/tests/app/Http/Controllers/Admin/ImportThumbnailsControllerTest.php b/tests/app/Http/Controllers/Admin/ImportThumbnailsControllerTest.php
index 079537e58c..65dd4486b7 100644
--- a/tests/app/Http/Controllers/Admin/ImportThumbnailsControllerTest.php
+++ b/tests/app/Http/Controllers/Admin/ImportThumbnailsControllerTest.php
@@ -35,7 +35,7 @@ class ImportThumbnailsControllerTest extends TestCase
public function testWebtrees1Thumbnails(): void
{
$controller = new ImportThumbnailsController();
- $request = self::createRequest('GET', ['route' => 'admin-webtrees1-thumbs']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'admin-webtrees1-thumbs']);
$response = $controller->webtrees1Thumbnails($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -47,7 +47,7 @@ class ImportThumbnailsControllerTest extends TestCase
public function testWebtrees1ThumbnailsAction(): void
{
$controller = new ImportThumbnailsController();
- $request = self::createRequest('POST', ['route' => 'admin-webtrees1-thumbs-action'], [
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'admin-webtrees1-thumbs-action'], [
'thumbnail' => 'foo',
'action' => '',
'xref' => [],
@@ -64,7 +64,7 @@ class ImportThumbnailsControllerTest extends TestCase
public function testWebtrees1ThumbnailsData(): void
{
$controller = new ImportThumbnailsController();
- $request = self::createRequest('GET', [
+ $request = self::createRequest(self::METHOD_GET, [
'route' => 'admin-webtrees1-thumbs-data',
'start' => '0',
'length' => '10',
diff --git a/tests/app/Http/Controllers/Admin/LocationControllerTest.php b/tests/app/Http/Controllers/Admin/LocationControllerTest.php
index 74682bd424..8078a14dde 100644
--- a/tests/app/Http/Controllers/Admin/LocationControllerTest.php
+++ b/tests/app/Http/Controllers/Admin/LocationControllerTest.php
@@ -39,7 +39,7 @@ class LocationControllerTest extends TestCase
public function testMapData(): void
{
$controller = new LocationController(new GedcomService());
- $request = self::createRequest('GET', ['route' => 'map-data']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'map-data']);
$response = $controller->mapData($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -51,7 +51,7 @@ class LocationControllerTest extends TestCase
public function testMapDataEdit(): void
{
$controller = new LocationController(new GedcomService());
- $request = self::createRequest('GET', ['route' => 'map-data-edit', 'place_id' => '0', 'parent_id' => '0']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'map-data-edit', 'place_id' => '0', 'parent_id' => '0']);
$response = $controller->mapDataEdit($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -63,7 +63,7 @@ class LocationControllerTest extends TestCase
public function testMapDataSave(): void
{
$controller = new LocationController(new GedcomService());
- $request = self::createRequest('POST', [
+ $request = self::createRequest(self::METHOD_POST, [
'route' => 'map-data-edit',
'parent_id' => '0',
'place_id' => '0',
@@ -87,7 +87,7 @@ class LocationControllerTest extends TestCase
public function testMapDataDelete(): void
{
$controller = new LocationController(new GedcomService());
- $request = self::createRequest('POST', ['route' => 'map-data-delete', 'parent_id' => '0', 'place_id' => '0']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'map-data-delete', 'parent_id' => '0', 'place_id' => '0']);
$response = $controller->mapDataDelete($request);
$this->assertSame(self::STATUS_FOUND, $response->getStatusCode());
@@ -99,7 +99,7 @@ class LocationControllerTest extends TestCase
public function testExportLocations(): void
{
$controller = new LocationController(new GedcomService());
- $request = self::createRequest('GET', ['route' => 'locations-export', 'parent_id' => '0', 'format' => 'geojson']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'locations-export', 'parent_id' => '0', 'format' => 'geojson']);
$response = $controller->exportLocations($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -112,7 +112,7 @@ class LocationControllerTest extends TestCase
public function testImportLocations(): void
{
$controller = new LocationController(new GedcomService());
- $request = self::createRequest('GET', ['route' => 'locations-import','parent_id' => '0']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'locations-import','parent_id' => '0']);
$response = $controller->importLocations($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -125,7 +125,7 @@ class LocationControllerTest extends TestCase
{
$csv = $this->createUploadedFile(dirname(__DIR__, 4) . '/data/places.csv', 'text/csv');
$controller = new LocationController(new GedcomService());
- $request = self::createRequest('POST', ['route' => 'locations-import','parent_id' => '0'], [], ['csv' => $csv]);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'locations-import','parent_id' => '0'], [], ['csv' => $csv]);
$response = $controller->importLocationsAction($request);
$this->assertSame(self::STATUS_FOUND, $response->getStatusCode());
@@ -138,7 +138,7 @@ class LocationControllerTest extends TestCase
{
$tree = Tree::create('name', 'title');
$controller = new LocationController(new GedcomService());
- $request = self::createRequest('POST', ['route' => 'locations-import-from-tree'])
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'locations-import-from-tree'])
->withAttribute('tree', $tree);
$response = $controller->importLocationsFromTree($request);
diff --git a/tests/app/Http/Controllers/Admin/MapProviderControllerTest.php b/tests/app/Http/Controllers/Admin/MapProviderControllerTest.php
index 37af05b096..812369ff21 100644
--- a/tests/app/Http/Controllers/Admin/MapProviderControllerTest.php
+++ b/tests/app/Http/Controllers/Admin/MapProviderControllerTest.php
@@ -35,7 +35,7 @@ class MapProviderControllerTest extends TestCase
public function testMapProviderEdit(): void
{
$controller = new MapProviderController();
- $request = self::createRequest('GET', ['route' => 'map-provider']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'map-provider']);
$response = $controller->mapProviderEdit($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -47,7 +47,7 @@ class MapProviderControllerTest extends TestCase
public function testMapProviderSave(): void
{
$controller = new MapProviderController();
- $request = self::createRequest('POST', ['route' => 'map-provider'], ['provider' => '', 'geonames' => '']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'map-provider'], ['provider' => '', 'geonames' => '']);
$response = $controller->mapProviderSave($request);
$this->assertSame(self::STATUS_FOUND, $response->getStatusCode());
diff --git a/tests/app/Http/Controllers/Admin/MediaControllerTest.php b/tests/app/Http/Controllers/Admin/MediaControllerTest.php
index b986e3c07a..fce2dc3715 100644
--- a/tests/app/Http/Controllers/Admin/MediaControllerTest.php
+++ b/tests/app/Http/Controllers/Admin/MediaControllerTest.php
@@ -40,7 +40,7 @@ class MediaControllerTest extends TestCase
$datatables_service = new DatatablesService();
$filesystem = new Filesystem(new MemoryAdapter());
$controller = new MediaController($datatables_service, $filesystem);
- $request = self::createRequest('GET', ['route' => 'admin-media']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'admin-media']);
$response = $controller->index($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -54,7 +54,7 @@ class MediaControllerTest extends TestCase
$datatables_service = new DatatablesService();
$filesystem = new Filesystem(new MemoryAdapter());
$controller = new MediaController($datatables_service, $filesystem);
- $request = self::createRequest('GET', [
+ $request = self::createRequest(self::METHOD_GET, [
'route' => 'admin-media-data',
'files' => 'local',
'media_folder' => '',
@@ -76,7 +76,7 @@ class MediaControllerTest extends TestCase
$datatables_service = new DatatablesService();
$filesystem = new Filesystem(new MemoryAdapter());
$controller = new MediaController($datatables_service, $filesystem);
- $request = self::createRequest('GET', [
+ $request = self::createRequest(self::METHOD_GET, [
'route' => 'admin-media-external',
'files' => 'local',
'media_folder' => '',
@@ -98,7 +98,7 @@ class MediaControllerTest extends TestCase
$datatables_service = new DatatablesService();
$filesystem = new Filesystem(new MemoryAdapter());
$controller = new MediaController($datatables_service, $filesystem);
- $request = self::createRequest('GET', [
+ $request = self::createRequest(self::METHOD_GET, [
'route' => 'admin-media-unused',
'files' => 'local',
'media_folder' => '',
@@ -120,7 +120,7 @@ class MediaControllerTest extends TestCase
$datatables_service = new DatatablesService();
$filesystem = new Filesystem(new MemoryAdapter());
$controller = new MediaController($datatables_service, $filesystem);
- $request = self::createRequest('POST', ['route' => 'admin-media-delete', 'file' => 'foo', 'folder' => 'bar']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'admin-media-delete', 'file' => 'foo', 'folder' => 'bar']);
$response = $controller->delete($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -134,7 +134,7 @@ class MediaControllerTest extends TestCase
$datatables_service = new DatatablesService();
$filesystem = new Filesystem(new MemoryAdapter());
$controller = new MediaController($datatables_service, $filesystem);
- $request = self::createRequest('GET', ['route' => 'admin-media-upload']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'admin-media-upload']);
$response = $controller->upload($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -148,7 +148,7 @@ class MediaControllerTest extends TestCase
$datatables_service = new DatatablesService();
$filesystem = new Filesystem(new MemoryAdapter());
$controller = new MediaController($datatables_service, $filesystem);
- $request = self::createRequest('POST', ['route' => 'admin-media-delete']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'admin-media-delete']);
$response = $controller->uploadAction($request);
$this->assertSame(self::STATUS_FOUND, $response->getStatusCode());
diff --git a/tests/app/Http/Controllers/Admin/ModuleControllerTest.php b/tests/app/Http/Controllers/Admin/ModuleControllerTest.php
index 66fedd04a8..07c339cb34 100644
--- a/tests/app/Http/Controllers/Admin/ModuleControllerTest.php
+++ b/tests/app/Http/Controllers/Admin/ModuleControllerTest.php
@@ -37,7 +37,7 @@ class ModuleControllerTest extends TestCase
public function testList(): void
{
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('GET', ['route' => 'modules']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'modules']);
$response = $controller->list($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -49,7 +49,7 @@ class ModuleControllerTest extends TestCase
public function testListAnalytics(): void
{
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('GET', ['route' => 'analytics']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'analytics']);
$response = $controller->listAnalytics($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -61,7 +61,7 @@ class ModuleControllerTest extends TestCase
public function testListBlocks(): void
{
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('GET', ['route' => 'blocks']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'blocks']);
$response = $controller->listBlocks($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -73,7 +73,7 @@ class ModuleControllerTest extends TestCase
public function testListCharts(): void
{
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('GET', ['route' => 'charts']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'charts']);
$response = $controller->listCharts($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -85,7 +85,7 @@ class ModuleControllerTest extends TestCase
public function testListFooters(): void
{
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('GET', ['route' => 'footers']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'footers']);
$response = $controller->listFooters($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -97,7 +97,7 @@ class ModuleControllerTest extends TestCase
public function testListHistory(): void
{
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('GET', ['route' => 'history']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'history']);
$response = $controller->listHistory($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -109,7 +109,7 @@ class ModuleControllerTest extends TestCase
public function testListLanguages(): void
{
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('GET', ['route' => 'languages']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'languages']);
$response = $controller->listLanguages($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -121,7 +121,7 @@ class ModuleControllerTest extends TestCase
public function testListMenus(): void
{
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('GET', ['route' => 'menus']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'menus']);
$response = $controller->listMenus($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -133,7 +133,7 @@ class ModuleControllerTest extends TestCase
public function testListReports(): void
{
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('GET', ['route' => 'reports']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'reports']);
$response = $controller->listReports($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -145,7 +145,7 @@ class ModuleControllerTest extends TestCase
public function testListSidebars(): void
{
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('GET', ['route' => 'sidebars']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'sidebars']);
$response = $controller->listSidebars($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -157,7 +157,7 @@ class ModuleControllerTest extends TestCase
public function testListTabs(): void
{
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('GET', ['route' => 'tabs']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'tabs']);
$response = $controller->listTabs($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -169,7 +169,7 @@ class ModuleControllerTest extends TestCase
public function testListThemes(): void
{
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('GET', ['route' => 'themes']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'themes']);
$response = $controller->listThemes($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -182,7 +182,7 @@ class ModuleControllerTest extends TestCase
{
Tree::create('name', 'title');
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('POST', ['route' => 'modules']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'modules']);
$response = $controller->update($request);
$this->assertSame(self::STATUS_FOUND, $response->getStatusCode());
@@ -195,7 +195,7 @@ class ModuleControllerTest extends TestCase
{
Tree::create('name', 'title');
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('POST', ['route' => 'analytics']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'analytics']);
$response = $controller->updateAnalytics($request);
$this->assertSame(self::STATUS_FOUND, $response->getStatusCode());
@@ -208,7 +208,7 @@ class ModuleControllerTest extends TestCase
{
Tree::create('name', 'title');
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('POST', ['route' => 'blocks']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'blocks']);
$response = $controller->updateBlocks($request);
$this->assertSame(self::STATUS_FOUND, $response->getStatusCode());
@@ -221,7 +221,7 @@ class ModuleControllerTest extends TestCase
{
Tree::create('name', 'title');
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('POST', ['route' => 'charts']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'charts']);
$response = $controller->updateCharts($request);
$this->assertSame(self::STATUS_FOUND, $response->getStatusCode());
@@ -234,7 +234,7 @@ class ModuleControllerTest extends TestCase
{
Tree::create('name', 'title');
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('POST', ['route' => 'footers']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'footers']);
$response = $controller->updateFooters($request);
$this->assertSame(self::STATUS_FOUND, $response->getStatusCode());
@@ -247,7 +247,7 @@ class ModuleControllerTest extends TestCase
{
Tree::create('name', 'title');
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('POST', ['route' => 'history']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'history']);
$response = $controller->updateHistory($request);
$this->assertSame(self::STATUS_FOUND, $response->getStatusCode());
@@ -260,7 +260,7 @@ class ModuleControllerTest extends TestCase
{
Tree::create('name', 'title');
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('POST', ['route' => 'languages']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'languages']);
$response = $controller->updateLanguages($request);
$this->assertSame(self::STATUS_FOUND, $response->getStatusCode());
@@ -273,7 +273,7 @@ class ModuleControllerTest extends TestCase
{
Tree::create('name', 'title');
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('POST', ['route' => 'menus']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'menus']);
$response = $controller->updateMenus($request);
$this->assertSame(self::STATUS_FOUND, $response->getStatusCode());
@@ -286,7 +286,7 @@ class ModuleControllerTest extends TestCase
{
Tree::create('name', 'title');
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('POST', ['route' => 'reports']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'reports']);
$response = $controller->updateReports($request);
$this->assertSame(self::STATUS_FOUND, $response->getStatusCode());
@@ -299,7 +299,7 @@ class ModuleControllerTest extends TestCase
{
Tree::create('name', 'title');
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('POST', ['route' => 'sidebars']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'sidebars']);
$response = $controller->updateSidebars($request);
$this->assertSame(self::STATUS_FOUND, $response->getStatusCode());
@@ -312,7 +312,7 @@ class ModuleControllerTest extends TestCase
{
Tree::create('name', 'title');
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('POST', ['route' => 'tabs']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'tabs']);
$response = $controller->updateTabs($request);
$this->assertSame(self::STATUS_FOUND, $response->getStatusCode());
@@ -325,7 +325,7 @@ class ModuleControllerTest extends TestCase
{
Tree::create('name', 'title');
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('POST', ['route' => 'themes']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'themes']);
$response = $controller->updateThemes($request);
$this->assertSame(self::STATUS_FOUND, $response->getStatusCode());
@@ -337,7 +337,7 @@ class ModuleControllerTest extends TestCase
public function testDeleteModuleSettings(): void
{
$controller = new ModuleController(new ModuleService());
- $request = self::createRequest('POST', ['route' => 'delete-module-settings'], ['module_name' => 'foo']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'delete-module-settings'], ['module_name' => 'foo']);
$response = $controller->deleteModuleSettings($request);
$this->assertSame(self::STATUS_FOUND, $response->getStatusCode());
diff --git a/tests/app/Http/Controllers/Admin/UpgradeControllerTest.php b/tests/app/Http/Controllers/Admin/UpgradeControllerTest.php
index 25e1c291ea..357c79ff05 100644
--- a/tests/app/Http/Controllers/Admin/UpgradeControllerTest.php
+++ b/tests/app/Http/Controllers/Admin/UpgradeControllerTest.php
@@ -48,7 +48,7 @@ class UpgradeControllerTest extends TestCase
new UpgradeService(new TimeoutService())
);
- $request = self::createRequest('GET', ['route' => 'wizard']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'wizard']);
$response = $controller->wizard($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -66,7 +66,7 @@ class UpgradeControllerTest extends TestCase
new UpgradeService(new TimeoutService())
);
- $request = self::createRequest('GET', ['route' => 'wizard', 'continue' => '1']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'wizard', 'continue' => '1']);
$response = $controller->wizard($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -83,7 +83,7 @@ class UpgradeControllerTest extends TestCase
new UpgradeService(new TimeoutService())
);
- $request = self::createRequest('POST', ['route' => 'wizard', 'step' => 'Invalid']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'wizard', 'step' => 'Invalid']);
$controller->step($request);
}
@@ -99,7 +99,7 @@ class UpgradeControllerTest extends TestCase
$mock_upgrade_service
);
- $request = self::createRequest('POST', ['route' => 'wizard', 'step' => 'Check']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'wizard', 'step' => 'Check']);
$response = $controller->step($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -118,7 +118,7 @@ class UpgradeControllerTest extends TestCase
$mock_upgrade_service
);
- $request = self::createRequest('POST', ['route' => 'wizard', 'step' => 'Check']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'wizard', 'step' => 'Check']);
$controller->step($request);
}
@@ -135,7 +135,7 @@ class UpgradeControllerTest extends TestCase
$mock_upgrade_service
);
- $request = self::createRequest('POST', ['route' => 'wizard', 'step' => 'Check']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'wizard', 'step' => 'Check']);
$controller->step($request);
}
@@ -149,7 +149,7 @@ class UpgradeControllerTest extends TestCase
new UpgradeService(new TimeoutService())
);
- $request = self::createRequest('POST', ['route' => 'wizard', 'step' => 'Prepare']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'wizard', 'step' => 'Prepare']);
$response = $controller->step($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -165,7 +165,7 @@ class UpgradeControllerTest extends TestCase
new UpgradeService(new TimeoutService())
);
- $request = self::createRequest('POST', ['route' => 'wizard', 'step' => 'Pending']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'wizard', 'step' => 'Pending']);
$response = $controller->step($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -187,7 +187,7 @@ class UpgradeControllerTest extends TestCase
new UpgradeService(new TimeoutService())
);
- $request = self::createRequest('POST', ['route' => 'wizard', 'step' => 'Pending']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'wizard', 'step' => 'Pending']);
$controller->step($request);
}
@@ -202,7 +202,7 @@ class UpgradeControllerTest extends TestCase
new UpgradeService(new TimeoutService())
);
- $request = self::createRequest('POST', ['route' => 'wizard', 'step' => 'Export'])
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'wizard', 'step' => 'Export'])
->withAttribute('tree', $tree);
$response = $controller->step($request);
@@ -227,7 +227,7 @@ class UpgradeControllerTest extends TestCase
$mock_upgrade_service
);
- $request = self::createRequest('POST', ['route' => 'wizard', 'step' => 'Download']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'wizard', 'step' => 'Download']);
$controller->step($request);
}
@@ -243,7 +243,7 @@ class UpgradeControllerTest extends TestCase
$mock_upgrade_service
);
- $request = self::createRequest('POST', ['route' => 'wizard', 'step' => 'Download']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'wizard', 'step' => 'Download']);
$response = $controller->step($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -261,7 +261,7 @@ class UpgradeControllerTest extends TestCase
$mock_upgrade_service
);
- $request = self::createRequest('POST', ['route' => 'wizard', 'step' => 'Unzip']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'wizard', 'step' => 'Unzip']);
$response = $controller->step($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -277,7 +277,7 @@ class UpgradeControllerTest extends TestCase
new UpgradeService(new TimeoutService())
);
- $request = self::createRequest('POST', ['route' => 'wizard', 'step' => 'Copy']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'wizard', 'step' => 'Copy']);
$response = $controller->step($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -294,7 +294,7 @@ class UpgradeControllerTest extends TestCase
$mock_upgrade_service
);
- $request = self::createRequest('POST', ['route' => 'wizard', 'step' => 'Cleanup']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'wizard', 'step' => 'Cleanup']);
$response = $controller->step($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
diff --git a/tests/app/Http/Controllers/Admin/UsersControllerTest.php b/tests/app/Http/Controllers/Admin/UsersControllerTest.php
index 5252775ab5..42e2860062 100644
--- a/tests/app/Http/Controllers/Admin/UsersControllerTest.php
+++ b/tests/app/Http/Controllers/Admin/UsersControllerTest.php
@@ -43,7 +43,7 @@ class UsersControllerTest extends TestCase
public function testIndex(): void
{
$controller = app(UsersController::class);
- $request = self::createRequest('GET', ['route' => 'admin-users'])
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'admin-users'])
->withAttribute('user', Auth::user());
$response = $controller->index($request);
@@ -56,7 +56,7 @@ class UsersControllerTest extends TestCase
public function testData(): void
{
$controller = app(UsersController::class);
- $request = self::createRequest('GET', ['route' => 'admin-users-data']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'admin-users-data']);
$response = $controller->data($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -68,7 +68,7 @@ class UsersControllerTest extends TestCase
public function testCreate(): void
{
$controller = app(UsersController::class);
- $request = self::createRequest('GET', ['route' => 'admin-users-create']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'admin-users-create']);
$response = $controller->create($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -80,7 +80,7 @@ class UsersControllerTest extends TestCase
public function testSave(): void
{
$controller = app(UsersController::class);
- $request = self::createRequest('POST', ['route' => 'admin-users-create'], [
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'admin-users-create'], [
'username' => 'User name',
'email' => 'email@example.com',
'real_name' => 'Real Name',
@@ -98,7 +98,7 @@ class UsersControllerTest extends TestCase
{
$user = (new UserService())->create('user', 'real', 'email', 'pass');
$controller = app(UsersController::class);
- $request = self::createRequest('GET', ['route' => 'admin-users-edit', 'user_id' => (string) $user->id()]);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'admin-users-edit', 'user_id' => (string) $user->id()]);
$response = $controller->edit($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -112,7 +112,7 @@ class UsersControllerTest extends TestCase
/** @var User $user */
$user = app(UserService::class)->create('user', 'real', 'email', 'pass');
$controller = app(UsersController::class);
- $request = self::createRequest('POST', ['route' => 'admin-users-edit'], [
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'admin-users-edit'], [
'user_id' => $user->id(),
'username' => '',
'real_name' => '',
@@ -141,7 +141,7 @@ class UsersControllerTest extends TestCase
public function testCleanup(): void
{
$controller = app(UsersController::class);
- $request = self::createRequest('GET', ['route' => 'admin-users-cleanup']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'admin-users-cleanup']);
$response = $controller->cleanup($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -157,7 +157,7 @@ class UsersControllerTest extends TestCase
$module_service = new ModuleService();
$user_service = new UserService();
$controller = new UsersController($datatables_service, $mail_service, $module_service, $user_service);
- $request = self::createRequest('POST', ['route' => 'admin-users-cleanup']);
+ $request = self::createRequest(self::METHOD_POST, ['route' => 'admin-users-cleanup']);
$response = $controller->cleanupAction($request);
$this->assertSame(self::STATUS_FOUND, $response->getStatusCode());
diff --git a/tests/app/Http/Controllers/CalendarControllerTest.php b/tests/app/Http/Controllers/CalendarControllerTest.php
index ef39ef2065..e8fd23b6ea 100644
--- a/tests/app/Http/Controllers/CalendarControllerTest.php
+++ b/tests/app/Http/Controllers/CalendarControllerTest.php
@@ -48,32 +48,32 @@ class CalendarControllerTest extends \Fisharebest\Webtrees\TestCase
$localization_service = new LocalizationService(new LocaleEnUs());
$controller = new CalendarController($calendar_service, $localization_service);
- $request = self::createRequest('GET', ['route' => 'calendar', 'view' => 'day'])
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'calendar', 'view' => 'day'])
->withAttribute('tree', $tree);
$response = $controller->page($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
- $request = self::createRequest('GET', ['route' => 'calendar-events', 'view' => 'day'])
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'calendar-events', 'view' => 'day'])
->withAttribute('tree', $tree);
$response = $controller->calendar($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
- $request = self::createRequest('GET', ['route' => 'calendar', 'view' => 'month'])
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'calendar', 'view' => 'month'])
->withAttribute('tree', $tree);
$response = $controller->page($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
- $request = self::createRequest('GET', ['route' => 'calendar-events', 'view' => 'month'])
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'calendar-events', 'view' => 'month'])
->withAttribute('tree', $tree);
$response = $controller->calendar($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
- $request = self::createRequest('GET', ['route' => 'calendar', 'view' => 'year'])
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'calendar', 'view' => 'year'])
->withAttribute('tree', $tree);
$response = $controller->page($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
- $request = self::createRequest('GET', ['route' => 'calendar-events', 'view' => 'year'])
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'calendar-events', 'view' => 'year'])
->withAttribute('tree', $tree);
$response = $controller->calendar($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
diff --git a/tests/app/Http/Middleware/CheckCsrfTest.php b/tests/app/Http/Middleware/CheckCsrfTest.php
index 2bbcbb83b3..715b8f1e49 100644
--- a/tests/app/Http/Middleware/CheckCsrfTest.php
+++ b/tests/app/Http/Middleware/CheckCsrfTest.php
@@ -38,7 +38,7 @@ class CheckCsrfTest extends TestCase
$handler = $this->createMock(RequestHandlerInterface::class);
$handler->method('handle')->willReturn(response());
- $request = self::createRequest('POST')
+ $request = self::createRequest(self::METHOD_POST)
->withAttribute('request_uri', 'http://example.com');
$middleware = new CheckCsrf();
diff --git a/tests/app/Http/RequestHandlers/DeleteUserTest.php b/tests/app/Http/RequestHandlers/DeleteUserTest.php
index 4e55d2b3b4..1aded01e6e 100644
--- a/tests/app/Http/RequestHandlers/DeleteUserTest.php
+++ b/tests/app/Http/RequestHandlers/DeleteUserTest.php
@@ -20,6 +20,7 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers;
use Fisharebest\Webtrees\Services\UserService;
use Fisharebest\Webtrees\TestCase;
+use Fisharebest\Webtrees\User;
/**
* @covers \Fisharebest\Webtrees\Http\RequestHandlers\DeleteUser
@@ -33,16 +34,17 @@ class DeleteUserTest extends TestCase
*/
public function testDeleteUser(): void
{
- $user_service = new UserService();
- $user = $user_service->create('user1', 'real1', 'email1', 'pass1');
- $request = self::createRequest('POST', ['route' => 'delete-user'], ['user_id' => $user->id()]);
- $response = app(DeleteUser::class)->handle($request);
+ $user = $this->createMock(User::class);
+ $user->method('id')->willReturn(1);
- // UserService caches user records
- app('cache.array')->forget(UserService::class . $user->id());
+ $user_service = $this->createMock(UserService::class);
+ $user_service->expects($this->once())->method('find')->willReturn($user);
+
+ $request = self::createRequest(self::METHOD_POST, [], ['user_id' => $user->id()]);
+ $handler = new DeleteUser($user_service);
+ $response = $handler->handle($request);
self::assertSame(self::STATUS_NO_CONTENT, $response->getStatusCode());
- self::assertNull($user_service->find($user->id()));
}
/**
@@ -52,8 +54,12 @@ class DeleteUserTest extends TestCase
*/
public function testDeleteNonExistingUser(): void
{
- $request = self::createRequest('POST', ['route' => 'delete-user'], ['user_id' => 98765]);
- app(DeleteUser::class)->handle($request);
+ $user_service = $this->createMock(UserService::class);
+ $user_service->expects($this->once())->method('find')->willReturn(null);
+
+ $request = self::createRequest(self::METHOD_POST, [], ['user_id' => 98765]);
+ $handler = new DeleteUser($user_service);
+ $response = $handler->handle($request);
}
/**
@@ -63,9 +69,15 @@ class DeleteUserTest extends TestCase
*/
public function testCannotDeleteAdministrator(): void
{
- $user = app(UserService::class)->create('user1', 'real1', 'email1', 'pass1');
- $user->setPreference('canadmin', '1');
- $request = self::createRequest('POST', ['route' => 'delete-user'], ['user_id' => $user->id()]);
- app(DeleteUser::class)->handle($request);
+ $user = $this->createMock(User::class);
+ $user->method('id')->willReturn(1);
+ $user->expects($this->once())->method('getPreference')->with('canadmin')->willReturn('1');
+
+ $user_service = $this->createMock(UserService::class);
+ $user_service->expects($this->once())->method('find')->willReturn($user);
+
+ $request = self::createRequest(self::METHOD_POST, [], ['user_id' => $user->id()]);
+ $handler = new DeleteUser($user_service);
+ $handler->handle($request);
}
}
diff --git a/tests/app/Http/RequestHandlers/LoginPageTest.php b/tests/app/Http/RequestHandlers/LoginPageTest.php
new file mode 100644
index 0000000000..03be2d3d52
--- /dev/null
+++ b/tests/app/Http/RequestHandlers/LoginPageTest.php
@@ -0,0 +1,55 @@
+<?php
+
+/**
+ * webtrees: online genealogy
+ * Copyright (C) 2019 webtrees development team
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+declare(strict_types=1);
+
+namespace Fisharebest\Webtrees\Http\RequestHandlers;
+
+use Fisharebest\Webtrees\TestCase;
+use Fisharebest\Webtrees\User;
+use Fisharebest\Webtrees\View;
+
+/**
+ * @covers \Fisharebest\Webtrees\Http\RequestHandlers\LoginPage
+ */
+class LoginPageTest extends TestCase
+{
+ /**
+ * @return void
+ */
+ public function testLoginPage(): void
+ {
+ View::share('tree', null);
+ $request = self::createRequest();
+ $handler = new LoginPage();
+ $response = $handler->handle($request);
+
+ self::assertSame(self::STATUS_OK, $response->getStatusCode());
+ }
+
+ /**
+ * @return void
+ */
+ public function testLoginPageAlreadyLoggedIn(): void
+ {
+ $user = $this->createMock(User::class);
+ $request = self::createRequest()->withAttribute('user', $user);
+ $handler = new LoginPage();
+ $response = $handler->handle($request);
+
+ self::assertSame(self::STATUS_FOUND, $response->getStatusCode());
+ }
+}
diff --git a/tests/app/Http/RequestHandlers/MasqueradeAsUserTest.php b/tests/app/Http/RequestHandlers/MasqueradeAsUserTest.php
index eaf3b60e7c..3d5fc02958 100644
--- a/tests/app/Http/RequestHandlers/MasqueradeAsUserTest.php
+++ b/tests/app/Http/RequestHandlers/MasqueradeAsUserTest.php
@@ -22,27 +22,32 @@ use Fisharebest\Webtrees\Auth;
use Fisharebest\Webtrees\Services\UserService;
use Fisharebest\Webtrees\Session;
use Fisharebest\Webtrees\TestCase;
-
-use function app;
+use Fisharebest\Webtrees\User;
/**
* @covers \Fisharebest\Webtrees\Http\RequestHandlers\MasqueradeAsUser
*/
class MasqueradeAsUserTest extends TestCase
{
- protected static $uses_database = true;
-
/**
* @return void
*/
- public function xtestMasqueradeAsUser(): void
+ public function testMasqueradeAsUser(): void
{
- $user1 = app(UserService::class)->create('user1', 'real1', 'email1', 'pass1');
- $user2 = app(UserService::class)->create('user2', 'real2', 'email2', 'pass2');
+ $user1 = $this->createMock(User::class);
+ $user1->method('id')->willReturn(1);
+
+ $user2 = $this->createMock(User::class);
+ $user2->method('id')->willReturn(2);
- $request = self::createRequest('POST', ['route' => 'masquerade'], ['user_id' => $user2->id()])
+ $user_service = $this->createMock(UserService::class);
+ $user_service->expects($this->once())->method('find')->willReturn($user2);
+
+ $request = self::createRequest(self::METHOD_POST, [], ['user_id' => $user2->id()])
->withAttribute('user', $user1);
- $response = app(MasqueradeAsUser::class)->handle($request);
+
+ $handler = new MasqueradeAsUser($user_service);
+ $response = $handler->handle($request);
self::assertSame(self::STATUS_NO_CONTENT, $response->getStatusCode());
self::assertSame($user2->id(), Auth::id());
@@ -54,26 +59,39 @@ class MasqueradeAsUserTest extends TestCase
*/
public function testCannotMasqueradeAsSelf(): void
{
- $user = app(UserService::class)->create('user', 'real', 'email', 'pass');
- Auth::login($user);
+ $user = $this->createMock(User::class);
+ $user->method('id')->willReturn(1);
+
+ $user_service = $this->createMock(UserService::class);
+ $user_service->expects($this->once())->method('find')->willReturn($user);
- $request = self::createRequest('POST', ['route' => 'masquerade'], ['user_id' => $user->id()])
+ $request = self::createRequest(self::METHOD_POST, [], ['user_id' => $user->id()])
->withAttribute('user', $user);
- $response = app(MasqueradeAsUser::class)->handle($request);
+
+ $handler = new MasqueradeAsUser($user_service);
+ $response = $handler->handle($request);
self::assertSame(self::STATUS_NO_CONTENT, $response->getStatusCode());
- self::assertSame($user->id(), Auth::id());
self::assertNull(Session::get('masquerade'));
}
/**
* @expectedException \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
- * @expectedExceptionMessage User ID 98765 not found
+ * @expectedExceptionMessage User ID 2 not found
* @return void
*/
- public function xtestMasqueradeAsNonExistingUser(): void
+ public function testMasqueradeAsNonExistingUser(): void
{
- $request = self::createRequest('POST', ['route' => 'masquerade'], ['user_id' => 98765]);
- app(MasqueradeAsUser::class)->handle($request);
+ $user = $this->createMock(User::class);
+ $user->method('id')->willReturn(1);
+
+ $user_service = $this->createMock(UserService::class);
+ $user_service->expects($this->once())->method('find')->willReturn(null);
+
+ $request = self::createRequest(self::METHOD_POST, [], ['user_id' => 2])
+ ->withAttribute('user', $user);
+
+ $handler = new MasqueradeAsUser($user_service);
+ $handler->handle($request);
}
}
diff --git a/tests/app/Http/RequestHandlers/ModuleActionTest.php b/tests/app/Http/RequestHandlers/ModuleActionTest.php
index 074757b886..f9cb57398c 100644
--- a/tests/app/Http/RequestHandlers/ModuleActionTest.php
+++ b/tests/app/Http/RequestHandlers/ModuleActionTest.php
@@ -41,7 +41,7 @@ class ModuleActionTest extends TestCase
$user = new GuestUser();
$module_service = new ModuleService();
$handler = new ModuleAction($module_service, $user);
- $request = self::createRequest('GET', ['route' => 'module', 'module' => 'faq', 'action' => 'Show', 'ged' => $tree->name()])
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'module', 'module' => 'faq', 'action' => 'Show', 'ged' => $tree->name()])
->withAttribute('tree', $tree);
app()->instance(ServerRequestInterface::class, $request);
@@ -61,7 +61,7 @@ class ModuleActionTest extends TestCase
$user = new GuestUser();
$module_service = new ModuleService();
$handler = new ModuleAction($module_service, $user);
- $request = self::createRequest('GET', ['route' => 'module', 'module' => 'faq', 'action' => 'Fish']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'module', 'module' => 'faq', 'action' => 'Fish']);
$handler->handle($request);
}
@@ -75,7 +75,7 @@ class ModuleActionTest extends TestCase
$user = new GuestUser();
$module_service = new ModuleService();
$handler = new ModuleAction($module_service, $user);
- $request = self::createRequest('GET', ['route' => 'module', 'module' => 'fish', 'action' => 'Show']);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'module', 'module' => 'fish', 'action' => 'Show']);
$response = $handler->handle($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
@@ -93,7 +93,7 @@ class ModuleActionTest extends TestCase
$user = new GuestUser();
$module_service = new ModuleService();
$handler = new ModuleAction($module_service, $user);
- $request = self::createRequest('GET', ['route' => 'module', 'module' => 'faq', 'action' => 'Admin', 'ged' => $tree->name()]);
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'module', 'module' => 'faq', 'action' => 'Admin', 'ged' => $tree->name()]);
$handler->handle($request);
}
}
diff --git a/tests/app/Http/RequestHandlers/PasswordRequestPageTest.php b/tests/app/Http/RequestHandlers/PasswordRequestPageTest.php
new file mode 100644
index 0000000000..eca2b61faa
--- /dev/null
+++ b/tests/app/Http/RequestHandlers/PasswordRequestPageTest.php
@@ -0,0 +1,53 @@
+<?php
+
+/**
+ * webtrees: online genealogy
+ * Copyright (C) 2019 webtrees development team
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+declare(strict_types=1);
+
+namespace Fisharebest\Webtrees\Http\RequestHandlers;
+
+use Fisharebest\Webtrees\TestCase;
+use Fisharebest\Webtrees\User;
+
+/**
+ * @covers \Fisharebest\Webtrees\Http\RequestHandlers\PasswordRequestPage
+ */
+class PasswordRequestPageTest extends TestCase
+{
+ /**
+ * @return void
+ */
+ public function testPasswordRequestPage(): void
+ {
+ $request = self::createRequest();
+ $handler = new PasswordRequestPage();
+ $response = $handler->handle($request);
+
+ self::assertSame(self::STATUS_OK, $response->getStatusCode());
+ }
+
+ /**
+ * @return void
+ */
+ public function testPasswordRequestPageAlreadyLoggedIn(): void
+ {
+ $user = $this->createMock(User::class);
+ $request = self::createRequest()->withAttribute('user', $user);
+ $handler = new PasswordRequestPage();
+ $response = $handler->handle($request);
+
+ self::assertSame(self::STATUS_FOUND, $response->getStatusCode());
+ }
+}
diff --git a/tests/app/Http/RequestHandlers/PasswordResetPageTest.php b/tests/app/Http/RequestHandlers/PasswordResetPageTest.php
new file mode 100644
index 0000000000..4e140ee1af
--- /dev/null
+++ b/tests/app/Http/RequestHandlers/PasswordResetPageTest.php
@@ -0,0 +1,65 @@
+<?php
+
+/**
+ * webtrees: online genealogy
+ * Copyright (C) 2019 webtrees development team
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+declare(strict_types=1);
+
+namespace Fisharebest\Webtrees\Http\ResetHandlers;
+
+use Fisharebest\Webtrees\Http\RequestHandlers\PasswordResetPage;
+use Fisharebest\Webtrees\Services\UserService;
+use Fisharebest\Webtrees\TestCase;
+use Fisharebest\Webtrees\User;
+use Fisharebest\Webtrees\View;
+
+/**
+ * @covers \Fisharebest\Webtrees\Http\RequestHandlers\PasswordResetPage
+ */
+class PasswordResetPageTest extends TestCase
+{
+ /**
+ * @return void
+ */
+ public function testPasswordResetPageWithValidToken(): void
+ {
+ $user = $this->createMock(User::class);
+
+ $user_service = $this->createMock(UserService::class);
+ $user_service->expects($this->once())->method('findByToken')->willReturn($user);
+
+ View::share('tree', null);
+
+ $request = self::createRequest();
+ $handler = new PasswordResetPage($user_service);
+ $response = $handler->handle($request);
+
+ self::assertSame(self::STATUS_OK, $response->getStatusCode());
+ }
+
+ /**
+ * @return void
+ */
+ public function testPasswordResetPageWithoutValidToken(): void
+ {
+ $user_service = $this->createMock(UserService::class);
+ $user_service->expects($this->once())->method('findByToken')->willReturn(null);
+
+ $request = self::createRequest();
+ $handler = new PasswordResetPage($user_service);
+ $response = $handler->handle($request);
+
+ self::assertSame(self::STATUS_FOUND, $response->getStatusCode());
+ }
+}
diff --git a/tests/app/Http/RequestHandlers/PingTest.php b/tests/app/Http/RequestHandlers/PingTest.php
index 62618e29d3..589942c219 100644
--- a/tests/app/Http/RequestHandlers/PingTest.php
+++ b/tests/app/Http/RequestHandlers/PingTest.php
@@ -21,53 +21,60 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers;
use Fisharebest\Webtrees\Services\ServerCheckService;
use Fisharebest\Webtrees\Services\UserService;
use Fisharebest\Webtrees\TestCase;
+use Illuminate\Support\Collection;
/**
* @covers \Fisharebest\Webtrees\Http\RequestHandlers\Ping
*/
class PingTest extends TestCase
{
- protected static $uses_database = true;
-
/**
* @return void
*/
- public function testPing(): void
+ public function testPingOK(): void
{
- $handler = new Ping(new ServerCheckService());
- $request = self::createRequest('GET');
- $response = $handler->handle($request);
+ $server_check_service = $this->createMock(ServerCheckService::class);
+ $server_check_service->expects($this->once())->method('serverErrors')->willReturn(new Collection());
+ $server_check_service->expects($this->once())->method('serverWarnings')->willReturn(new Collection());
+
+ $request = self::createRequest();
+ $handler = new Ping($server_check_service);
+ $response = $handler->handle($request);
self::assertSame(self::STATUS_OK, $response->getStatusCode());
self::assertSame('OK', (string) $response->getBody());
}
/**
- * @expectedException \Symfony\Component\HttpKernel\Exception\NotFoundHttpException
- * @expectedExceptionMessage User ID 98765 not found
* @return void
*/
- public function testDeleteNonExistingUser(): void
+ public function testPingWarnings(): void
{
- $user_service = new UserService();
- $user_service->create('user1', 'real1', 'email1', 'pass1');
- $handler = new DeleteUser($user_service);
- $request = self::createRequest('POST', ['route' => 'delete-user'], ['user_id' => 98765]);
- $handler->handle($request);
+ $server_check_service = $this->createMock(ServerCheckService::class);
+ $server_check_service->expects($this->once())->method('serverErrors')->willReturn(new Collection());
+ $server_check_service->expects($this->once())->method('serverWarnings')->willReturn(new Collection('warning'));
+
+ $request = self::createRequest();
+ $handler = new Ping($server_check_service);
+ $response = $handler->handle($request);
+
+ self::assertSame(self::STATUS_OK, $response->getStatusCode());
+ self::assertSame('WARNING', (string) $response->getBody());
}
/**
- * @expectedException \Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException
- * @expectedExceptionMessage Cannot delete an administrator
* @return void
*/
- public function testCannotDeleteAdministrator(): void
+ public function testPingErrors(): void
{
- $user_service = new UserService();
- $user = $user_service->create('user1', 'real1', 'email1', 'pass1');
- $user->setPreference('canadmin', '1');
- $handler = new DeleteUser($user_service);
- $request = self::createRequest('POST', ['route' => 'delete-user'], ['user_id' => $user->id()]);
- $handler->handle($request);
+ $server_check_service = $this->createMock(ServerCheckService::class);
+ $server_check_service->expects($this->once())->method('serverErrors')->willReturn(new Collection('error'));
+
+ $request = self::createRequest();
+ $handler = new Ping($server_check_service);
+ $response = $handler->handle($request);
+
+ self::assertSame(self::STATUS_OK, $response->getStatusCode());
+ self::assertSame('ERROR', (string) $response->getBody());
}
}
diff --git a/tests/app/Http/RequestHandlers/PrivacyPolicyTest.php b/tests/app/Http/RequestHandlers/PrivacyPolicyTest.php
index ff2e03312e..75ba31987b 100644
--- a/tests/app/Http/RequestHandlers/PrivacyPolicyTest.php
+++ b/tests/app/Http/RequestHandlers/PrivacyPolicyTest.php
@@ -30,8 +30,8 @@ class PrivacyPolicyTest extends TestCase
*/
public function testHandler(): void
{
- $request = self::createRequest('POST', ['route' => 'privacy-policy']);
- $response = app(PrivacyPolicy::class)->handle($request);
+ $request = self::createRequest();
+ $response = app(PrivacyPolicy::class)->handle($request);
self::assertSame(self::STATUS_OK, $response->getStatusCode());
}
diff --git a/tests/app/Http/RequestHandlers/SelectLanguageTest.php b/tests/app/Http/RequestHandlers/SelectLanguageTest.php
index 138d5d701a..e2be952c90 100644
--- a/tests/app/Http/RequestHandlers/SelectLanguageTest.php
+++ b/tests/app/Http/RequestHandlers/SelectLanguageTest.php
@@ -27,8 +27,6 @@ use Fisharebest\Webtrees\TestCase;
*/
class SelectLanguageTest extends TestCase
{
- protected static $uses_database = true;
-
/**
* @return void
*/
@@ -36,7 +34,7 @@ class SelectLanguageTest extends TestCase
{
$user = new GuestUser();
$handler = new SelectLanguage($user);
- $request = self::createRequest('POST', ['route' => 'language'], ['language' => 'fr']);
+ $request = self::createRequest(self::METHOD_POST, [], ['language' => 'fr']);
$response = $handler->handle($request);
self::assertSame(self::STATUS_NO_CONTENT, $response->getStatusCode());
@@ -50,7 +48,7 @@ class SelectLanguageTest extends TestCase
$user_service = new UserService();
$user = $user_service->create('user', 'real', 'email', 'pass');
$handler = new SelectLanguage($user);
- $request = self::createRequest('POST', ['route' => 'language'], ['language' => 'fr']);
+ $request = self::createRequest(self::METHOD_POST, [], ['language' => 'fr']);
$response = $handler->handle($request);
self::assertSame(self::STATUS_NO_CONTENT, $response->getStatusCode());
diff --git a/tests/app/Http/RequestHandlers/SelectThemeTest.php b/tests/app/Http/RequestHandlers/SelectThemeTest.php
index 2f445c7524..1da460c1d3 100644
--- a/tests/app/Http/RequestHandlers/SelectThemeTest.php
+++ b/tests/app/Http/RequestHandlers/SelectThemeTest.php
@@ -19,28 +19,29 @@ declare(strict_types=1);
namespace Fisharebest\Webtrees\Http\RequestHandlers;
use Fisharebest\Webtrees\GuestUser;
-use Fisharebest\Webtrees\Services\UserService;
use Fisharebest\Webtrees\TestCase;
+use Fisharebest\Webtrees\User;
/**
* @covers \Fisharebest\Webtrees\Http\RequestHandlers\SelectTheme
*/
class SelectThemeTest extends TestCase
{
- protected static $uses_database = true;
-
/**
* @return void
*/
public function testSelectThemeForGuest(): void
{
- $user = new GuestUser();
- $handler = new SelectTheme($user);
- $request = self::createRequest('POST', ['route' => 'theme'], ['theme' => 'FOO']);
+ $user = $this->createMock(GuestUser::class);
+ $user->expects($this->once())->method('setPreference')->with('theme', 'FOO');
+
+ $request = self::createRequest(self::METHOD_POST, [], ['theme' => 'FOO'])
+ ->withAttribute('user', $user);
+
+ $handler = new SelectTheme();
$response = $handler->handle($request);
self::assertSame(self::STATUS_NO_CONTENT, $response->getStatusCode());
- self::assertSame('FOO', $user->getPreference('theme'));
}
/**
@@ -48,13 +49,15 @@ class SelectThemeTest extends TestCase
*/
public function testSelectThemeForUser(): void
{
- $user_service = new UserService();
- $user = $user_service->create('user', 'real', 'email', 'pass');
- $handler = new SelectTheme($user);
- $request = self::createRequest('POST', ['route' => 'theme'], ['theme' => 'FOO']);
- $response = $handler->handle($request);
+ $user = $this->createMock(User::class);
+ $user->expects($this->once())->method('setPreference')->with('theme', 'FOO');
+
+ $request = self::createRequest(self::METHOD_POST, [], ['theme' => 'FOO'])
+ ->withAttribute('user', $user);
+
+ $handler = new SelectTheme();
+ $response = $handler->handle($request);
self::assertSame(self::STATUS_NO_CONTENT, $response->getStatusCode());
- self::assertSame('FOO', $user->getPreference('theme'));
}
}
diff --git a/tests/feature/IndividualListTest.php b/tests/feature/IndividualListTest.php
index 1cfd9f32f9..72775f07aa 100644
--- a/tests/feature/IndividualListTest.php
+++ b/tests/feature/IndividualListTest.php
@@ -49,7 +49,7 @@ class IndividualListTest extends TestCase
$individual_list_service = new IndividualListService($localization_service, $tree);
$controller = new ListController($individual_list_service, $localization_service);
- $request = self::createRequest('GET', [
+ $request = self::createRequest(self::METHOD_GET, [
'route' => 'module',
'module' => 'individual_list',
'action' => 'List',
@@ -58,25 +58,25 @@ class IndividualListTest extends TestCase
$response = $controller->individualList($request, $list_module);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
- $request = self::createRequest('GET', ['route' => 'module', 'module' => 'individual_list', 'action' => 'List', 'alpha' => 'B'])
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'module', 'module' => 'individual_list', 'action' => 'List', 'alpha' => 'B'])
->withAttribute('tree', $tree)
->withAttribute('user', $user);
$response = $controller->individualList($request, $list_module);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
- $request = self::createRequest('GET', ['route' => 'module', 'module' => 'individual_list', 'action' => 'List', 'alpha' => ','])
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'module', 'module' => 'individual_list', 'action' => 'List', 'alpha' => ','])
->withAttribute('tree', $tree)
->withAttribute('user', $user);
$response = $controller->individualList($request, $list_module);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
- $request = self::createRequest('GET', ['route' => 'module', 'module' => 'individual_list', 'action' => 'List', 'alpha' => '@'])
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'module', 'module' => 'individual_list', 'action' => 'List', 'alpha' => '@'])
->withAttribute('tree', $tree)
->withAttribute('user', $tree);
$response = $controller->individualList($request, $list_module);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());
- $request = self::createRequest('GET', ['route' => 'module', 'module' => 'individual_list', 'action' => 'List', 'surname' => 'BRAUN'])
+ $request = self::createRequest(self::METHOD_GET, ['route' => 'module', 'module' => 'individual_list', 'action' => 'List', 'surname' => 'BRAUN'])
->withAttribute('tree', $tree)
->withAttribute('user', $user);
$response = $controller->individualList($request, $list_module);
diff --git a/tests/feature/UserAdminTest.php b/tests/feature/UserAdminTest.php
index a66a34a444..08f95d1ee9 100644
--- a/tests/feature/UserAdminTest.php
+++ b/tests/feature/UserAdminTest.php
@@ -42,7 +42,7 @@ class UserAdminTest extends TestCase
$user_service->create('UserName', 'RealName', 'user@example.com', 'secret');
$controller = app(UsersController::class);
- $request = self::createRequest('GET', ['length' => '10',])->withAttribute('user', $admin);
+ $request = self::createRequest(self::METHOD_GET, ['length' => '10',])->withAttribute('user', $admin);
$response = $controller->data($request);
$this->assertSame(self::STATUS_OK, $response->getStatusCode());