ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
FieldAsyncNodeTest.php
Go to the documentation of this file.
1<?php
2
18declare(strict_types=1);
19
24use PHPUnit\Framework\MockObject\MockObject;
25
26require_once(__DIR__ . "/../../../../../../../../vendor/composer/vendor/autoload.php");
27require_once(__DIR__ . "/../../../../Base.php");
28
33{
35 protected string $glyph_html;
36 protected Component\Symbol\Icon\Icon & MockObject $icon_stub;
37 protected string $icon_html;
38 protected \ILIAS\Data\URI & MockObject $uri_stub;
39 protected string $uri_string;
40
44
45 protected function setUp(): void
46 {
47 $this->uri_string = sha1(\ILIAS\Data\URI::class);
48 $this->uri_stub = $this->createMock(\ILIAS\Data\URI::class);
49 $this->uri_stub->method('__toString')->willReturn($this->uri_string);
50
53
54 $this->glyph_factory = $this->createMock(Component\Symbol\Glyph\Factory::class);
55 $this->glyph_factory->method($this->anything())->willReturn($this->glyph_stub);
56
57 $this->icon_factory = $this->createMock(Component\Symbol\Icon\Factory::class);
58 $this->icon_factory->method('standard')->willReturn($this->icon_stub);
59
60 $this->symbol_factory = $this->createMock(Component\Symbol\Factory::class);
61 $this->symbol_factory->method('glyph')->willReturn($this->glyph_factory);
62 $this->symbol_factory->method('icon')->willReturn($this->icon_factory);
63
64 parent::setUp();
65 }
66
67 public function getDefaultRenderer(
68 ?JavaScriptBinding $js_binding = null,
69 array $with_stub_renderings = [],
70 array $with_additional_contexts = [],
72 $with_stub_renderings = array_merge($with_stub_renderings, [
73 $this->glyph_stub,
74 $this->icon_stub,
75 ]);
76
77 return parent::getDefaultRenderer($js_binding, $with_stub_renderings, $with_additional_contexts);
78 }
79
80 public function getUIFactory(): \NoUIFactory
81 {
82 return new class ($this->symbol_factory) extends \NoUIFactory {
83 public function __construct(
84 protected Component\Symbol\Factory $symbol_factory,
85 ) {
86 }
87 public function symbol(): Component\Symbol\Factory
88 {
89 return $this->symbol_factory;
90 }
91 };
92 }
93
94 public function testRenderWithUrl(): void
95 {
96 $node_id = 'some-existing-node-id';
97 $node_name = 'some existing node name';
98
99 $component = $this->getNodeFactory()->async($this->uri_stub, $node_id, $node_name);
100 $renderer = $this->getDefaultRenderer();
101
102 $expected = <<<HTML
103<li data-node-id="$node_id" class="c-input-node c-input-node__async c-drilldown__branch" data-render-url="$this->uri_string">
104 <button type="button" class="c-drilldown__menulevel--trigger" aria-expanded="false">
105 <span> $this->icon_html<span data-node-name>$node_name</span></span>
106 <span> $this->glyph_html</span>
107 </button>
108 <button type="button" class="c-input-node__select" aria-label="select_node">
109 <span data-action="select">$this->glyph_html</span>
110 <span class="hidden" data-action="remove">$this->glyph_html</span>
111 </button>
112 <ul></ul>
113</li>
114HTML;
115
116 $actual = $renderer->render($component);
117
118 $this->assertEquals(
119 $this->brutallyTrimHTML($expected),
120 $this->brutallyTrimHTML($actual),
121 );
122 }
123
124 protected function testRenderWithIcon(): void
125 {
126 [$icon_stub, $icon_html] = $this->createSimpleRenderingStub(Component\Symbol\Icon\Custom::class);
127
128 $component = $this->getNodeFactory()->async($this->uri_stub, '', $icon_stub);
129 $renderer = $this->getDefaultRenderer(null, [$icon_stub]);
130
131 $actual = $renderer->render($component);
132
133 $this->assertTrue(str_contains($actual, $icon_html));
134 }
135
136 public function testRenderWithoutIcon(): void
137 {
138 $first_node_name_letter = 's';
139 $node_name = "{$first_node_name_letter}ome existing node name";
140
141 $this->icon_factory->expects($this->once())->method('standard');
142 $this->icon_stub->expects($this->once())->method('withAbbreviation')->with($first_node_name_letter);
143
144 $component = $this->getNodeFactory()->async($this->uri_stub, '', $node_name);
145 $renderer = $this->getDefaultRenderer();
146
147 $actual = $renderer->render($component);
148
149 $this->assertTrue(str_contains($actual, $this->icon_html));
150 }
151
152 protected function getNodeFactory(): Field\Node\Factory
153 {
154 return new Field\Node\Factory();
155 }
156
158 protected function getGlyphStub(): array
159 {
160 return $this->createSimpleRenderingStub(Component\Symbol\Glyph\Glyph::class);
161 }
162
164 protected function getIconStub(): array
165 {
166 return $this->createSimpleRenderingStub(Component\Symbol\Icon\Standard::class);
167 }
168
170 protected function createSimpleRenderingStub(string $class_name): array
171 {
172 $stub = $this->createMock($class_name);
173 $html = sha1($class_name);
174 $stub->method('getCanonicalName')->willReturn($html);
175 $stub->method($this->anything())->willReturnSelf();
176 return [$stub, $html];
177 }
178}
$renderer
Component Symbol Icon Icon &MockObject $icon_stub
createSimpleRenderingStub(string $class_name)
Component Symbol Icon Factory &MockObject $icon_factory
ILIAS Data URI &MockObject $uri_stub
getDefaultRenderer(?JavaScriptBinding $js_binding=null, array $with_stub_renderings=[], array $with_additional_contexts=[],)
Component Symbol Glyph Factory &MockObject $glyph_factory
Component Symbol Glyph Glyph &MockObject $glyph_stub
Component Symbol Factory &MockObject $symbol_factory
Factory for Date Formats.
Definition: Factory.php:27
Provides common functionality for UI tests.
Definition: Base.php:337
This is what a factory for input fields looks like.
Definition: Factory.php:31
This describes a symbol.
Definition: Symbol.php:30
Provides methods to interface with javascript.
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
button(string $caption, string $cmd)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Definition: Checkbox.php:21
Interface Observer \BackgroundTasks Contains several chained tasks and infos about them.