ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
CronJobManagerTest.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
26 
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 }
Interface Observer Contains several chained tasks and infos about them.
testCronManagerNotifiesJobWhenJobGetsActivated()
__construct(Container $dic, ilPlugin $plugin)
testCronManagerNotifiesJobWhenJobGetsDeactivated()