1<?php
2
3class ilCertificateLearningHistoryProviderTest extends ilCertificateBaseTestCase
4{
5    public function testIsActive()
6    {
7        $learningHistoryFactory = $this->getMockBuilder('ilLearningHistoryFactory')
8            ->disableOriginalConstructor()
9            ->getMock();
10
11        $language = $this->getMockBuilder('ilLanguage')
12            ->disableOriginalConstructor()
13            ->getMock();
14
15        $dic = $this->getMockBuilder('\ILIAS\DI\Container')
16            ->disableOriginalConstructor()
17            ->getMock();
18
19        $template = $this->getMockBuilder('ilTemplate')
20            ->disableOriginalConstructor()
21            ->getMock();
22
23        $userCertificateRepository = $this->getMockBuilder('ilUserCertificateRepository')
24            ->disableOriginalConstructor()
25            ->getMock();
26
27        $controller = $this->getMockBuilder('ilCtrl')
28            ->disableOriginalConstructor()
29            ->getMock();
30
31        $certificateSettings = $this->getMockBuilder('ilSetting')
32            ->disableOriginalConstructor()
33            ->getMock();
34
35        $certificateSettings->method('get')
36            ->willReturn(true);
37
38        $uiFactory = $this->getMockBuilder('ILIAS\UI\Factory')
39            ->disableOriginalConstructor()
40            ->getMock();
41
42        $uiRenderer = $this->getMockBuilder('ILIAS\UI\Renderer')
43            ->disableOriginalConstructor()
44            ->getMock();
45
46        $provider = new ilCertificateLearningHistoryProvider(
47            10,
48            $learningHistoryFactory,
49            $language,
50            $template,
51            $dic,
52            $userCertificateRepository,
53            $controller,
54            $certificateSettings,
55            $uiFactory,
56            $uiRenderer
57        );
58
59        $this->assertTrue($provider->isActive());
60    }
61
62    public function testGetEntries()
63    {
64        $learningHistoryFactory = $this->getMockBuilder('ilLearningHistoryFactory')
65            ->disableOriginalConstructor()
66            ->getMock();
67
68        $language = $this->getMockBuilder('ilLanguage')
69            ->disableOriginalConstructor()
70            ->getMock();
71
72        $language->method('txt')
73            ->willReturnOnConsecutiveCalls(
74                'Certificate for %1$s',
75                '%1$s achieved.',
76                'Certificate for %1$s',
77                '%1$s achieved.'
78            );
79
80        $dic = $this->getMockBuilder('\ILIAS\DI\Container')
81            ->disableOriginalConstructor()
82            ->getMock();
83
84        $template = $this->getMockBuilder('ilTemplate')
85            ->disableOriginalConstructor()
86            ->getMock();
87
88        $template->method('get')
89            ->willReturnOnConsecutiveCalls('Course Title', 'Test Title');
90
91        $userCertificateRepository = $this->getMockBuilder('ilUserCertificateRepository')
92            ->disableOriginalConstructor()
93            ->getMock();
94
95        $userCertificateRepository->method('fetchActiveCertificatesInIntervalForPresentation')
96            ->willReturn(
97                array(
98                    new ilUserCertificatePresentation(
99                        200,
100                        'crs',
101                        new ilUserCertificate(
102                            1,
103                            200,
104                            'crs',
105                            300,
106                            'Ilyas Odys',
107                            123456789,
108                            '<xml>Some Content</xml>',
109                            '["SOME_PLACEHOLDER"]',
110                            null,
111                            1,
112                            'v5.4.0',
113                            true,
114                            '/some/where/background_1.jpg',
115                            '/some/where/else/thumbnail_1.jpg',
116                            40
117                        ),
118                        'Course Title',
119                        'Course Description'
120                    ),
121                    new ilUserCertificatePresentation(
122                        500,
123                        'tst',
124                        new ilUserCertificate(
125                            5,
126                            500,
127                            'tst',
128                            5000,
129                            'Ilyas Odys',
130                            987654321,
131                            '<xml>Some Content</xml>',
132                            '["SOME_PLACEHOLDER"]',
133                            null,
134                            1,
135                            'v5.4.0',
136                            true,
137                            '/some/where/background_1.jpg',
138                            '/some/where/else/thumbnail_1.jpg',
139                            50
140                        ),
141                        'Test Title',
142                        'Test Description'
143                    )
144                )
145            );
146
147        $controller = $this->getMockBuilder('ilCtrl')
148            ->disableOriginalConstructor()
149            ->getMock();
150
151        $controller
152            ->expects($this->exactly(2))
153            ->method('getLinkTargetByClass')
154            ->willReturn('<a href> </a>');
155
156        $controller
157            ->expects($this->exactly(2))
158            ->method('clearParametersByClass');
159
160        $controller
161            ->expects($this->exactly(2))
162            ->method('setParameterByClass');
163
164        $certificateSettings = $this->getMockBuilder('ilSetting')
165            ->disableOriginalConstructor()
166            ->getMock();
167
168        $certificateSettings->method('get')
169            ->willReturn(true);
170
171        $uiFactory = $this->getMockBuilder('ILIAS\UI\Factory')
172            ->disableOriginalConstructor()
173            ->getMock();
174
175        $link = $this->getMockBuilder('\ILIAS\UI\Component\Link\Factory')
176            ->disableOriginalConstructor()
177            ->getMock();
178
179        $std_link = $this->getMockBuilder('\ILIAS\UI\Component\Link\Standard')
180            ->disableOriginalConstructor()
181            ->getMock();
182
183        $link->method('standard')
184            ->withConsecutive(
185                array('Course Title', '<a href> </a>'),
186                array('Test Title', '<a href> </a>')
187            )
188            ->willReturn($std_link);
189
190        $uiFactory->method('link')
191            ->willReturn($link);
192
193        $uiRenderer = $this->getMockBuilder('ILIAS\UI\Renderer')
194            ->disableOriginalConstructor()
195            ->getMock();
196
197        $uiRenderer->method('render')
198            ->with($std_link)
199            ->willReturn('link');
200
201        $utilHelper = $this->getMockBuilder('ilCertificateUtilHelper')
202            ->disableOriginalConstructor()
203            ->getMock();
204
205        $utilHelper->method('getImagePath')
206            ->willReturn('/some/acutal/image/path/background.png');
207
208        $provider = new ilCertificateLearningHistoryProvider(
209            10,
210            $learningHistoryFactory,
211            $language,
212            $template,
213            $dic,
214            $userCertificateRepository,
215            $controller,
216            $certificateSettings,
217            $uiFactory,
218            $uiRenderer,
219            $utilHelper
220        );
221
222        $expectedEntries = array(
223            new ilLearningHistoryEntry(
224                'Certificate for link achieved.',
225                'Certificate for link achieved.',
226                '/some/acutal/image/path/background.png',
227                123456789,
228                200
229            ),
230            new ilLearningHistoryEntry(
231                'Certificate for link achieved.',
232                'Certificate for link achieved.',
233                '/some/acutal/image/path/background.png',
234                987654321,
235                500
236            ),);
237
238        $actualEntries = $provider->getEntries(123456789, 987654321);
239        $this->assertEquals($expectedEntries, $actualEntries);
240    }
241
242    public function testGetName()
243    {
244        $learningHistoryFactory = $this->getMockBuilder('ilLearningHistoryFactory')
245            ->disableOriginalConstructor()
246            ->getMock();
247
248        $language = $this->getMockBuilder('ilLanguage')
249            ->disableOriginalConstructor()
250            ->getMock();
251
252        $language
253            ->expects($this->once())
254            ->method('txt')
255            ->willReturn('Certificates');
256
257        $dic = $this->getMockBuilder('\ILIAS\DI\Container')
258            ->disableOriginalConstructor()
259            ->getMock();
260
261        $template = $this->getMockBuilder('ilTemplate')
262            ->disableOriginalConstructor()
263            ->getMock();
264
265        $userCertificateRepository = $this->getMockBuilder('ilUserCertificateRepository')
266            ->disableOriginalConstructor()
267            ->getMock();
268
269        $controller = $this->getMockBuilder('ilCtrl')
270            ->disableOriginalConstructor()
271            ->getMock();
272
273        $certificateSettings = $this->getMockBuilder('ilSetting')
274            ->disableOriginalConstructor()
275            ->getMock();
276
277        $certificateSettings->method('get')
278            ->willReturn(true);
279
280        $uiFactory = $this->getMockBuilder('ILIAS\UI\Factory')
281            ->disableOriginalConstructor()
282            ->getMock();
283
284        $uiRenderer = $this->getMockBuilder('ILIAS\UI\Renderer')
285            ->disableOriginalConstructor()
286            ->getMock();
287
288        $provider = new ilCertificateLearningHistoryProvider(
289            10,
290            $learningHistoryFactory,
291            $language,
292            $template,
293            $dic,
294            $userCertificateRepository,
295            $controller,
296            $certificateSettings,
297            $uiFactory,
298            $uiRenderer
299        );
300
301        $this->assertEquals('Certificates', $provider->getName());
302    }
303}
304