1 | <?php |
||
20 | class SiteConfigExtensionTest extends SapphireTest |
||
21 | { |
||
22 | /** |
||
23 | * @var bool |
||
24 | */ |
||
25 | protected $usesDatabase = true; |
||
26 | |||
27 | /** |
||
28 | * @var SiteConfigExtension |
||
29 | */ |
||
30 | protected $extension; |
||
31 | |||
32 | public function testUpdateCMSFields() |
||
33 | { |
||
34 | $fieldList = FieldList::create(); |
||
35 | $fieldList->add(Tab::create('Root')); |
||
36 | |||
37 | $this->extension->updateCMSFields($fieldList); |
||
38 | |||
39 | $this->assertInstanceOf(CheckboxField::class, $fieldList->dataFieldByName('SendDailyEmail')); |
||
40 | $this->assertInstanceOf(CheckboxField::class, $fieldList->dataFieldByName('CleanupAfterSend')); |
||
41 | $this->assertInstanceOf(TextField::class, $fieldList->dataFieldByName('SendMailTo')); |
||
42 | $this->assertInstanceOf(EmailField::class, $fieldList->dataFieldByName('SendMailFrom')); |
||
43 | } |
||
44 | |||
45 | public function testOnAfterWriteNoSetting() |
||
46 | { |
||
47 | $this->extension->onAfterWrite(); |
||
48 | |||
49 | $this->assertCount(0, QueuedJobDescriptor::get() |
||
50 | ->filter([ |
||
51 | 'Implementation' => PartialSubmissionJob::class, |
||
52 | 'StartAfter:GreaterThan' => DBDatetime::now() |
||
53 | ]) |
||
54 | ->column('Implementation')); |
||
55 | } |
||
56 | |||
57 | public function testOnAfterWriteSettingNoEmail() |
||
58 | { |
||
59 | $config = SiteConfig::current_site_config(); |
||
60 | $config->SendDailyEmail = true; |
||
61 | $this->extension->setOwner($config); |
||
62 | $this->extension->onAfterWrite(); |
||
63 | |||
64 | $this->assertCount(0, QueuedJobDescriptor::get() |
||
65 | ->filter([ |
||
66 | 'Implementation' => PartialSubmissionJob::class, |
||
67 | 'StartAfter:GreaterThan' => DBDatetime::now() |
||
68 | ]) |
||
69 | ->column('Implementation')); |
||
70 | } |
||
71 | |||
72 | public function testOnAfterWriteCreateJob() |
||
73 | { |
||
74 | $config = SiteConfig::current_site_config(); |
||
75 | $config->SendDailyEmail = true; |
||
76 | $config->SendMailTo = '[email protected]'; |
||
77 | $this->extension->setOwner($config); |
||
78 | $this->extension->onAfterWrite(); |
||
79 | |||
80 | $jobs = QueuedJobDescriptor::get() |
||
81 | ->filter([ |
||
82 | 'Implementation' => PartialSubmissionJob::class, |
||
83 | 'StartAfter:GreaterThan' => DBDatetime::now() |
||
84 | ]) |
||
85 | ->column('Implementation'); |
||
86 | |||
87 | $this->assertCount(1, $jobs); |
||
88 | } |
||
89 | |||
90 | public function testOnAfterWriteNoDuplicateJob() |
||
91 | { |
||
92 | $job = Injector::inst()->get(PartialSubmissionJob::class); |
||
93 | /** @var QueuedJobService $queuedJob */ |
||
94 | $queuedJob = Injector::inst()->get(QueuedJobService::class); |
||
95 | $tomorrow = date('Y-m-d H:i:s', strtotime('+1 day')); |
||
96 | $queuedJob->queueJob($job, $tomorrow); |
||
97 | |||
98 | $config = SiteConfig::current_site_config(); |
||
99 | $config->SendDailyEmail = true; |
||
100 | $config->SendMailTo = '[email protected]'; |
||
101 | $this->extension->setOwner($config); |
||
102 | $this->extension->onAfterWrite(); |
||
103 | |||
104 | $jobs = QueuedJobDescriptor::get() |
||
105 | ->filter([ |
||
106 | 'Implementation' => PartialSubmissionJob::class, |
||
107 | 'StartAfter:GreaterThan' => DBDatetime::now() |
||
108 | ]) |
||
109 | ->column('Implementation'); |
||
110 | |||
111 | $this->assertCount(1, $jobs); |
||
112 | } |
||
113 | |||
114 | protected function setUp() |
||
115 | { |
||
116 | parent::setUp(); |
||
117 | |||
118 | Config::modify()->set(QueuedJobService::class, 'use_shutdown_function', false); |
||
119 | /** @var SiteConfigExtension $extension */ |
||
120 | $extension = Injector::inst()->get(SiteConfigExtension::class); |
||
121 | $extension->setOwner(SiteConfig::current_site_config()); |
||
122 | $this->extension = $extension; |
||
123 | } |
||
124 | |||
125 | protected function tearDown() |
||
126 | { |
||
127 | /** DataList */ |
||
128 | QueuedJobDescriptor::get() |
||
129 | ->filter([ |
||
130 | 'Implementation' => PartialSubmissionJob::class, |
||
131 | 'StartAfter:GreaterThan' => DBDatetime::now() |
||
132 | ])->removeAll(); |
||
133 | |||
134 | parent::tearDown(); |
||
135 | } |
||
136 | } |
||
137 |