Skip to content

Commit 527f0b9

Browse files
committed
Adding tests to login endpoint modifications.
1 parent 5e730fb commit 527f0b9

File tree

2 files changed

+97
-8
lines changed

2 files changed

+97
-8
lines changed

app/V1Module/presenters/UsersPresenter.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -831,6 +831,7 @@ public function actionInvalidateTokens(string $id)
831831

832832
$this->sendSuccessResponse(
833833
[
834+
"user" => $this->userViewFactory->getUser($user),
834835
"accessToken" => $user === $this->getCurrentUser() ? $this->accessManager->issueRefreshedToken(
835836
$token
836837
) : null

tests/Presenters/LoginPresenter.phpt

Lines changed: 96 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@ class TestLoginPresenter extends Tester\TestCase
8585
$events = $this->presenter->securityEvents->findAll();
8686
Assert::count(0, $events);
8787

88-
$request = new Request(
88+
$payload = PresenterTestHelper::performPresenterRequest(
89+
$this->presenter,
8990
"V1:Login",
9091
"POST",
9192
["action" => "default"],
@@ -95,16 +96,47 @@ class TestLoginPresenter extends Tester\TestCase
9596
]
9697
);
9798

98-
/** @var JsonResponse $response */
99-
$response = $this->presenter->run($request);
100-
Assert::type(JsonResponse::class, $response);
101-
$result = $response->getPayload();
99+
$user = $this->presenter->users->getByEmail($this->userLogin);
100+
Assert::same($user->getId(), $payload["user"]["id"]);
101+
Assert::true($this->presenter->user->isLoggedIn());
102102

103-
Assert::same(200, $result["code"]);
104-
Assert::true(array_key_exists("accessToken", $result["payload"]));
105-
Assert::same($this->presenter->users->getByEmail($this->userLogin)->getId(), $result["payload"]["user"]["id"]);
103+
Assert::true(array_key_exists("accessToken", $payload));
104+
$token = $this->presenter->accessManager->decodeToken($payload["accessToken"]);
105+
Assert::same($user->getId(), $token->getUserId());
106+
Assert::same($this->presenter->accessManager->getExpiration(), $token->getExpirationTime());
107+
108+
$events = $this->presenter->securityEvents->findAll();
109+
Assert::count(1, $events);
110+
Assert::equal(SecurityEvent::TYPE_LOGIN, $events[0]->getType());
111+
Assert::equal($this->presenter->user->getId(), $events[0]->getUser()->getId());
112+
}
113+
114+
public function testLoginRestrictedExpiration()
115+
{
116+
$events = $this->presenter->securityEvents->findAll();
117+
Assert::count(0, $events);
118+
119+
$payload = PresenterTestHelper::performPresenterRequest(
120+
$this->presenter,
121+
"V1:Login",
122+
"POST",
123+
["action" => "default"],
124+
[
125+
"username" => $this->userLogin,
126+
"password" => $this->userPassword,
127+
"expiration" => 10,
128+
]
129+
);
130+
131+
$user = $this->presenter->users->getByEmail($this->userLogin);
132+
Assert::same($user->getId(), $payload["user"]["id"]);
106133
Assert::true($this->presenter->user->isLoggedIn());
107134

135+
Assert::true(array_key_exists("accessToken", $payload));
136+
$token = $this->presenter->accessManager->decodeToken($payload["accessToken"]);
137+
Assert::same($user->getId(), $token->getUserId());
138+
Assert::same(10, $token->getExpirationTime());
139+
108140
$events = $this->presenter->securityEvents->findAll();
109141
Assert::count(1, $events);
110142
Assert::equal(SecurityEvent::TYPE_LOGIN, $events[0]->getType());
@@ -171,10 +203,66 @@ class TestLoginPresenter extends Tester\TestCase
171203
$result = $response->getPayload();
172204

173205
Assert::same(200, $result["code"]);
206+
Assert::equal($user->getId(), $result["payload"]["user"]["id"]);
207+
Assert::true($this->presenter->user->isLoggedIn());
208+
174209
Assert::true(array_key_exists("accessToken", $result["payload"]));
210+
$token = $this->presenter->accessManager->decodeToken($result["payload"]["accessToken"]);
211+
Assert::same($user->getId(), $token->getUserId());
212+
Assert::same($this->presenter->accessManager->getExpiration(), $token->getExpirationTime());
213+
214+
$events = $this->presenter->securityEvents->findAll();
215+
Assert::count(1, $events);
216+
Assert::equal(SecurityEvent::TYPE_LOGIN_EXTERNAL, $events[0]->getType());
217+
Assert::equal($user->getId(), $events[0]->getUser()->getId());
218+
}
219+
220+
public function testLoginExternalRestrictedExpiration()
221+
{
222+
$events = $this->presenter->securityEvents->findAll();
223+
Assert::count(0, $events);
224+
225+
$authenticator = new ExternalServiceAuthenticator(
226+
[[
227+
'name' => 'test-cas',
228+
'jwtSecret' => 'tajnyRetezec',
229+
]],
230+
$this->externalLogins,
231+
$this->users,
232+
$this->logins,
233+
$this->instances,
234+
$this->emailVerificationHelper,
235+
$this->failureHelper
236+
);
237+
238+
$user = $this->presenter->users->getByEmail($this->userLogin);
239+
240+
$payload = [
241+
'iat' => time(),
242+
'id' => 'external-id-1',
243+
'mail' => $this->userLogin,
244+
'firstName' => $user->getFirstName(),
245+
'lastName' => $user->getLastName(),
246+
];
247+
$token = JWT::encode($payload, 'tajnyRetezec', "HS256");
248+
249+
$this->presenter->externalServiceAuthenticator = $authenticator;
250+
251+
$request = new Request("V1:Login", "POST", ["action" => "external", "authenticatorName" => "test-cas"], ['token' => $token, 'expiration' => 15]);
252+
253+
$response = $this->presenter->run($request);
254+
Assert::type(JsonResponse::class, $response);
255+
$result = $response->getPayload();
256+
257+
Assert::same(200, $result["code"]);
175258
Assert::equal($user->getId(), $result["payload"]["user"]["id"]);
176259
Assert::true($this->presenter->user->isLoggedIn());
177260

261+
Assert::true(array_key_exists("accessToken", $result["payload"]));
262+
$token = $this->presenter->accessManager->decodeToken($result["payload"]["accessToken"]);
263+
Assert::same($user->getId(), $token->getUserId());
264+
Assert::same(15, $token->getExpirationTime());
265+
178266
$events = $this->presenter->securityEvents->findAll();
179267
Assert::count(1, $events);
180268
Assert::equal(SecurityEvent::TYPE_LOGIN_EXTERNAL, $events[0]->getType());

0 commit comments

Comments
 (0)