ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
FieldAsyncNodeTest.php
Go to the documentation of this file.
1 <?php
2 
18 declare(strict_types=1);
19 
25 
26 require_once(__DIR__ . "/../../../../../../../../vendor/composer/vendor/autoload.php");
27 require_once(__DIR__ . "/../../../../Base.php");
28 
33 {
34  protected Component\Symbol\Glyph\Glyph & MockObject $glyph_stub;
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 
41  protected Component\Symbol\Glyph\Factory & MockObject $glyph_factory;
42  protected Component\Symbol\Icon\Factory & MockObject $icon_factory;
43  protected Component\Symbol\Factory & MockObject $symbol_factory;
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>
114 HTML;
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 }
button(string $caption, string $cmd)
ILIAS Data URI &MockObject $uri_stub
$renderer
getDefaultRenderer(?JavaScriptBinding $js_binding=null, array $with_stub_renderings=[], array $with_additional_contexts=[],)
Interface Observer Contains several chained tasks and infos about them.
Component Symbol Icon Factory &MockObject $icon_factory
Component Symbol Glyph Glyph &MockObject $glyph_stub
Factory for Date Formats.
Definition: Factory.php:26
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
Component Symbol Glyph Factory &MockObject $glyph_factory
createSimpleRenderingStub(string $class_name)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Definition: Checkbox.php:21
Component Symbol Factory &MockObject $symbol_factory
Provides common functionality for UI tests.
Definition: Base.php:333
Component Symbol Icon Icon &MockObject $icon_stub
Provides methods to interface with javascript.
__construct(Container $dic, ilPlugin $plugin)