ILIAS  release_10 Revision v10.1-43-ga1241a92c2f
PanelSecondaryLegacyTest.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
21 require_once(__DIR__ . "/../../../../../../vendor/composer/vendor/autoload.php");
22 require_once(__DIR__ . "/../../Base.php");
23 
24 use ILIAS\UI\Component as C;
27 
32 {
33  public function getUIFactory(): NoUIFactory
34  {
35  return new class () extends NoUIFactory {
36  public function legacyPanel(string $title, C\Legacy\Legacy $content): I\Component\Panel\Secondary\Legacy
37  {
38  return new I\Component\Panel\Secondary\Legacy($title, $content);
39  }
40 
41  public function legacy(string $content): C\Legacy\Legacy
42  {
43  $f = new I\Component\Legacy\Factory(new I\Component\SignalGenerator());
44  return $f->legacy($content);
45  }
46 
47  public function dropdown(): C\Dropdown\Factory
48  {
49  return new I\Component\Dropdown\Factory();
50  }
51 
52  public function viewControl(): C\ViewControl\Factory
53  {
54  return new I\Component\ViewControl\Factory(new SignalGenerator());
55  }
56 
57  public function button(): C\Button\Factory
58  {
59  return new I\Component\Button\Factory();
60  }
61 
62  public function symbol(): C\Symbol\Factory
63  {
64  return new I\Component\Symbol\Factory(
65  new I\Component\Symbol\Icon\Factory(),
66  new I\Component\Symbol\Glyph\Factory(),
67  new I\Component\Symbol\Avatar\Factory()
68  );
69  }
70  };
71  }
72 
73  protected function cleanHTML(string $html): string
74  {
75  $html = str_replace(["\n", "\t"], "", $html);
76 
77  return trim($html);
78  }
79 
80  public function testImplementsFactoryInterface(): void
81  {
82  $legacy = $this->getUIFactory()->legacy("Legacy content");
83  $secondary_panel = $this->getUIFactory()->legacyPanel("List Title", $legacy);
84 
85  $this->assertInstanceOf("ILIAS\\UI\\Component\\Panel\\Secondary\\Legacy", $secondary_panel);
86  }
87 
88  public function testGetTitle(): void
89  {
90  $legacy = $this->getUIFactory()->legacy("Legacy content");
91  $secondary_panel = $this->getUIFactory()->legacyPanel("Title", $legacy);
92 
93  $this->assertEquals("Title", $secondary_panel->getTitle());
94  }
95 
96  public function testGetLegacyComponent(): void
97  {
98  $legacy = $this->getUIFactory()->legacy("Legacy content");
99  $secondary_panel = $this->getUIFactory()->legacyPanel("title", $legacy);
100 
101  $this->assertEquals($secondary_panel->getLegacyComponent(), $legacy);
102  }
103 
104  public function testWithActions(): void
105  {
106  $legacy = $this->getUIFactory()->legacy("Legacy content");
107  $actions = $this->getUIFactory()->dropdown()->standard(array(
108  $this->getUIFactory()->button()->shy("ILIAS", "https://www.ilias.de"),
109  $this->getUIFactory()->button()->shy("Github", "https://www.github.com")
110  ));
111 
112  $secondary_panel = $this->getUIFactory()->legacyPanel("title", $legacy)
113  ->withActions($actions);
114 
115  $this->assertEquals($secondary_panel->getActions(), $actions);
116  }
117 
118  public function testWithoutViewControls(): void
119  {
120  $legacy = $this->getUIFactory()->legacy("Legacy content");
121  $secondary_panel = $this->getUIFactory()->legacyPanel("title", $legacy);
122  $array_vc = $secondary_panel->getViewControls();
123 
124  $this->assertEquals(null, $array_vc);
125  }
126 
127  public function testWithSortationViewControl(): void
128  {
129  $legacy = $this->getUIFactory()->legacy("Legacy content");
130  $sort_options = array(
131  'internal_rating' => 'Best',
132  'date_desc' => 'Most Recent',
133  'date_asc' => 'Oldest',
134  );
135  $sortation = $this->getUIFactory()->viewControl()->sortation($sort_options, 'internal_rating');
136 
137  $secondary_panel = $this->getUIFactory()->legacyPanel("title", $legacy)
138  ->withViewControls([$sortation]);
139 
140  $array_vc = $secondary_panel->getViewControls();
141 
142  $this->assertEquals($array_vc[0], $sortation);
143  }
144 
145  public function testWithPaginationViewControl(): void
146  {
147  $legacy = $this->getUIFactory()->legacy("Legacy content");
148  $pagination = $this->getUIFactory()->viewControl()->pagination()
149  ->withTargetURL("http://ilias.de", 'page')
150  ->withTotalEntries(98)
151  ->withPageSize(10)
152  ->withCurrentPage(1);
153 
154  $secondary_panel = $this->getUIFactory()->legacyPanel("title", $legacy)
155  ->withViewControls([$pagination]);
156 
157  $array_vc = $secondary_panel->getViewControls();
158 
159  $this->assertEquals($array_vc[0], $pagination);
160  }
161 
162  public function testWithSectionViewControl(): void
163  {
164  $legacy = $this->getUIFactory()->legacy("Legacy content");
165  $back = $this->getUIFactory()->button()->standard("previous", "http://www.ilias.de");
166  $next = $this->getUIFactory()->button()->standard("next", "http://www.github.com");
167  $current = $this->getUIFactory()->button()->standard("current", "");
168  $section = $this->getUIFactory()->viewControl()->section($back, $current, $next);
169 
170  $secondary_panel = $this->getUIFactory()->legacyPanel("title", $legacy)
171  ->withViewControls([$section]);
172 
173  $array_vc = $secondary_panel->getViewControls();
174 
175  $this->assertEquals($array_vc[0], $section);
176  }
177 
178  //RENDER
179 
180  public function testRenderPanelSecondaryWithActions(): void
181  {
182  $legacy = $this->getUIFactory()->legacy("Legacy content");
183  $actions = $this->getUIFactory()->dropdown()->standard(array(
184  $this->getUIFactory()->button()->shy("ILIAS", "https://www.ilias.de"),
185  $this->getUIFactory()->button()->shy("Github", "https://www.github.com")
186  ));
187 
188  $sec = $this->getUIFactory()->legacyPanel("Title", $legacy)->withActions($actions);
189 
190  $html = $this->getDefaultRenderer()->render($sec);
191 
192  $expected_html = <<<EOT
193 <div class="panel panel-secondary panel-flex">
194  <div class="panel-heading ilHeader">
195  <div class="panel-title"><h2>Title</h2></div>
196  <div class="panel-controls">
197  <div class="dropdown" id="id_3"><button class="btn btn-default dropdown-toggle" type="button" aria-label="actions" aria-haspopup="true" aria-expanded="false" aria-controls="id_3_menu" ><span class="caret"></span></button>
198  <ul id="id_3_menu" class="dropdown-menu">
199  <li><button class="btn btn-link" data-action="https://www.ilias.de" id="id_1">ILIAS</button></li>
200  <li><button class="btn btn-link" data-action="https://www.github.com" id="id_2">Github</button></li>
201  </ul>
202  </div>
203  </div>
204  </div>
205 
206  <div class="panel-body">
207  Legacy content
208  </div>
209 </div>
210 EOT;
211  $this->assertHTMLEquals(
212  $this->brutallyTrimHTML($expected_html),
213  $this->brutallyTrimHTML($html)
214  );
215  }
216 
218  {
219  $legacy = $this->getUIFactory()->legacy("Legacy content");
220  $sort_options = array(
221  'a' => 'A',
222  'b' => 'B'
223  );
224  $sortation = $this->getUIFactory()->viewControl()->sortation($sort_options, 'b');
225  $sec = $this->getUIFactory()->legacyPanel("Title", $legacy)
226  ->withViewControls([$sortation]);
227 
228  $html = $this->getDefaultRenderer()->render($sec);
229 
230  $expected_html = <<<EOT
231 <div class="panel panel-secondary panel-flex">
232  <div class="panel-heading ilHeader">
233  <div class="panel-title"><h2>Title</h2></div>
234  <div class="panel-viewcontrols l-bar__space-keeper">
235  <div class="dropdown il-viewcontrol il-viewcontrol-sortation l-bar__element" id="id_1">
236  <button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown" aria-label="sortation" aria-haspopup="true" aria-expanded="false" aria-controls="id_1_ctrl">
237  <span class="label">vc_sort B</span>
238  <span class="caret"></span>
239  </button>
240  <ul id="id_1_ctrl" class="dropdown-menu">
241  <li><button class="btn btn-link" data-action="?sortation=a" id="id_2">A</button></li>
242  <li class="selected"><button class="btn btn-link" data-action="?sortation=b" id="id_3">B</button></li>
243  </ul>
244  </div>
245  </div>
246  <div class="panel-controls"></div>
247  </div>
248  <div class="panel-body">Legacy content</div>
249 </div>
250 EOT;
251  $this->assertEquals($this->brutallyTrimHTML($expected_html), $this->brutallyTrimHTML($html));
252  }
253 
255  {
256  $legacy = $this->getUIFactory()->legacy("Legacy content");
257 
258  $pagination = $this->getUIFactory()->viewControl()->pagination()
259  ->withTargetURL('http://ilias.de', 'page')
260  ->withTotalEntries(10)
261  ->withPageSize(2)
262  ->withCurrentPage(1);
263 
264  $sec = $this->getUIFactory()->legacyPanel("Title", $legacy)
265  ->withViewControls([$pagination]);
266 
267  $html = $this->getDefaultRenderer()->render($sec);
268 
269  $expected_html = <<<EOT
270 <div class="panel panel-secondary panel-flex">
271  <div class="panel-heading ilHeader">
272  <div class="panel-title"><h2>Title</h2></div>
273  <div class="panel-viewcontrols l-bar__space-keeper">
274  <div class="il-viewcontrol-pagination l-bar__element">
275  <button class="btn btn-default" data-action="http://ilias.de?page=0" id="id_6">
276  <span class="glyph" aria-label="back" role="img"><span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span></span>
277  </button>
278  <button class="btn btn-link" data-action="http://ilias.de?page=0" id="id_1">1</button>
279  <button class="btn btn-link engaged" aria-pressed="true" data-action="http://ilias.de?page=1" id="id_2">2</button>
280  <button class="btn btn-link" data-action="http://ilias.de?page=2" id="id_3">3</button>
281  <button class="btn btn-link" data-action="http://ilias.de?page=3" id="id_4">4</button>
282  <button class="btn btn-link" data-action="http://ilias.de?page=4" id="id_5">5</button>
283  <button class="btn btn-default" data-action="http://ilias.de?page=2" id="id_7">
284  <span class="glyph" aria-label="next" role="img"><span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span></span>
285  </button>
286  </div>
287  </div>
288  <div class="panel-controls"></div>
289  </div>
290  <div class="panel-body">Legacy content</div>
291 </div>
292 EOT;
293  $this->assertEquals($this->brutallyTrimHTML($expected_html), $this->brutallyTrimHTML($html));
294  }
295 
296  public function testRenderPanelSecondaryWithSection(): void
297  {
298  $legacy = $this->getUIFactory()->legacy("Legacy content");
299  $back = $this->getUIFactory()->button()->standard("previous", "http://www.ilias.de");
300  $next = $this->getUIFactory()->button()->standard("next", "http://www.github.com");
301  $current = $this->getUIFactory()->button()->standard("current", "");
302  $section = $this->getUIFactory()->viewControl()->section($back, $current, $next);
303 
304  $secondary_panel = $this->getUIFactory()->legacyPanel("Title", $legacy)
305  ->withViewControls([$section]);
306 
307  $html = $this->getDefaultRenderer()->render($secondary_panel);
308 
309  $expected_html = <<<EOT
310 <div class="panel panel-secondary panel-flex">
311  <div class="panel-heading ilHeader">
312  <div class="panel-title"><h2>Title</h2></div>
313  <div class="panel-viewcontrols l-bar__space-keeper">
314  <div class="il-viewcontrol-section l-bar__element">
315  <a class="btn btn-ctrl browse previous" href="http://www.ilias.de" aria-label="previous" data-action="http://www.ilias.de" id="id_1"><span class="glyphicon glyphicon-chevron-left"></span></a>
316  <button class="btn btn-default" data-action="">current</button>
317  <a class="btn btn-ctrl browse next" href="http://www.github.com" aria-label="next" data-action="http://www.github.com" id="id_2"><span class="glyphicon glyphicon-chevron-right"></span></a>
318  </div>
319  </div>
320  <div class="panel-controls"></div>
321  </div>
322  <div class="panel-body">Legacy content</div>
323 </div>
324 EOT;
325  $this->assertEquals($this->brutallyTrimHTML($expected_html), $this->brutallyTrimHTML($html));
326  }
327 
328  public function testRenderPanelSecondaryWithFooter(): void
329  {
330  $legacy = $this->getUIFactory()->legacy("Legacy content");
331  $footer_shy_button = $this->getUIFactory()->button()->shy("Action", "");
332 
333  $secondary_panel = $this->getUIFactory()->legacyPanel("Title", $legacy)
334  ->withFooter($footer_shy_button);
335 
336  $html = $this->getDefaultRenderer()->render($secondary_panel);
337 
338  $expected_html = <<<EOT
339 <div class="panel panel-secondary panel-flex">
340  <div class="panel-heading ilHeader">
341  <div class="panel-title"><h2>Title</h2></div>
342  <div class="panel-controls"></div>
343  </div>
344  <div class="panel-body">
345  Legacy content
346  </div>
347  <div class="panel-footer ilBlockInfo">
348  <button class="btn btn-link" data-action="">Action</button>
349  </div>
350 </div>
351 EOT;
352  $this->assertEquals($this->brutallyTrimHTML($expected_html), $this->brutallyTrimHTML($html));
353  }
354 
355  public function testRenderPanelSecondaryWithNoHeader(): void
356  {
357  $legacy = $this->getUIFactory()->legacy("Legacy content");
358 
359  $secondary_panel = $this->getUIFactory()->legacyPanel("", $legacy);
360 
361  $html = $this->getDefaultRenderer()->render($secondary_panel);
362 
363  $expected_html = <<<EOT
364 <div class="panel panel-secondary panel-flex">
365  <div class="panel-body">Legacy content</div>
366 </div>
367 EOT;
368  $this->assertEquals($this->brutallyTrimHTML($expected_html), $this->brutallyTrimHTML($html));
369  }
370 }
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Definition: Avatar.php:21
button(string $caption, string $cmd)
Interface Observer Contains several chained tasks and infos about them.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Title class.
Definition: Title.php:26
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Definition: Bulky.php:21
legacy()
expected output: > ILIAS shows the rendered Component.
Definition: legacy.php:13
Test secondary legacy panels.