29 private $filesystemMock;
34 private $crontabManager;
41 $this->shellMock = $this->getMockBuilder(ShellInterface::class)
42 ->getMockForAbstractClass();
43 $this->filesystemMock = $this->getMockBuilder(Filesystem::class)
44 ->disableOriginalClone()
45 ->disableOriginalConstructor()
48 $this->crontabManager =
new CrontabManager($this->shellMock, $this->filesystemMock);
56 $exception = new \Exception(
'crontab: no crontab for user');
59 $this->shellMock->expects($this->once())
61 ->with(
'crontab -l', [])
62 ->willThrowException($localizedException);
64 $this->assertEquals([], $this->crontabManager->getTasks());
75 $this->shellMock->expects($this->once())
77 ->with(
'crontab -l', [])
80 $this->assertEquals($tasks, $this->crontabManager->getTasks());
90 'content' =>
'* * * * * /bin/php /var/www/cron.php' . PHP_EOL
92 .
'* * * * * /bin/php /var/www/magento/bin/magento cron:run' . PHP_EOL
94 'tasks' => [
'* * * * * /bin/php /var/www/magento/bin/magento cron:run'],
97 'content' =>
'* * * * * /bin/php /var/www/cron.php' . PHP_EOL
99 .
'* * * * * /bin/php /var/www/magento/bin/magento cron:run' . PHP_EOL
100 .
'* * * * * /bin/php /var/www/magento/bin/magento setup:cron:run' . PHP_EOL
103 '* * * * * /bin/php /var/www/magento/bin/magento cron:run',
104 '* * * * * /bin/php /var/www/magento/bin/magento setup:cron:run',
108 'content' =>
'* * * * * /bin/php /var/www/cron.php' . PHP_EOL,
125 $exception = new \Exception(
'Shell error');
128 $this->shellMock->expects($this->at(0))
130 ->with(
'crontab -l', [])
133 $this->shellMock->expects($this->at(1))
135 ->with(
'echo "" | crontab -', [])
136 ->willThrowException($localizedException);
138 $this->crontabManager->removeTasks();
149 $this->shellMock->expects($this->at(0))
151 ->with(
'crontab -l', [])
152 ->willReturn($contentBefore);
154 $this->shellMock->expects($this->at(1))
156 ->with(
'echo "' . $contentAfter .
'" | crontab -', []);
158 $this->crontabManager->removeTasks();
168 'contentBefore' =>
'* * * * * /bin/php /var/www/cron.php' . PHP_EOL
170 .
'* * * * * /bin/php /var/www/magento/bin/magento cron:run' . PHP_EOL
172 'contentAfter' =>
'* * * * * /bin/php /var/www/cron.php' . PHP_EOL
175 'contentBefore' =>
'* * * * * /bin/php /var/www/cron.php' . PHP_EOL
177 .
'* * * * * /bin/php /var/www/magento/bin/magento cron:run' . PHP_EOL
178 .
'* * * * * /bin/php /var/www/magento/bin/magento setup:cron:run' . PHP_EOL
180 'contentAfter' =>
'* * * * * /bin/php /var/www/cron.php' . PHP_EOL
183 'contentBefore' =>
'* * * * * /bin/php /var/www/cron.php' . PHP_EOL,
184 'contentAfter' =>
'* * * * * /bin/php /var/www/cron.php' . PHP_EOL
187 'contentBefore' =>
'',
200 $baseDirMock = $this->getMockBuilder(ReadInterface::class)
201 ->getMockForAbstractClass();
202 $baseDirMock->expects($this->never())
203 ->method(
'getAbsolutePath')
204 ->willReturn(
'/var/www/magento2/');
205 $logDirMock = $this->getMockBuilder(ReadInterface::class)
206 ->getMockForAbstractClass();
207 $logDirMock->expects($this->never())
208 ->method(
'getAbsolutePath');
210 $this->filesystemMock->expects($this->any())
211 ->method(
'getDirectoryRead')
217 $this->crontabManager->saveTasks([]);
227 $baseDirMock = $this->getMockBuilder(ReadInterface::class)
228 ->getMockForAbstractClass();
229 $baseDirMock->expects($this->once())
230 ->method(
'getAbsolutePath')
231 ->willReturn(
'/var/www/magento2/');
232 $logDirMock = $this->getMockBuilder(ReadInterface::class)
233 ->getMockForAbstractClass();
234 $logDirMock->expects($this->once())
235 ->method(
'getAbsolutePath')
236 ->willReturn(
'/var/www/magento2/var/log/');
238 $this->filesystemMock->expects($this->any())
239 ->method(
'getDirectoryRead')
245 $this->crontabManager->saveTasks([
246 'myCron' => [
'expression' =>
'* * * * *']
259 $baseDirMock = $this->getMockBuilder(ReadInterface::class)
260 ->getMockForAbstractClass();
261 $baseDirMock->expects($this->once())
262 ->method(
'getAbsolutePath')
263 ->willReturn(
'/var/www/magento2/');
264 $logDirMock = $this->getMockBuilder(ReadInterface::class)
265 ->getMockForAbstractClass();
266 $logDirMock->expects($this->once())
267 ->method(
'getAbsolutePath')
268 ->willReturn(
'/var/www/magento2/var/log/');
270 $this->filesystemMock->expects($this->any())
271 ->method(
'getDirectoryRead')
277 $this->shellMock->expects($this->at(0))
279 ->with(
'crontab -l', [])
282 $this->shellMock->expects($this->at(1))
284 ->with(
'echo "' . $contentToSave .
'" | crontab -', []);
286 $this->crontabManager->saveTasks($tasks);
294 $content =
'* * * * * /bin/php /var/www/cron.php' . PHP_EOL
296 .
'* * * * * /bin/php /var/www/magento/bin/magento cron:run' . PHP_EOL
302 [
'expression' =>
'* * * * *',
'command' =>
'run.php']
305 'contentToSave' =>
'* * * * * /bin/php /var/www/cron.php' . PHP_EOL
307 .
'* * * * * ' . PHP_BINARY .
' run.php' . PHP_EOL
312 [
'expression' =>
'1 2 3 4 5',
'command' =>
'run.php']
315 'contentToSave' =>
'* * * * * /bin/php /var/www/cron.php' . PHP_EOL
317 .
'1 2 3 4 5 ' . PHP_BINARY .
' run.php' . PHP_EOL
322 [
'command' =>
'{magentoRoot}run.php >> {magentoLog}cron.log']
325 'contentToSave' =>
'* * * * * /bin/php /var/www/cron.php' . PHP_EOL
327 .
'* * * * * ' . PHP_BINARY .
' /var/www/magento2/run.php >>' 328 .
' /var/www/magento2/var/log/cron.log' . PHP_EOL
333 [
'command' =>
'{magentoRoot}run.php % cron:run | grep -v "Ran \'jobs\' by schedule"']
336 'contentToSave' =>
'* * * * * /bin/php /var/www/cron.php' . PHP_EOL
338 .
'* * * * * ' . PHP_BINARY .
' /var/www/magento2/run.php' 339 .
' %% cron:run | grep -v \"Ran \'jobs\' by schedule\"' . PHP_EOL
344 [
'command' =>
'{magentoRoot}run.php % cron:run | grep -v "Ran \'jobs\' by schedule"']
346 'content' =>
'* * * * * /bin/php /var/www/cron.php',
347 'contentToSave' =>
'* * * * * /bin/php /var/www/cron.php' . PHP_EOL
349 .
'* * * * * ' . PHP_BINARY .
' /var/www/magento2/run.php' 350 .
' %% cron:run | grep -v \"Ran \'jobs\' by schedule\"' . PHP_EOL
testSaveTasks($tasks, $content, $contentToSave)
testRemoveTasks($contentBefore, $contentAfter)
removeTasksDataProvider()
testGetTasks($content, $tasks)
testRemoveTasksWithException()
testSaveTasksWithoutCommand()
testSaveTasksWithEmptyTasksList()