ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
TileTest.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
21 namespace ILIAS\Badge\test;
22 
23 use Exception;
34 use ILIAS\UI\Component\Card\Standard as StandardCard;
42 use ILIAS\UI\Factory as UI;
44 use ilBadge;
46 use ilCtrl;
47 use ilLanguage;
48 
49 class TileTest extends TestCase
50 {
51  public function testConstruct(): void
52  {
53  $container = $this->getMockBuilder(Container::class)->disableOriginalConstructor()->getMock();
54  $parent = $this->getMockBuilder(BadgeParent::class)->disableOriginalConstructor()->getMock();
55  $modal = $this->getMockBuilder(Modal::class)->disableOriginalConstructor()->getMock();
56  $sign_file = static fn(string $x): string => '';
57  $format_date = static fn(int $x): string => '';
58 
59  $this->assertInstanceOf(Tile::class, new Tile($container, $parent, $modal, $sign_file, $format_date));
60  }
61 
62  public function testInDeck(): void
63  {
64  $modal_response = ['foo'];
65  $gui_class_name = 'Im a class.';
66  $signed_file = '/some-signed-file';
67  $remove_text = 'Translated: badge_remove_from_profile';
68  $url = 'Dummy URL';
69  $badge_id = 583;
70  $badge_title = 'Badge title';
71  $badge_image_path = '/file-path';
72  $badge_image_name = 'Dummy image';
73 
74  $badge = $this->getMockBuilder(ilBadge::class)->disableOriginalConstructor()->getMock();
75  $assignment = $this->getMockBuilder(ilBadgeAssignment::class)->disableOriginalConstructor()->getMock();
76  $parent_component = $this->getMockBuilder(Component::class)->getMock();
77  $standard_button = $this->getMockBuilder(StandardButton::class)->disableOriginalConstructor()->getMock();
78  $modified_card = $this->getMockBuilder(StandardCard::class)->disableOriginalConstructor()->getMock();
79  $standard_card = $this->getMockBuilder(StandardCard::class)->disableOriginalConstructor()->getMock();
80  $card = $this->getMockBuilder(Card::class)->disableOriginalConstructor()->getMock();
81  $card_page = $this->getMockBuilder(LightboxCardPage::class)->disableOriginalConstructor()->getMock();
82  $lightbox = $this->getMockBuilder(Lightbox::class)->disableOriginalConstructor()->getMock();
83  $ui_modal = $this->getMockBuilder(UIModal::class)->disableOriginalConstructor()->getMock();
84  $button = $this->getMockBuilder(Button::class)->disableOriginalConstructor()->getMock();
85  $image_component = $this->getMockBuilder(ImageComponent::class)->disableOriginalConstructor()->getMock();
86  $image = $this->getMockBuilder(Image::class)->disableOriginalConstructor()->getMock();
87  $factory = $this->getMockBuilder(UI::class)->disableOriginalConstructor()->getMock();
88  $ui = $this->getMockBuilder(UIServices::class)->disableOriginalConstructor()->getMock();
89  $ctrl = $this->getMockBuilder(ilCtrl::class)->disableOriginalConstructor()->getMock();
90  $language = $this->getMockBuilder(ilLanguage::class)->disableOriginalConstructor()->getMock();
91  $container = $this->getMockBuilder(Container::class)->disableOriginalConstructor()->getMock();
92  $parent = $this->getMockBuilder(BadgeParent::class)->disableOriginalConstructor()->getMock();
93  $modal = $this->getMockBuilder(Modal::class)->disableOriginalConstructor()->getMock();
94  $format_date = fn(int $x): string => 'Dummy';
95  $sign_file = function (string $path) use ($signed_file, $badge_image_path): string {
96  $this->assertSame($badge_image_path, $path);
97  return $signed_file;
98  };
99 
100  $badge->method('getParentMeta')->willReturn(['type' => 'crs']);
101  $badge->method('getId')->willReturn($badge_id);
102  $badge->method('getTitle')->willReturn($badge_title);
103  $badge->method('getImagePath')->willReturn($badge_image_path);
104  $badge->method('getImage')->willReturn($badge_image_name);
105 
106  $assignment->method('getPosition')->willReturn(8);
107 
108  $modified_card->expects(self::once())->method('withSections')->with([$parent_component, $standard_button])->willReturn($modified_card);
109  $modified_card->expects(self::once())->method('withImage')->willReturn($modified_card);
110  $modified_card->expects(self::once())->method('withTitleAction')->willReturn($modified_card);
111 
112  $standard_card->expects(self::once())->method('withHiddenSections')->with($modal_response)->willReturn($modified_card);
113 
114  $card->expects(self::once())->method('standard')->willReturn($standard_card);
115 
116  $ui_modal->expects(self::once())->method('lightbox')->with($card_page)->willReturn($lightbox);
117  $ui_modal->expects(self::once())->method('lightBoxCardPage')->with($standard_card)->willReturn($card_page);
118 
119  $button->expects(self::once())->method('standard')->with($remove_text, $url)->willReturn($standard_button);
120 
121  $image_component->expects(self::once())->method('withAction')->willReturn($image_component);
122 
123  $image->expects(self::once())->method('responsive')->with($signed_file, $badge_image_name)->willReturn($image_component);
124 
125  $factory->method('card')->willReturn($card);
126  $factory->method('modal')->willReturn($ui_modal);
127  $factory->method('button')->willReturn($button);
128  $factory->method('image')->willReturn($image);
129 
130  $ui->method('factory')->willReturn($factory);
131 
132  $ctrl->expects(self::once())->method('getLinkTargetByClass')->with($gui_class_name, 'deactivateInCard')->willReturn($url);
133  $ctrl->expects(self::exactly(2))->method('setParameterByClass')->withConsecutive(
134  [$gui_class_name, 'badge_id', (string) $badge_id],
135  [$gui_class_name, 'badge_id', '']
136  );
137 
138  $language->method('txt')->willReturnCallback(
139  static fn(string $lang_key) => 'Translated: ' . $lang_key
140  );
141 
142  $container->method('ui')->willReturn($ui);
143  $container->method('ctrl')->willReturn($ctrl);
144  $container->method('language')->willReturn($language);
145 
146  $parent->expects(self::once())->method('asComponent')->with($badge)->willReturn($parent_component);
147 
148  $modal->expects(self::once())->method('components')->willReturn($modal_response);
149 
150  $tile = new Tile($container, $parent, $modal, $sign_file, $format_date);
151 
152  $card_and_modal = $tile->inDeck($badge, $assignment, $gui_class_name);
153 
154  $this->assertSame($modified_card, $card_and_modal['card']);
155  $this->assertSame($lightbox, $card_and_modal['modal']);
156  }
157 
161  public function testAs(string $method, array $expected_components): void
162  {
163  $signed_file = '/some-signed-file';
164  $badge_image_path = '/file-path';
165  $badge_image_name = 'Dummy image';
166 
167  $badge = $this->getMockBuilder(ilBadge::class)->disableOriginalConstructor()->getMock();
168  $modal_content = $this->getMockBuilder(ModalContent::class)->disableOriginalConstructor()->getMock();
169  $container = $this->getMockBuilder(Container::class)->disableOriginalConstructor()->getMock();
170  $parent = $this->getMockBuilder(BadgeParent::class)->disableOriginalConstructor()->getMock();
171  $modal = $this->getMockBuilder(Modal::class)->disableOriginalConstructor()->getMock();
172  $format_date = function (int $x): void {
173  throw new Exception('Should not be called.');
174  };
175  $sign_file = function (string $path) use ($signed_file, $badge_image_path): string {
176  $this->assertSame($badge_image_path, $path);
177  return $signed_file;
178  };
179 
180  $badge->method('getImagePath')->willReturn($badge_image_path);
181  $badge->method('getImage')->willReturn($badge_image_name);
182 
183  $modal_content->method('badge')->willReturn($badge);
184 
185  $tile = new Tile($container, $parent, $modal, $sign_file, $format_date);
186 
187  $components = $tile->$method($modal_content);
188 
189  $this->assertSame(count($expected_components), count($components));
190  array_map($this->assertInstanceOf(...), $expected_components, $components);
191  }
192 
193  public function provideAsVariants(): array
194  {
195  return [
196  'Test asImage.' => ['asImage', [ModalComponent::class, ImageComponent::class]],
197  'Test asTitle' => ['asTitle', [ModalComponent::class, ImageComponent::class, ButtonComponent::class]],
198  ];
199  }
200 }
This is how the factory for UI elements looks.
Definition: Factory.php:29
This describes a standard Card.
Definition: Standard.php:26
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
testAs(string $method, array $expected_components)
provideAsVariants
Definition: TileTest.php:161
$path
Definition: ltiservices.php:32
$container
Definition: wac.php:14
$url
Definition: ltiregstart.php:35
This is how the factory for UI elements looks.
Definition: Factory.php:27
This is how a factory for buttons looks like.
Definition: Factory.php:29