19declare(strict_types=1);
21require_once(__DIR__ .
"/../../../../../../../vendor/composer/vendor/autoload.php");
22require_once(__DIR__ .
"/../../../Base.php");
23require_once(__DIR__ .
"/InputTest.php");
24require_once(__DIR__ .
"/CommonFieldRendering.php");
38 use CommonFieldRendering;
47 #[\PHPUnit\Framework\Attributes\DoesNotPerformAssertions]
50 $f = $this->getFieldFactory();
54 [
"lorem",
"ipsum",
"dolor"],
61 $f = $this->getFieldFactory();
64 $tags = [
"lorem",
"ipsum",
"dolor",];
65 $tag =
$f->tag($label, $tags, $byline)->withNameFrom($this->name_source);
66 $expected = $this->getFormWrappedHtml(
70 <div class="c-field-tag__wrapper">
71 <input id="id_1" name="name_0" class="c-field-tag" value=""/>
78 $this->assertEquals($expected, $this->renderInsideContainer($tag));
83 $f = $this->getFieldFactory();
84 $tag =
$f->tag(
'label', [],
null)->withNameFrom($this->name_source);
86 $this->testWithError($tag);
87 $this->testWithNoByline($tag);
88 $this->testWithRequired($tag);
89 $this->testWithDisabled($tag);
90 $this->testWithAdditionalOnloadCodeRendersId($tag);
93 public function testValueRequired(): void
95 $f = $this->getFieldFactory();
98 $tags = [
"lorem",
"ipsum",
"dolor",];
100 $tag =
$f->tag($label, $tags)->withNameFrom($this->name_source)->withRequired(
true);
102 $raw_value1 =
"lorem,ipsum";
103 $expected_result = [
'lorem',
'ipsum'];
104 $tag1 = $tag->withInput(
new DefInputData([$name => $raw_value1]));
105 $value1 = $tag1->getContent();
106 $this->assertTrue($value1->isOk());
107 $value = $value1->value();
108 $this->assertEquals($expected_result, $value);
111 public function testEmptyStringAsInputLeadToException(): void
113 $f = $this->getFieldFactory();
116 $tags = [
"lorem",
"ipsum",
"dolor",];
118 $tag =
$f->tag($label, $tags)->withNameFrom($this->name_source)->withRequired(
true);
120 $tag2 = $tag->withInput(
new DefInputData([$name =>
'']));
121 $result = $tag2->getContent();
122 $this->assertFalse($result->isOk());
126 }
catch (Exception
$e) {
127 $this->assertInstanceOf(
'ILIAS\Data\NotOKException',
$e);
131 public function testStringAsInputAsRequired(): void
133 $f = $this->getFieldFactory();
136 $tags = [
"lorem",
"ipsum",
"dolor",];
138 $tag =
$f->tag($label, $tags)->withNameFrom($this->name_source)->withRequired(
true);
140 $tag2 = $tag->withInput(
new DefInputData([$name =>
'test']));
141 $result = $tag2->getContent();
142 $this->assertTrue($result->isOk());
143 $this->assertEquals([
'test'], $result->value());
148 $f = $this->getFieldFactory();
151 $tags = [
"lorem",
"ipsum",
"dolor",];
153 $tag =
$f->tag($label, $tags)->withNameFrom($this->name_source)->withRequired(
true);
154 $tag2 = $tag->withInput(
new DefInputData([$name =>
null]));
155 $value2 = $tag2->getContent();
156 $this->assertTrue($value2->isError());
161 $this->markTestSkipped(
"This is supposed to work, but currently does not.");
163 $f = $this->getFieldFactory();
164 $tags = [
"lorem",
"ipsum",
"dolor",];
165 $tag =
$f->tag(
"label", $tags)->withUserCreatedTagsAllowed(
false)->withNameFrom($this->name_source);
167 $tag1 = $tag->withInput(
169 [
"name_0" =>
"lorem,ipsum"]
172 $value1 = $tag1->getContent();
173 $this->assertTrue($value1->isOk());
174 $value = $value1->value();
180 $tag1 = $tag->withInput(
182 [
"name_0" =>
"conseptetuer,ipsum"]
185 $value1 = $tag1->getContent();
186 $this->assertTrue($value1->isError());
191 $f = $this->getFieldFactory();
193 $tag =
$f->tag(
"label", [])->withMaxTags(3)->withNameFrom($this->name_source)->withInput(
196 $value = $tag->getContent();
197 $this->assertTrue($value->isOk());
202 $f = $this->getFieldFactory();
204 $this->expectException(InvalidArgumentException::class);
205 $f->tag(
"label", [])->withMaxTags(2)->withNameFrom($this->name_source)->withInput(
207 [
"name_0" =>
"lorem,ipsum,dolor"]
212 public function testConfigurationDoesNotLimitAmountOfTagsByDefault(): void
214 $f = $this->getFieldFactory();
217 $tag =
$f->tag(
"label", []);
219 $this->assertSame(
I\Input\Field\Tag::INFINITE, $tag->getMaxTags());
220 $this->assertSame(
I\Input\Field\Tag::INFINITE, $tag->getConfiguration()->maxItems);
223 public function testConfigurationReflectsMaxTags(): void
225 $f = $this->getFieldFactory();
228 $tag =
$f->tag(
"label", [])->withMaxTags(42);
230 $this->assertSame(42, $tag->getMaxTags());
231 $this->assertSame(42, $tag->getConfiguration()->maxItems);
236 $f = $this->getFieldFactory();
238 $tag =
$f->tag(
"label", [])->withTagMaxLength(10)->withNameFrom($this->name_source)->withInput(
241 $value = $tag->getContent();
242 $this->assertTrue($value->isOk());
247 $f = $this->getFieldFactory();
249 $this->expectException(InvalidArgumentException::class);
250 $f->tag(
"label", [])->withTagMaxLength(2)->withNameFrom($this->name_source)->withInput(
252 [
"name_0" =>
"lorem,ipsum,dolor"]
261 [
'++1#*',
'[-2]',
'{?3}'],
262 [
'some\'thing "else"',
'&/\\'],
263 [
'fünf, sechs',
'sieben, acht'],
270 $f = $this->getFieldFactory();
272 $tag =
$f->tag(
'', $tags)->withNameFrom($this->name_source);
274 $encoded_tags = array_map(
'rawurlencode', $tags);
279 fn($o) => $o[
'value'],
280 $tag->getConfiguration(fn(
string $txt) => $txt)->options
284 $raw_value = implode(
',', $encoded_tags);
285 $tag_with_input = $tag->withInput(
new DefInputData([$name => $raw_value]));
286 $content = $tag_with_input->getContent();
287 $this->assertTrue($content->isOk());
288 $this->assertEquals($tags, $content->value());
295 $f = $this->getFieldFactory();
296 $tag =
$f->tag(
'my_tag', []);
298 $this->assertEquals(
null, $tag->getAsyncAutocompleteEndpoint());
299 $this->assertEquals(
null, $tag->getAsyncAutocompleteToken());
301 $tag = $tag->withAsyncAutocomplete(
305 $this->assertEquals($url_builder, $tag->getAsyncAutocompleteEndpoint());
306 $this->assertEquals(
$token, $tag->getAsyncAutocompleteToken());
311 $token = $this->createMock(URLBuilderToken::class);
312 $token->expects($this->once())
314 $url_builder = $this->createMock(URLBuilder::class);
315 $url_builder->expects($this->once())
316 ->method(
'renderObject')
319 $f = $this->getFieldFactory();
320 $tag =
$f->tag(
'my_tag', [])->withAsyncAutocomplete(
331 $tag = $this->getFieldFactory()->tag(
'my_tag', [])
333 ->withNameFrom($this->name_source)
334 ->withInput(
new DefInputData([
'name_0' =>
'<member>']));
336 $result = $tag->getContent();
337 $this->assertTrue($result->isOk());
338 $this->assertSame([
'<member>'], $result->value());
The scope of this class is split ilias-conform URI's into components.
Provides common functionality for UI tests.