]> git.mxchange.org Git - friendica.git/blob - tests/src/Console/LockConsoleTest.php
Merge pull request #8134 from nupplaphil/task/di_l10n
[friendica.git] / tests / src / Console / LockConsoleTest.php
1 <?php
2
3 namespace Friendica\Test\src\Console;
4
5 use Friendica\App;
6 use Friendica\App\Mode;
7 use Friendica\Console\Lock;
8 use Friendica\Core\Lock\ILock;
9 use Mockery\MockInterface;
10
11 class LockConsoleTest extends ConsoleTest
12 {
13         /**
14          * @var App\Mode|MockInterface $appMode
15          */
16         private $appMode;
17
18         /**
19          * @var ILock|MockInterface
20          */
21         private $lockMock;
22
23         protected function setUp()
24         {
25                 parent::setUp();
26
27                 \Mockery::getConfiguration()->setConstantsMap([
28                         Mode::class => [
29                                 'DBCONFIGAVAILABLE' => 0
30                         ]
31                 ]);
32
33                 $this->appMode = \Mockery::mock(App\Mode::class);
34                 $this->appMode->shouldReceive('has')
35                         ->andReturn(true);
36
37                 $this->lockMock = \Mockery::mock(ILock::class);
38         }
39
40         public function testList()
41         {
42                 $this->lockMock
43                         ->shouldReceive('getLocks')
44                         ->andReturn(['test', 'test2'])
45                         ->once();
46
47                 $console = new Lock($this->appMode, $this->lockMock, $this->consoleArgv);
48                 $console->setArgument(0, 'list');
49                 $txt = $this->dumpExecute($console);
50                 $this->assertEquals("Listing all Locks:\ntest\ntest2\n2 locks found\n", $txt);
51         }
52
53         public function testListPrefix()
54         {
55                 $this->lockMock
56                         ->shouldReceive('getLocks')
57                         ->with('test')
58                         ->andReturn(['test', 'test2'])
59                         ->once();
60
61                 $console = new Lock($this->appMode, $this->lockMock, $this->consoleArgv);
62                 $console->setArgument(0, 'list');
63                 $console->setArgument(1, 'test');
64                 $txt = $this->dumpExecute($console);
65                 $this->assertEquals("Listing all Locks starting with \"test\":\ntest\ntest2\n2 locks found\n", $txt);
66         }
67
68         public function testDelLock()
69         {
70                 $this->lockMock
71                         ->shouldReceive('release')
72                         ->with('test', true)
73                         ->andReturn(true)
74                         ->once();
75
76                 $console = new Lock($this->appMode, $this->lockMock, $this->consoleArgv);
77                 $console->setArgument(0, 'del');
78                 $console->setArgument(1, 'test');
79                 $txt = $this->dumpExecute($console);
80                 $this->assertEquals("Lock 'test' released.\n", $txt);
81         }
82
83         public function testDelUnknownLock()
84         {
85                 $this->lockMock
86                         ->shouldReceive('release')
87                         ->with('test', true)
88                         ->andReturn(false)
89                         ->once();
90
91                 $console = new Lock($this->appMode, $this->lockMock, $this->consoleArgv);
92                 $console->setArgument(0, 'del');
93                 $console->setArgument(1, 'test');
94                 $txt = $this->dumpExecute($console);
95                 $this->assertEquals("Couldn't release Lock 'test'\n", $txt);
96         }
97
98         public function testSetLock()
99         {
100                 $this->lockMock
101                         ->shouldReceive('isLocked')
102                         ->with('test')
103                         ->andReturn(false)
104                         ->once();
105                 $this->lockMock
106                         ->shouldReceive('acquire')
107                         ->with('test')
108                         ->andReturn(true)
109                         ->once();
110
111                 $console = new Lock($this->appMode, $this->lockMock, $this->consoleArgv);
112                 $console->setArgument(0, 'set');
113                 $console->setArgument(1, 'test');
114                 $txt = $this->dumpExecute($console);
115                 $this->assertEquals("Lock 'test' acquired.\n", $txt);
116         }
117
118         public function testSetLockIsLocked()
119         {
120                 $this->lockMock
121                         ->shouldReceive('isLocked')
122                         ->with('test')
123                         ->andReturn(true)
124                         ->once();
125
126                 $console = new Lock($this->appMode, $this->lockMock, $this->consoleArgv);
127                 $console->setArgument(0, 'set');
128                 $console->setArgument(1, 'test');
129                 $txt = $this->dumpExecute($console);
130                 $this->assertEquals("[Error] 'test' is already set.\n", $txt);
131         }
132
133         public function testSetLockNotWorking()
134         {
135                 $this->lockMock
136                         ->shouldReceive('isLocked')
137                         ->with('test')
138                         ->andReturn(false)
139                         ->once();
140                 $this->lockMock
141                         ->shouldReceive('acquire')
142                         ->with('test')
143                         ->andReturn(false)
144                         ->once();
145
146                 $console = new Lock($this->appMode, $this->lockMock, $this->consoleArgv);
147                 $console->setArgument(0, 'set');
148                 $console->setArgument(1, 'test');
149                 $txt = $this->dumpExecute($console);
150                 $this->assertEquals("[Error] Unable to lock 'test'.\n", $txt);
151         }
152
153         public function testReleaseAll()
154         {
155                 $this->lockMock
156                         ->shouldReceive('releaseAll')
157                         ->andReturn(true)
158                         ->once();
159
160                 $console = new Lock($this->appMode, $this->lockMock, $this->consoleArgv);
161                 $console->setArgument(0, 'clear');
162                 $txt = $this->dumpExecute($console);
163                 $this->assertEquals("Locks successfully cleared.\n", $txt);
164         }
165
166         public function testReleaseAllFailed()
167         {
168                 $this->lockMock
169                         ->shouldReceive('releaseAll')
170                         ->andReturn(false)
171                         ->once();
172
173                 $console = new Lock($this->appMode, $this->lockMock, $this->consoleArgv);
174                 $console->setArgument(0, 'clear');
175                 $txt = $this->dumpExecute($console);
176                 $this->assertEquals("[Error] Unable to clear the locks.\n", $txt);
177         }
178
179         public function testGetHelp()
180         {
181                 // Usable to purposely fail if new commands are added without taking tests into account
182                 $theHelp = <<<HELP
183 console lock - Manage node locks
184 Synopsis
185         bin/console lock list [<prefix>] [-h|--help|-?] [-v]
186         bin/console lock set <lock> [<timeout> [<ttl>]] [-h|--help|-?] [-v]
187         bin/console lock del <lock> [-h|--help|-?] [-v]
188         bin/console lock clear [-h|--help|-?] [-v]
189
190 Description
191         bin/console lock list [<prefix>]
192                 List all locks, optionally filtered by a prefix
193
194         bin/console lock set <lock> [<timeout> [<ttl>]]
195                 Sets manually a lock, optionally with the provided TTL (time to live) with a default of five minutes.
196
197         bin/console lock del <lock>
198                 Deletes a lock.
199
200         bin/console lock clear
201                 Clears all locks
202
203 Options
204     -h|--help|-? Show help information
205     -v           Show more debug information.
206
207 HELP;
208                 $console = new Lock($this->appMode, $this->lockMock, [$this->consoleArgv]);
209                 $console->setOption('help', true);
210
211                 $txt = $this->dumpExecute($console);
212
213                 $this->assertEquals($txt, $theHelp);
214         }
215 }