Skip to content

Commit

Permalink
add/improve tests
Browse files Browse the repository at this point in the history
  • Loading branch information
sgiehl committed Oct 7, 2024
1 parent 4bed4ec commit 1593643
Show file tree
Hide file tree
Showing 8 changed files with 130 additions and 89 deletions.
5 changes: 4 additions & 1 deletion plugins/UsersManager/API.php
Original file line number Diff line number Diff line change
Expand Up @@ -957,7 +957,10 @@ public function updateUser(
// If the email of a user is changed, who was invited and did not yet accept the invitation
// we send a new invite to the new address.
// this will indirectly invalidate the invitation sent to the previous address
$this->userRepository->reInviteUser($userLogin);
$this->userRepository->reInviteUser(
$userLogin,
(int) Config\GeneralConfig::getConfigValue('default_invite_user_token_expiry_days')
);
} elseif ($hasEmailChanged && $isEmailNotificationOnInConfig) {
$this->sendEmailChangedEmail($userInfo, $email);
}
Expand Down
6 changes: 3 additions & 3 deletions plugins/UsersManager/Model.php
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ public function hashTokenAuth($tokenAuth)
return hash(self::TOKEN_HASH_ALGO, $tokenAuth . $salt);
}

public function generateRandomInviteToken()
public function generateRandomInviteToken(): string
{
$count = 0;

Expand Down Expand Up @@ -618,15 +618,15 @@ public function addUser($userLogin, $hashedPassword, $email, $dateRegistered)
$db->insert($this->userTable, $user);
}

public function attachInviteToken($userLogin, $token, $expiryInDays = 7)
public function attachInviteToken(string $userLogin, string $token, int $expiryInDays): void
{
$this->updateUserFields($userLogin, [
'invite_token' => $this->hashTokenAuth($token),
'invite_expired_at' => Date::now()->addDay($expiryInDays)->getDatetime()
]);
}

public function attachInviteLinkToken($userLogin, $token, $expiryInDays = 7)
public function attachInviteLinkToken(string $userLogin, string $token, int $expiryInDays): void
{
$this->updateUserFields($userLogin, [
'invite_link_token' => $this->hashTokenAuth($token),
Expand Down
4 changes: 2 additions & 2 deletions plugins/UsersManager/Repository/UserRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -109,15 +109,15 @@ public function inviteUser(string $userLogin, string $email, ?int $initialIdSite
$this->sendInvitationEmail($user, $generatedToken, $expiryInDays);
}

public function reInviteUser(string $userLogin, $expiryInDays = null): void
public function reInviteUser(string $userLogin, int $expiryInDays): void
{
$user = $this->model->getUser($userLogin);
$generatedToken = $this->model->generateRandomInviteToken();
$this->model->attachInviteToken($userLogin, $generatedToken, $expiryInDays);
$this->sendInvitationEmail($user, $generatedToken, $expiryInDays);
}

public function generateInviteToken(string $userLogin, $expiryInDays = null): string
public function generateInviteToken(string $userLogin, int $expiryInDays): string
{
$generatedToken = $this->model->generateRandomInviteToken();
$this->model->attachInviteLinkToken($userLogin, $generatedToken, $expiryInDays);
Expand Down
42 changes: 40 additions & 2 deletions plugins/UsersManager/tests/Integration/APITest.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
use Piwik\NoAccessException;
use Piwik\Option;
use Piwik\Piwik;
use Piwik\Plugins\CoreAdminHome\Emails\UserCreatedEmail;
use Piwik\Plugins\UsersManager\Emails\UserInviteEmail;
use Piwik\Plugins\UsersManager\SystemSettings;
use Piwik\Plugins\SitesManager\API as SitesManagerAPI;
use Piwik\Plugins\UsersManager\API;
Expand Down Expand Up @@ -1369,6 +1371,11 @@ public function testInviteUserInitialIdSiteError()
public function testInviteUserAsSuperUser()
{
$eventWasFired = false;
$capturedMails = [];

Piwik::addAction('Mail.send', function (Mail $mail) use (&$capturedMails) {
$capturedMails[] = $mail;
});

EventDispatcher::getInstance()->addObserver(
'UsersManager.inviteUser.end',
Expand All @@ -1380,9 +1387,40 @@ function ($userLogin, $email) use (&$eventWasFired) {
);

$this->api->inviteUser('pendingLoginTest', '[email protected]', 1);
$user = $this->model->isPendingUser('pendingLoginTest');
self::assertTrue($user);
$isPending = $this->model->isPendingUser('pendingLoginTest');
self::assertTrue($isPending);
self::assertTrue($eventWasFired);

self::assertCount(2, $capturedMails);
self::assertInstanceOf(UserCreatedEmail::class, $capturedMails[0]);
self::assertInstanceOf(UserInviteEmail::class, $capturedMails[1]);
}

public function testChangingEmailOfInvitedUserShouldResendInvitation()
{
Fixture::createSuperUser();
$this->api->inviteUser('pendingLoginTest', '[email protected]', 1);
$isPending = $this->model->isPendingUser('pendingLoginTest');
self::assertTrue($isPending);

$eventWasFired = false;
$capturedMails = [];

Piwik::addAction('Mail.send', function (Mail $mail) use (&$capturedMails) {
$capturedMails[] = $mail;
});

EventDispatcher::getInstance()->addObserver(
'UsersManager.inviteUser.end',
function ($userLogin, $email) use (&$eventWasFired) {
$eventWasFired = true;
}
);

$this->api->updateUser('pendingLoginTest', false, '[email protected]', false, Fixture::ADMIN_USER_PASSWORD);
self::assertFalse($eventWasFired); // event should not be fired on email change
self::assertCount(1, $capturedMails);
self::assertInstanceOf(UserInviteEmail::class, $capturedMails[0]);
}

public function testInviteUserAsAdmin()
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 1593643

Please sign in to comment.