ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
CollectionTest.php
Go to the documentation of this file.
1<?php
2
20
30use PHPUnit\Framework\MockObject\MockObject;
32
38{
46 public MockObject $preloader;
51 public const DUMMY_RCID = 'dummy-rcid';
52
54
55 #[\Override]
56 protected function setUp(): void
57 {
58 parent::setUp();
59 $this->rcid_generator = new DummyIDGenerator(self::DUMMY_RCID);
60
61 $this->collection_builder = new CollectionBuilder(
62 $this->collection_repository,
63 new Subject(),
64 $this->rcid_generator
65 );
66
67 $this->preloader = $this->getMockBuilder(RepositoryPreloader::class)
68 ->disableOriginalConstructor()
69 ->getMock();
70
71 $this->resource_builder = new ResourceBuilder(
72 $this->storage_handler_factory,
73 $this->repositories,
74 $this->locking,
75 $this->stream_access
76 );
77
78 $this->collections = new Collections(
79 $this->resource_builder,
80 $this->collection_builder,
81 $this->preloader,
82 new Subject()
83 );
84 }
85
86 public function testCreateCollection(): void
87 {
88 $identifiation = $this->rcid_generator->getUniqueResourceCollectionIdentification();
89 $this->collection_repository->method('blank')->with($identifiation)->willReturn(
90 new ResourceCollection($identifiation, -1, '')
91 );
92
93 $id = $this->collections->id();
94
95 $this->assertInstanceOf(ResourceCollectionIdentification::class, $id);
96 $this->assertNotInstanceOf(MockObject::class, $id);
97 $this->assertSame(self::DUMMY_RCID, $id->serialize());
98 }
99
100 public function testGetCollectionOfUser(): void
101 {
102 $identifiation = $this->rcid_generator->getUniqueResourceCollectionIdentification();
103 $this->collection_repository->method('blank')->with($identifiation)->willReturn(
104 new ResourceCollection($identifiation, 42, '')
105 );
106
107 $id = $this->collections->id($identifiation->serialize());
108
109 $this->collection_repository->method('getResourceIdStrings')->with($identifiation)->willReturn(
110 $this->arrayAsGenerator([])
111 );
112
113 $collection = $this->collections->get($id, 42);
114
115 $this->assertInstanceOf(ResourceCollection::class, $collection);
116 $this->assertNotInstanceOf(MockObject::class, $collection);
117 $this->assertSame(self::DUMMY_RCID, $collection->getIdentification()->serialize());
118 $this->assertSame([], $collection->getResourceIdentifications());
119 }
120
121 public function testIsIn(): void
122 {
123 $collection = new ResourceCollection(new ResourceCollectionIdentification(self::DUMMY_RCID), 42, '');
124
125 $this->assertSame(self::DUMMY_RCID, $collection->getIdentification()->serialize());
126 $this->assertSame(42, $collection->getOwner());
127 $this->assertTrue($collection->hasSpecificOwner());
128 $this->assertSame('default', $collection->getTitle());
129
130 $rid_one = new ResourceIdentification('rid_one');
131 $rid_two = new ResourceIdentification('rid_two');
132 $rid_three = new ResourceIdentification('rid_three');
133
134 $this->assertSame(0, $collection->count());
135
136 $collection->add($rid_one);
137 $this->assertTrue($collection->isIn($rid_one));
138 $this->assertFalse($collection->isIn($rid_two));
139 $this->assertFalse($collection->isIn($rid_three));
140 $this->assertSame(1, $collection->count());
141
142 $collection->add($rid_two);
143 $this->assertTrue($collection->isIn($rid_one));
144 $this->assertTrue($collection->isIn($rid_two));
145 $this->assertFalse($collection->isIn($rid_three));
146 $this->assertSame(2, $collection->count());
147
148 $collection->add($rid_three);
149 $this->assertTrue($collection->isIn($rid_one));
150 $this->assertTrue($collection->isIn($rid_two));
151 $this->assertTrue($collection->isIn($rid_three));
152 $this->assertSame(3, $collection->count());
153
154 $collection->clear();
155 $this->assertFalse($collection->isIn($rid_one));
156 $this->assertFalse($collection->isIn($rid_two));
157 $this->assertFalse($collection->isIn($rid_three));
158 $this->assertSame(0, $collection->count());
159 }
160
161 public function testAddAndRemove(): void
162 {
163 $collection = new ResourceCollection(
164 new ResourceCollectionIdentification(self::DUMMY_RCID),
166 ''
167 );
168
169 $this->assertSame(self::DUMMY_RCID, $collection->getIdentification()->serialize());
170 $this->assertSame(ResourceCollection::NO_SPECIFIC_OWNER, $collection->getOwner());
171 $this->assertFalse($collection->hasSpecificOwner());
172 $this->assertSame('default', $collection->getTitle());
173
174 $rid_one = new ResourceIdentification('rid_one');
175 $rid_two = new ResourceIdentification('rid_two');
176
177 $this->assertSame(0, $collection->count());
178
179 $collection->add($rid_one);
180 $this->assertTrue($collection->isIn($rid_one));
181 $this->assertSame(1, $collection->count());
182
183 $collection->add($rid_two);
184 $this->assertTrue($collection->isIn($rid_one));
185 $this->assertTrue($collection->isIn($rid_two));
186 $this->assertSame(2, $collection->count());
187
188 $collection->remove($rid_one);
189 $this->assertFalse($collection->isIn($rid_one));
190 $this->assertTrue($collection->isIn($rid_two));
191 $this->assertSame(1, $collection->count());
192
193 $collection->remove($rid_two);
194 $this->assertFalse($collection->isIn($rid_one));
195 $this->assertFalse($collection->isIn($rid_two));
196 $this->assertSame(0, $collection->count());
197
198 $collection->clear();
199 $this->assertFalse($collection->isIn($rid_one));
200 $this->assertFalse($collection->isIn($rid_two));
201 $this->assertSame(0, $collection->count());
202 }
203
204 public function testDuplicates(): void
205 {
206 $rid = new ResourceIdentification('rid');
207 $same_rid = new ResourceIdentification('rid');
208
209 $collection = new ResourceCollection(
210 new ResourceCollectionIdentification(self::DUMMY_RCID),
212 ''
213 );
214 $collection->add($rid);
215 $collection->add($same_rid);
216
217 $this->assertCount(1, $collection->getResourceIdentifications());
218 }
219
220
221 public function testRidCache(): void
222 {
223 $resource_collection_identification = new ResourceCollectionIdentification(self::DUMMY_RCID);
224 $rid_one = new ResourceIdentification('rid_one');
225 $rid_two = new ResourceIdentification('rid_two');
226 $rid_three = new ResourceIdentification('rid_three');
227
228 $collections_service = new Collections(
229 $this->resource_builder,
230 $this->collection_builder,
231 $this->preloader,
232 new Subject()
233 );
234
235 $this->collection_repository
236 ->expects($this->once())
237 ->method('existing')
238 ->with($resource_collection_identification)
239 ->willReturn(
240 new ResourceCollection($resource_collection_identification, -1, 'title')
241 );
242
243 $collection = $collections_service->get(
244 $resource_collection_identification
245 );
246 $this->assertCount(0, $collection->getResourceIdentifications());
247
248 $collection->add($rid_one);
249 $collection->add($rid_two);
250 $collection->add($rid_three);
251
252 $this->assertCount(3, $collection->getResourceIdentifications());
253
254 $collections_service->store($collection);
255 $consecutive = [
256 $rid_one,
257 $rid_two,
258 $rid_three
259 ];
260 $this->resource_repository
261 ->expects($this->exactly(3))
262 ->method('has')
263 ->willReturnCallback(
264 function ($rid) use (&$consecutive): true {
265 $expected = array_shift($consecutive);
266 $this->assertEquals($expected, $rid);
267 return true;
268 }
269 );
270
271 $collection = $collections_service->get(
272 $resource_collection_identification
273 );
274
275 $this->assertCount(3, $collection->getResourceIdentifications());
276 }
277
278
279 protected function arrayAsGenerator(array $array): \Generator
280 {
281 foreach ($array as $item) {
282 yield $item;
283 }
284 }
285}
$id
plugin.php for ilComponentBuildPluginInfoObjectiveTest::testAddPlugins
Definition: plugin.php:23
CollectionIdentificationGenerator $rcid_generator
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...