Skip to content

Commit f8b58b4

Browse files
committed
Fixing tests to match changes in the API.
1 parent 805c167 commit f8b58b4

File tree

2 files changed

+94
-99
lines changed

2 files changed

+94
-99
lines changed

app/model/view/GroupViewFactory.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,8 @@ public function getGroupsForExtension(array $groups, array $attributes = [], arr
382382
$attributesMap[$gid][$service] = $attributesMap[$gid][$service] ?? [];
383383

384384
$key = $attribute->getKey();
385-
$attributesMap[][$service][$key] = $attribute->getValue();
385+
$attributesMap[$gid][$service][$key] = $attributesMap[$gid][$service][$key] ?? [];
386+
$attributesMap[$gid][$service][$key][] = $attribute->getValue();
386387
}
387388

388389
// create membership mapping group-id => membership-type

tests/Presenters/GroupExternalAttributesPresenter.phpt

Lines changed: 92 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
$container = require_once __DIR__ . "/../bootstrap.php";
44

55
use App\V1Module\Presenters\GroupExternalAttributesPresenter;
6+
use App\Model\Repository\Users;
7+
use App\Model\Repository\GroupMemberships;
68
use App\Exceptions\BadRequestException;
79
use App\Security\TokenScope;
810
use Doctrine\ORM\EntityManagerInterface;
@@ -27,6 +29,12 @@ class TestGroupExternalAttributesPresenter extends Tester\TestCase
2729
/** @var Nette\Security\User */
2830
private $user;
2931

32+
/** @var Users */
33+
private $users;
34+
35+
/** @var GroupMemberships */
36+
private $groupMemberships;
37+
3038
/** @var App\Security\AccessManager */
3139
private $accessManager;
3240

@@ -37,6 +45,8 @@ class TestGroupExternalAttributesPresenter extends Tester\TestCase
3745
$this->container = $container;
3846
$this->em = PresenterTestHelper::getEntityManager($container);
3947
$this->user = $container->getByType(\Nette\Security\User::class);
48+
$this->users = $container->getByType(Users::class);
49+
$this->groupMemberships = $container->getByType(GroupMemberships::class);
4050
$this->accessManager = $container->getByType(\App\Security\AccessManager::class);
4151
}
4252

@@ -54,142 +64,126 @@ class TestGroupExternalAttributesPresenter extends Tester\TestCase
5464
Mockery::close();
5565
}
5666

57-
private function checkFilterResults(array $payload, int $attrCount, int $groupCount)
58-
{
59-
Assert::count(2, $payload);
60-
Assert::true(array_key_exists('attributes', $payload));
61-
Assert::true(array_key_exists('groups', $payload));
62-
Assert::count($attrCount, $payload['attributes']);
63-
Assert::count($groupCount, $payload['groups']);
64-
65-
$indexedGroups = [];
66-
foreach ($payload['groups'] as $group) {
67-
$indexedGroups[$group['id']] = $group['parentGroupId'];
68-
}
69-
70-
foreach ($payload['attributes'] as $attribute) {
71-
$groupId = $attribute->getGroup()->getId();
72-
while ($groupId) {
73-
Assert::true(array_key_exists($groupId, $indexedGroups));
74-
$groupId = $indexedGroups[$groupId];
75-
}
76-
}
77-
}
78-
79-
/*
80-
public function testGetAttributesSemester()
67+
public function testGetGroupsNoUser()
8168
{
8269
PresenterTestHelper::loginDefaultAdmin($this->container, [TokenScope::GROUP_EXTERNAL_ATTRIBUTES]);
70+
$groups = $this->presenter->groups->findBy(['archivedAt' => null]);
71+
Assert::true(count($groups) > 0);
72+
$instanceId = $groups[0]->getInstance()->getId();
8373

84-
$filter = [["key" => "semester", "value" => "summer"]];
8574
$payload = PresenterTestHelper::performPresenterRequest(
8675
$this->presenter,
8776
'V1:GroupExternalAttributes',
8877
'GET',
89-
['action' => 'default', 'filter' => json_encode($filter)],
78+
['action' => 'default', 'instance' => $instanceId, 'service' => 'test'],
9079
);
9180

92-
$this->checkFilterResults($payload, 1, 3);
93-
Assert::equal('test', $payload['attributes'][0]->getService());
94-
Assert::equal('semester', $payload['attributes'][0]->getKey());
95-
Assert::equal('summer', $payload['attributes'][0]->getValue());
96-
}
81+
Assert::count(count($groups), $payload);
82+
$indexedPayload = [];
83+
foreach ($payload as $group) {
84+
$indexedPayload[$group['id']] = $group;
85+
}
9786

98-
public function testGetAttributesLecture()
99-
{
100-
PresenterTestHelper::loginDefaultAdmin($this->container, [TokenScope::GROUP_EXTERNAL_ATTRIBUTES]);
87+
foreach ($groups as $group) {
88+
Assert::true(array_key_exists($group->getId(), $indexedPayload));
89+
$groupPayload = $indexedPayload[$group->getId()];
90+
91+
// check basic group parameters
92+
Assert::count(count($group->getPrimaryAdmins()), $groupPayload['admins']);
93+
Assert::equal($group->isOrganizational(), $groupPayload['organizational']);
94+
Assert::equal($group->isExam(), $groupPayload['exam']);
95+
Assert::equal($group->isPublic(), $groupPayload['public']);
96+
Assert::equal($group->isDetaining(), $groupPayload['detaining']);
97+
98+
// attributes
99+
Assert::true(array_key_exists('attributes', $groupPayload));
100+
$testAttributesCount = 0;
101+
foreach ($group->getExternalAttributes() as $attribute) {
102+
if ($attribute->getService() !== 'test') {
103+
continue; // only 'test' attributes were requested
104+
}
105+
++$testAttributesCount;
106+
$values = $groupPayload['attributes'][$attribute->getService()][$attribute->getKey()] ?? null;
107+
Assert::true(in_array($attribute->getValue(), $values));
108+
}
101109

102-
$filter = [["key" => "lecture", "value" => "demo"]];
103-
$payload = PresenterTestHelper::performPresenterRequest(
104-
$this->presenter,
105-
'V1:GroupExternalAttributes',
106-
'GET',
107-
['action' => 'default', 'filter' => json_encode($filter)],
108-
);
110+
$actualCount = 0;
111+
foreach ($groupPayload['attributes']['test'] ?? [] as $values) {
112+
$actualCount += count($values);
113+
}
114+
Assert::equal($testAttributesCount, $actualCount);
109115

110-
$this->checkFilterResults($payload, 1, 2);
111-
Assert::equal('test', $payload['attributes'][0]->getService());
112-
Assert::equal('lecture', $payload['attributes'][0]->getKey());
113-
Assert::equal('demo', $payload['attributes'][0]->getValue());
116+
// user membership
117+
Assert::null($groupPayload['membership']);
118+
}
114119
}
115120

116-
public function testGetAttributesMulti()
121+
public function testGetGroupsStudent()
117122
{
118123
PresenterTestHelper::loginDefaultAdmin($this->container, [TokenScope::GROUP_EXTERNAL_ATTRIBUTES]);
124+
$users = $this->users->findBy(['email' => PresenterTestHelper::STUDENT_GROUP_MEMBER_LOGIN]);
125+
Assert::count(1, $users);
126+
$user = current($users);
127+
128+
$groups = $this->presenter->groups->findBy(['archivedAt' => null]);
129+
Assert::true(count($groups) > 0);
130+
$instanceId = $groups[0]->getInstance()->getId();
119131

120-
$filter = [
121-
["service" => "test", "key" => "semester",],
122-
["key" => "lecture", "value" => "demo"],
123-
];
124132
$payload = PresenterTestHelper::performPresenterRequest(
125133
$this->presenter,
126134
'V1:GroupExternalAttributes',
127135
'GET',
128-
['action' => 'default', 'filter' => json_encode($filter)],
136+
['action' => 'default', 'instance' => $instanceId, 'service' => 'test', 'user' => $user->getId()],
129137
);
130138

131-
$this->checkFilterResults($payload, 3, 4);
132-
$attrs = [];
133-
foreach ($payload['attributes'] as $attr) {
134-
Assert::equal('test', $attr->getService());
135-
$attrs[] = $attr->getKey() . '=' . $attr->getValue();
139+
Assert::count(count($groups), $payload);
140+
$total = 0;
141+
foreach ($payload as $group) {
142+
$memberships = $this->groupMemberships->findBy(['group' => $group['id'], 'user' => $user->getId()]);
143+
if (empty($memberships)) {
144+
Assert::null($group['membership']);
145+
} else {
146+
Assert::count(1, $memberships);
147+
Assert::equal(current($memberships)->getType(), $group['membership']);
148+
++$total;
149+
}
136150
}
137-
sort($attrs);
138-
Assert::equal(['lecture=demo', 'semester=summer', 'semester=winter'], $attrs);
151+
Assert::true($total > 0);
139152
}
140153

141-
public function testGetAttributesEmpty()
154+
public function testGetGroupsTeacher()
142155
{
143156
PresenterTestHelper::loginDefaultAdmin($this->container, [TokenScope::GROUP_EXTERNAL_ATTRIBUTES]);
157+
$users = $this->users->findBy(['email' => PresenterTestHelper::GROUP_SUPERVISOR_LOGIN]);
158+
Assert::count(1, $users);
159+
$user = current($users);
144160

145-
$filter = [["key" => "lecture", "value" => "sleeping"]];
146-
$payload = PresenterTestHelper::performPresenterRequest(
147-
$this->presenter,
148-
'V1:GroupExternalAttributes',
149-
'GET',
150-
['action' => 'default', 'filter' => json_encode($filter)],
151-
);
152-
153-
$this->checkFilterResults($payload, 0, 0);
154-
}
155-
156-
public function testGetAttributesEmpty2()
157-
{
158-
PresenterTestHelper::loginDefaultAdmin($this->container, [TokenScope::GROUP_EXTERNAL_ATTRIBUTES]);
161+
$groups = $this->presenter->groups->findBy(['archivedAt' => null]);
162+
Assert::true(count($groups) > 0);
163+
$instanceId = $groups[0]->getInstance()->getId();
159164

160-
$filter = [["service" => "3rdparty", "key" => "lecture"]];
161165
$payload = PresenterTestHelper::performPresenterRequest(
162166
$this->presenter,
163167
'V1:GroupExternalAttributes',
164168
'GET',
165-
['action' => 'default', 'filter' => json_encode($filter)],
169+
['action' => 'default', 'instance' => $instanceId, 'service' => 'test', 'user' => $user->getId()],
166170
);
167171

168-
$this->checkFilterResults($payload, 0, 0);
169-
}
170-
171-
public function testGetAttributesFails()
172-
{
173-
PresenterTestHelper::loginDefaultAdmin($this->container, [TokenScope::GROUP_EXTERNAL_ATTRIBUTES]);
174-
175-
$filters = [
176-
["key" => "semester", "value" => "summer"],
177-
"semester: summer",
178-
[["semester" => "summer"]],
179-
[["key" => "semester", "value" => 1]],
180-
];
181-
foreach ($filters as $filter) {
182-
Assert::exception(function () use ($filter) {
183-
PresenterTestHelper::performPresenterRequest(
184-
$this->presenter,
185-
'V1:GroupExternalAttributes',
186-
'GET',
187-
['action' => 'default', 'filter' => json_encode($filter)],
188-
);
189-
}, BadRequestException::class);
172+
Assert::count(count($groups), $payload);
173+
$total = 0;
174+
foreach ($payload as $group) {
175+
$memberships = $this->groupMemberships->findBy(['group' => $group['id'], 'user' => $user->getId()]);
176+
if (empty($memberships)) {
177+
Assert::null($group['membership']);
178+
} else {
179+
Assert::count(1, $memberships);
180+
Assert::equal(current($memberships)->getType(), $group['membership']);
181+
++$total;
182+
}
190183
}
184+
Assert::true($total > 0);
191185
}
192-
*/
186+
193187
public function testGetAttributesAdd()
194188
{
195189
PresenterTestHelper::loginDefaultAdmin($this->container, [TokenScope::GROUP_EXTERNAL_ATTRIBUTES]);

0 commit comments

Comments
 (0)