diff options
Diffstat (limited to 'plugins/UsersManager/tests/Integration/UserInviteTest.php')
-rw-r--r-- | plugins/UsersManager/tests/Integration/UserInviteTest.php | 102 |
1 files changed, 83 insertions, 19 deletions
diff --git a/plugins/UsersManager/tests/Integration/UserInviteTest.php b/plugins/UsersManager/tests/Integration/UserInviteTest.php index 098089d33e..3c70b7068a 100644 --- a/plugins/UsersManager/tests/Integration/UserInviteTest.php +++ b/plugins/UsersManager/tests/Integration/UserInviteTest.php @@ -1,4 +1,5 @@ <?php + /** * Matomo - free/libre analytics platform * @@ -8,10 +9,16 @@ namespace Piwik\Plugins\UsersManager\tests\Integration; +use PHPMailer\PHPMailer\PHPMailer; +use Piwik\API\Request; use Piwik\Date; +use Piwik\EventDispatcher; use Piwik\Http; +use Piwik\Plugins\UsersManager\API; use Piwik\Plugins\UsersManager\Model; +use Piwik\Plugins\UsersManager\Tasks; use Piwik\Tests\Framework\Fixture; +use Piwik\Tests\Framework\Mock\FakeAccess; use Piwik\Tests\Framework\TestCase\IntegrationTestCase; /** @@ -22,45 +29,102 @@ use Piwik\Tests\Framework\TestCase\IntegrationTestCase; */ class UserInviteTest extends IntegrationTestCase { - /** * @var Model */ private $model; - protected $dateTime = '2013-01-23 01:23:45'; - protected $token = "13cb9dcef6cc70b02a640cee30dc8ce9"; - protected $pendingUser = array( - 'login' => '000pendingUser3', - 'email' => 'pendinguser3light@example.com' - ); + protected $pendingUser = [ + 'login' => '000pendingUser3', + 'email' => 'pendinguser3light@example.com' + ]; + protected $capturedToken = null; public function setUp(): void { parent::setUp(); + Fixture::createSuperUser(); + Fixture::createWebsite('2010-01-01 05:00:00'); $this->model = new Model(); - $this->model->addUser($this->pendingUser['login'], '', $this->pendingUser['email'], $this->dateTime, 1); } - public function test_getInviteUser() + public function testInviteUser() { + Request::processRequest( + 'UsersManager.inviteUser', + [ + 'userLogin' => $this->pendingUser['login'], + 'email' => $this->pendingUser['email'], + 'idSite' => 1, + 'expiryInDays' => 7 + ] + ); + $user = $this->model->getUser($this->pendingUser['login']); - $this->assertEquals('pending', $user['invite_status']); - } + // check token in database matches token in email + self::assertEquals($user['invite_token'], $this->model->hashTokenAuth($this->capturedToken)); + $response = Http::sendHttpRequest( + Fixture::getRootUrl() . 'tests/PHPUnit/proxy/index.php?module=Login&action=acceptInvitation&token=' . $this->capturedToken, + 10 + ); - public function test_addInviteUserToken() - { - $this->model->addTokenAuth($this->pendingUser['login'], $this->token, "Invite Token", - Date::now()->getDatetime(), - Date::now()->addDay(7)->getDatetime()); + $this->assertStringContainsString('Accept invitation', $response, 'error on accept invite page'); + + $response = Http::sendHttpRequest( + Fixture::getRootUrl() . 'tests/PHPUnit/proxy/index.php?module=Login&action=declineInvitation&token=' . $this->capturedToken, + 10 + ); + + $this->assertStringContainsString('decline this invitation', $response, 'error on decline invite page'); + + // move date after expire time, but before deletion time + Date::$now = Date::today()->addDay(8)->getTimestamp(); + + $eventWasFired = false; - $response = Http::sendHttpRequest(Fixture::getRootUrl() . 'tests/PHPUnit/proxy/index.php?module=Login&action=acceptInvitation&token=' . $this->token, - 10); + EventDispatcher::getInstance()->addObserver('UsersManager.deleteUser', function ($userLogin) use (&$eventWasFired) { + self::assertEquals($this->pendingUser['login'], $userLogin); + $eventWasFired = true; + }); - $this->assertStringContainsString('Accept Invitation', $response, 'error on accept invitation'); + $tasks = new Tasks(new Model(), API::getInstance()); + $tasks->cleanUpExpiredInvites(); + + // Task should not have removed the user yet, as expiry date time is not 3 days ago + self::assertIsArray($this->model->getUser($this->pendingUser['login'])); + + self::assertFalse($eventWasFired); + + // move date after expire and deletion time + Date::$now = Date::today()->addDay(3)->getTimestamp(); + + $tasks->cleanUpExpiredInvites(); + + // Task should have removed the user now + self::assertEmpty($this->model->getUser($this->pendingUser['login'])); + + self::assertTrue($eventWasFired); } + public function provideContainerConfig() + { + return [ + 'Piwik\Access' => new FakeAccess(), + 'observers.global' => \DI\add([ + ['Test.Mail.send', \DI\value(function (PHPMailer $mail) { + $body = $mail->createBody(); + $body = preg_replace("/=[\r\n]+/", '', $body); + preg_match('/&token=[\s]*3D([a-zA-Z0-9=\s]+)"/', $body, $matches); + if (!empty($matches[1])) { + $capturedToken = $matches[1]; + $capturedToken = preg_replace('/=\s*/', '', $capturedToken); + $this->capturedToken = $capturedToken; + } + })], + ]), + ]; + } } |