Completed
Pull Request — master (#16)
by Simon
06:16
created

SiteConfigExtensionTest::testOnAfterWriteNoDuplicateJob()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 23
rs 9.552
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
namespace Firesphere\PartialUserforms\Tests;
4
5
use Firesphere\PartialUserforms\Extensions\SiteConfigExtension;
6
use Firesphere\PartialUserforms\Jobs\PartialSubmissionJob;
7
use SilverStripe\Core\Config\Config;
8
use SilverStripe\Core\Injector\Injector;
9
use SilverStripe\Dev\SapphireTest;
10
use SilverStripe\Forms\CheckboxField;
11
use SilverStripe\Forms\EmailField;
12
use SilverStripe\Forms\FieldList;
13
use SilverStripe\Forms\Tab;
14
use SilverStripe\Forms\TextField;
15
use SilverStripe\ORM\FieldType\DBDatetime;
16
use SilverStripe\SiteConfig\SiteConfig;
17
use Symbiote\QueuedJobs\DataObjects\QueuedJobDescriptor;
18
use Symbiote\QueuedJobs\Services\QueuedJobService;
19
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