]>
Commit | Line | Data |
---|---|---|
dd09ec52 A |
1 | <?php |
2 | ||
3 | declare(strict_types=1); | |
4 | ||
5 | namespace Shaarli\Front\Controller; | |
6 | ||
7 | use PHPUnit\Framework\MockObject\MockObject; | |
8 | use Shaarli\Bookmark\BookmarkServiceInterface; | |
9 | use Shaarli\Config\ConfigManager; | |
10 | use Shaarli\Container\ShaarliTestContainer; | |
11 | use Shaarli\Formatter\BookmarkFormatter; | |
12 | use Shaarli\Formatter\BookmarkRawFormatter; | |
13 | use Shaarli\Formatter\FormatterFactory; | |
14 | use Shaarli\Plugin\PluginManager; | |
15 | use Shaarli\Render\PageBuilder; | |
16 | use Shaarli\Render\PageCacheManager; | |
17 | use Shaarli\Security\LoginManager; | |
18 | use Shaarli\Security\SessionManager; | |
19 | ||
20 | /** | |
21 | * Trait FrontControllerMockHelper | |
22 | * | |
23 | * Helper trait used to initialize the ShaarliContainer and mock its services for controller tests. | |
24 | * | |
25 | * @property ShaarliTestContainer $container | |
26 | * @package Shaarli\Front\Controller | |
27 | */ | |
28 | trait FrontControllerMockHelper | |
29 | { | |
30 | /** @var ShaarliTestContainer */ | |
31 | protected $container; | |
32 | ||
33 | /** | |
34 | * Mock the container instance | |
35 | */ | |
36 | protected function createContainer(): void | |
37 | { | |
38 | $this->container = $this->createMock(ShaarliTestContainer::class); | |
39 | } | |
40 | ||
41 | /** | |
42 | * Initialize container's services used by tests | |
43 | */ | |
44 | protected function createValidContainerMockSet(): void | |
45 | { | |
46 | $this->container->loginManager = $this->createMock(LoginManager::class); | |
47 | ||
48 | // Config | |
49 | $this->container->conf = $this->createMock(ConfigManager::class); | |
50 | $this->container->conf->method('get')->willReturnCallback(function (string $parameter, $default) { | |
51 | return $default; | |
52 | }); | |
53 | ||
54 | // PageBuilder | |
55 | $this->container->pageBuilder = $this->createMock(PageBuilder::class); | |
56 | $this->container->pageBuilder | |
57 | ->method('render') | |
58 | ->willReturnCallback(function (string $template): string { | |
59 | return $template; | |
60 | }) | |
61 | ; | |
62 | ||
63 | // Plugin Manager | |
64 | $this->container->pluginManager = $this->createMock(PluginManager::class); | |
65 | ||
66 | // BookmarkService | |
67 | $this->container->bookmarkService = $this->createMock(BookmarkServiceInterface::class); | |
68 | ||
69 | // Formatter | |
70 | $this->container->formatterFactory = $this->createMock(FormatterFactory::class); | |
71 | $this->container->formatterFactory | |
72 | ->method('getFormatter') | |
73 | ->willReturnCallback(function (): BookmarkFormatter { | |
74 | return new BookmarkRawFormatter($this->container->conf, true); | |
75 | }) | |
76 | ; | |
77 | ||
78 | // CacheManager | |
79 | $this->container->pageCacheManager = $this->createMock(PageCacheManager::class); | |
80 | ||
81 | // SessionManager | |
82 | $this->container->sessionManager = $this->createMock(SessionManager::class); | |
83 | ||
84 | // $_SERVER | |
85 | $this->container->environment = [ | |
86 | 'SERVER_NAME' => 'shaarli', | |
87 | 'SERVER_PORT' => '80', | |
88 | 'REQUEST_URI' => '/daily-rss', | |
89 | ]; | |
90 | } | |
91 | ||
92 | /** | |
93 | * Pass a reference of an array which will be populated by `pageBuilder->assign` calls during execution. | |
94 | * | |
95 | * @param mixed $variables Array reference to populate. | |
96 | */ | |
97 | protected function assignTemplateVars(array &$variables): void | |
98 | { | |
99 | $this->container->pageBuilder | |
100 | ->expects(static::atLeastOnce()) | |
101 | ->method('assign') | |
102 | ->willReturnCallback(function ($key, $value) use (&$variables) { | |
103 | $variables[$key] = $value; | |
104 | ||
105 | return $this; | |
106 | }) | |
107 | ; | |
108 | } | |
109 | ||
110 | /** | |
111 | * Force to be used in PHPUnit context. | |
112 | */ | |
113 | protected abstract function createMock($originalClassName): MockObject; | |
114 | } |