Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/UsersManager/tests/Integration/UserInviteTest.php')
-rw-r--r--plugins/UsersManager/tests/Integration/UserInviteTest.php102
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;
+ }
+ })],
+ ]),
+ ];
+ }
}