ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
CronJobManagerTest.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21use PHPUnit\Framework\TestCase;
26
27class CronJobManagerTest extends TestCase
28{
29 private function createClockFactoryMock(): \ILIAS\Data\Clock\ClockFactory
30 {
31 $clock_factory = $this->createMock(ILIAS\Data\Clock\ClockFactory::class);
32 $now = new DateTimeImmutable('@' . time());
33 $clock_factory->method('system')->willReturn(
34 new readonly class ($now) implements \ILIAS\Data\Clock\ClockInterface {
35 public function __construct(private DateTimeImmutable $now)
36 {
37 }
38
39 public function now(): DateTimeImmutable
40 {
41 return $this->now;
42 }
43 }
44 );
45
46 return $clock_factory;
47 }
48
50 {
51 $db = $this->createMock(ilDBInterface::class);
52 $setting = $this->getMockBuilder(ilSetting::class)->disableOriginalConstructor()->getMock();
53 $logger = $this->getMockBuilder(ilLogger::class)->disableOriginalConstructor()->getMock();
54 $repository = $this->createMock(JobRepository::class);
55 $job = $this->createMock(CronJob::class);
56 $user = $this->getMockBuilder(ilObjUser::class)
57 ->disableOriginalConstructor()
58 ->onlyMethods(['getId'])
59 ->getMock();
60
61 $clock_factory = $this->createClockFactoryMock();
62
63 $cronManager = new JobManagerImpl(
64 $repository,
65 $db,
66 $setting,
67 $logger,
68 $clock_factory
69 );
70
71 $repository->expects($this->once())->method('updateJobResult')->with(
72 $job,
73 $clock_factory->system()->now(),
74 $user,
75 $this->isInstanceOf(JobResult::class),
76 true
77 );
78
79 $repository->expects($this->once())->method('resetJob')->with(
80 $job
81 );
82
83 $repository->expects($this->once())->method('activateJob')->with(
84 $job,
85 $clock_factory->system()->now(),
86 $user,
87 true
88 );
89
90 $job->expects($this->once())->method('activationWasToggled')->with(
91 $db,
92 $setting,
93 true
94 );
95
96 $cronManager->resetJob($job, $user);
97 }
98
100 {
101 $db = $this->createMock(ilDBInterface::class);
102 $setting = $this->getMockBuilder(ilSetting::class)->disableOriginalConstructor()->getMock();
103 $logger = $this->getMockBuilder(ilLogger::class)->disableOriginalConstructor()->getMock();
104 $repository = $this->createMock(JobRepository::class);
105 $job = $this->createMock(CronJob::class);
106 $user = $this->getMockBuilder(ilObjUser::class)
107 ->disableOriginalConstructor()
108 ->onlyMethods(['getId'])
109 ->getMock();
110
111 $clock_factory = $this->createClockFactoryMock();
112
113 $cronManager = new JobManagerImpl(
114 $repository,
115 $db,
116 $setting,
117 $logger,
118 $clock_factory
119 );
120
121 $consecutive = [
122 [$job, $clock_factory->system()->now(), $user, true],
123 [$job, $clock_factory->system()->now(), $user, false]
124 ];
125 $repository
126 ->expects($this->exactly(2))
127 ->method('activateJob')
128 ->willReturnCallback(
129 function ($job, $date, $user, $flag) use (&$consecutive): void {
130 [$ejob, $edate, $euser, $eflag] = array_shift($consecutive);
131 $this->assertEquals($ejob, $job);
132 $this->assertEquals($edate, $date);
133 $this->assertEquals($euser, $user);
134 $this->assertEquals($eflag, $flag);
135 }
136 );
137
138 $job->expects($this->exactly(2))->method('activationWasToggled')->with(
139 $db,
140 $setting,
141 true
142 );
143
144 $cronManager->activateJob($job, $user, true);
145 $cronManager->activateJob($job, $user, false);
146 }
147
149 {
150 $db = $this->createMock(ilDBInterface::class);
151 $setting = $this->getMockBuilder(ilSetting::class)->disableOriginalConstructor()->getMock();
152 $logger = $this->getMockBuilder(ilLogger::class)->disableOriginalConstructor()->getMock();
153 $repository = $this->createMock(JobRepository::class);
154 $job = $this->createMock(CronJob::class);
155 $user = $this->getMockBuilder(ilObjUser::class)
156 ->disableOriginalConstructor()
157 ->onlyMethods(['getId'])
158 ->getMock();
159
160 $clock_factory = $this->createClockFactoryMock();
161
162 $cronManager = new JobManagerImpl(
163 $repository,
164 $db,
165 $setting,
166 $logger,
167 $clock_factory
168 );
169
170 $consecutive = [
171 [$job, $clock_factory->system()->now(), $user, true],
172 [$job, $clock_factory->system()->now(), $user, false]
173 ];
174 $repository
175 ->expects($this->exactly(2))
176 ->method('deactivateJob')
177 ->willReturnCallback(
178 function ($job, $date, $user, $flag) use (&$consecutive): void {
179 [$ejob, $edate, $euser, $eflag] = array_shift($consecutive);
180 $this->assertEquals($ejob, $job);
181 $this->assertEquals($edate, $date);
182 $this->assertEquals($euser, $user);
183 $this->assertEquals($eflag, $flag);
184 }
185 );
186
187 $job->expects($this->exactly(2))->method('activationWasToggled')->with(
188 $db,
189 $setting,
190 false
191 );
192
193 $cronManager->deactivateJob($job, $user, true);
194 $cronManager->deactivateJob($job, $user, false);
195 }
196}
testCronManagerNotifiesJobWhenJobGetsDeactivated()
testCronManagerNotifiesJobWhenJobGetsActivated()
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
Interface Observer \BackgroundTasks Contains several chained tasks and infos about them.