]> git.immae.eu Git - github/shaarli/Shaarli.git/blame - tests/front/controller/visitor/PictureWallControllerTest.php
Merge pull request #1697 from ArthurHoaro/feature/pagination
[github/shaarli/Shaarli.git] / tests / front / controller / visitor / PictureWallControllerTest.php
CommitLineData
485b168a
A
1<?php
2
3declare(strict_types=1);
4
2899ebb5 5namespace Shaarli\Front\Controller\Visitor;
485b168a 6
485b168a 7use Shaarli\Bookmark\Bookmark;
9b8c0a45 8use Shaarli\Bookmark\SearchResult;
485b168a 9use Shaarli\Config\ConfigManager;
485b168a 10use Shaarli\Front\Exception\ThumbnailsDisabledException;
a5a9cf23 11use Shaarli\TestCase;
485b168a
A
12use Shaarli\Thumbnailer;
13use Slim\Http\Request;
14use Slim\Http\Response;
15
16class PictureWallControllerTest extends TestCase
17{
dd09ec52 18 use FrontControllerMockHelper;
485b168a
A
19
20 /** @var PictureWallController */
21 protected $controller;
22
23 public function setUp(): void
24 {
dd09ec52
A
25 $this->createContainer();
26
485b168a
A
27 $this->controller = new PictureWallController($this->container);
28 }
29
30 public function testValidControllerInvokeDefault(): void
31 {
485b168a
A
32 $request = $this->createMock(Request::class);
33 $request->expects(static::once())->method('getQueryParams')->willReturn([]);
34 $response = new Response();
35
36 // ConfigManager: thumbnails are enabled
dd09ec52 37 $this->container->conf = $this->createMock(ConfigManager::class);
485b168a
A
38 $this->container->conf->method('get')->willReturnCallback(function (string $parameter, $default) {
39 if ($parameter === 'thumbnails.mode') {
40 return Thumbnailer::MODE_COMMON;
41 }
42
43 return $default;
44 });
45
46 // Save RainTPL assigned variables
47 $assignedVariables = [];
dd09ec52 48 $this->assignTemplateVars($assignedVariables);
485b168a
A
49
50 // Links dataset: 2 links with thumbnails
51 $this->container->bookmarkService
52 ->expects(static::once())
53 ->method('search')
9b8c0a45 54 ->willReturnCallback(function (array $parameters, ?string $visibility): SearchResult {
485b168a
A
55 // Visibility is set through the container, not the call
56 static::assertNull($visibility);
57
58 // No query parameters
59 if (count($parameters) === 0) {
9b8c0a45 60 return SearchResult::getSearchResult([
485b168a
A
61 (new Bookmark())->setId(1)->setUrl('http://url.tld')->setThumbnail('thumb1'),
62 (new Bookmark())->setId(2)->setUrl('http://url2.tld'),
63 (new Bookmark())->setId(3)->setUrl('http://url3.tld')->setThumbnail('thumb2'),
9b8c0a45 64 ]);
485b168a
A
65 }
66 })
67 ;
68
69 // Make sure that PluginManager hook is triggered
70 $this->container->pluginManager
a5a9cf23 71 ->expects(static::atLeastOnce())
485b168a 72 ->method('executeHooks')
a5a9cf23 73 ->withConsecutive(['render_picwall'])
485b168a 74 ->willReturnCallback(function (string $hook, array $data, array $param): array {
a5a9cf23
A
75 if ('render_picwall' === $hook) {
76 static::assertArrayHasKey('linksToDisplay', $data);
77 static::assertCount(2, $data['linksToDisplay']);
78 static::assertSame(1, $data['linksToDisplay'][0]['id']);
79 static::assertSame(3, $data['linksToDisplay'][1]['id']);
80 static::assertArrayHasKey('loggedin', $param);
81 }
485b168a
A
82
83 return $data;
84 });
85
86 $result = $this->controller->index($request, $response);
87
88 static::assertSame(200, $result->getStatusCode());
89 static::assertSame('picwall', (string) $result->getBody());
90 static::assertSame('Picture wall - Shaarli', $assignedVariables['pagetitle']);
91 static::assertCount(2, $assignedVariables['linksToDisplay']);
92
93 $link = $assignedVariables['linksToDisplay'][0];
94
95 static::assertSame(1, $link['id']);
96 static::assertSame('http://url.tld', $link['url']);
97 static::assertSame('thumb1', $link['thumbnail']);
98
99 $link = $assignedVariables['linksToDisplay'][1];
100
101 static::assertSame(3, $link['id']);
102 static::assertSame('http://url3.tld', $link['url']);
103 static::assertSame('thumb2', $link['thumbnail']);
104 }
105
106 public function testControllerWithThumbnailsDisabled(): void
107 {
108 $this->expectException(ThumbnailsDisabledException::class);
109
485b168a
A
110 $request = $this->createMock(Request::class);
111 $response = new Response();
112
113 // ConfigManager: thumbnails are disabled
114 $this->container->conf->method('get')->willReturnCallback(function (string $parameter, $default) {
115 if ($parameter === 'thumbnails.mode') {
116 return Thumbnailer::MODE_NONE;
117 }
118
119 return $default;
120 });
121
122 $this->controller->index($request, $response);
123 }
485b168a 124}