Skip to content

Commit 298563d

Browse files
committed
Adding tests for new users' external-IDs endpoints.
1 parent a3ddfa0 commit 298563d

File tree

2 files changed

+91
-0
lines changed

2 files changed

+91
-0
lines changed

app/V1Module/presenters/UsersPresenter.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -814,6 +814,7 @@ public function actionUpdateExternalLogin(string $id, string $service)
814814
}
815815

816816
$this->externalLogins->persist($login);
817+
$this->users->refresh($user);
817818
}
818819

819820
$this->sendSuccessResponse($this->userViewFactory->getUser($user));
@@ -841,6 +842,7 @@ public function actionRemoveExternalLogin(string $id, string $service)
841842
$login = $this->externalLogins->findByUser($user, $service);
842843
if ($login) {
843844
$this->externalLogins->remove($login);
845+
$this->users->refresh($user);
844846
}
845847
$this->sendSuccessResponse($this->userViewFactory->getUser($user));
846848
}

tests/Presenters/UsersPresenter.phpt

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -837,6 +837,95 @@ class TestUsersPresenter extends Tester\TestCase
837837
Assert::false($payload['privateData']['isAllowed']);
838838
Assert::false($this->users->getByEmail($victim)->isAllowed());
839839
}
840+
841+
public function testSetNewExternalId()
842+
{
843+
$victim = "[email protected]";
844+
PresenterTestHelper::loginDefaultAdmin($this->container);
845+
$user = $this->users->getByEmail($victim);
846+
Assert::false($user->hasExternalAccounts());
847+
848+
$payload = PresenterTestHelper::performPresenterRequest(
849+
$this->presenter,
850+
$this->presenterPath,
851+
'POST',
852+
['action' => 'updateExternalLogin', 'id' => $user->getId(), 'service' => 'test-cas'],
853+
['externalId' => 'abc']
854+
);
855+
856+
Assert::equal($user->getId(), $payload['id']);
857+
Assert::true($payload['privateData']['isExternal']);
858+
859+
$els = $this->presenter->externalLogins->findAll();
860+
Assert::count(1, $els);
861+
Assert::equal($user->getId(), $els[0]->getUser()->getId());
862+
Assert::equal('abc', $els[0]->getExternalId());
863+
Assert::equal('test-cas', $els[0]->getAuthService());
864+
865+
$this->users->refresh($user);
866+
Assert::true($user->hasExternalAccounts());
867+
Assert::equal(['test-cas' => 'abc'], $user->getConsolidatedExternalLogins());
868+
}
869+
870+
public function testUpdateExternalId()
871+
{
872+
$victim = "[email protected]";
873+
PresenterTestHelper::loginDefaultAdmin($this->container);
874+
$user = $this->users->getByEmail($victim);
875+
Assert::false($user->hasExternalAccounts());
876+
$this->presenter->externalLogins->connect('test-cas', $user, 'old');
877+
$this->users->refresh($user);
878+
Assert::equal(['test-cas' => 'old'], $user->getConsolidatedExternalLogins());
879+
880+
$payload = PresenterTestHelper::performPresenterRequest(
881+
$this->presenter,
882+
$this->presenterPath,
883+
'POST',
884+
['action' => 'updateExternalLogin', 'id' => $user->getId(), 'service' => 'test-cas'],
885+
['externalId' => 'abc']
886+
);
887+
888+
Assert::equal($user->getId(), $payload['id']);
889+
Assert::true($payload['privateData']['isExternal']);
890+
891+
$els = $this->presenter->externalLogins->findAll();
892+
Assert::count(1, $els);
893+
Assert::equal($user->getId(), $els[0]->getUser()->getId());
894+
Assert::equal('abc', $els[0]->getExternalId());
895+
Assert::equal('test-cas', $els[0]->getAuthService());
896+
897+
$this->users->refresh($user);
898+
Assert::true($user->hasExternalAccounts());
899+
Assert::equal(['test-cas' => 'abc'], $user->getConsolidatedExternalLogins());
900+
}
901+
902+
public function testRemoveExternalId()
903+
{
904+
$victim = "[email protected]";
905+
PresenterTestHelper::loginDefaultAdmin($this->container);
906+
$user = $this->users->getByEmail($victim);
907+
Assert::false($user->hasExternalAccounts());
908+
$this->presenter->externalLogins->connect('test-cas', $user, 'old');
909+
$this->users->refresh($user);
910+
Assert::equal(['test-cas' => 'old'], $user->getConsolidatedExternalLogins());
911+
912+
$payload = PresenterTestHelper::performPresenterRequest(
913+
$this->presenter,
914+
$this->presenterPath,
915+
'DELETE',
916+
['action' => 'removeExternalLogin', 'id' => $user->getId(), 'service' => 'test-cas']
917+
);
918+
919+
Assert::equal($user->getId(), $payload['id']);
920+
Assert::false($payload['privateData']['isExternal']);
921+
922+
$els = $this->presenter->externalLogins->findAll();
923+
Assert::count(0, $els);
924+
925+
$this->users->refresh($user);
926+
Assert::false($user->hasExternalAccounts());
927+
Assert::equal([], $user->getConsolidatedExternalLogins());
928+
}
840929
}
841930

842931
(new TestUsersPresenter())->run();

0 commit comments

Comments
 (0)