33$ container = require_once __DIR__ . "/../bootstrap.php " ;
44
55use App \V1Module \Presenters \GroupExternalAttributesPresenter ;
6+ use App \Model \Repository \Users ;
7+ use App \Model \Repository \GroupMemberships ;
68use App \Exceptions \BadRequestException ;
79use App \Security \TokenScope ;
810use 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