Issues (47)

tests/SimpleJobsTest.php (1 issue)

Labels
Severity
1
<?php
2
3
namespace LeKoala\SimpleJobs\Test;
4
5
use LeKoala\SimpleJobs\CronJob;
6
use SilverStripe\Security\Member;
7
use LeKoala\SimpleJobs\SimpleTask;
8
use SilverStripe\Dev\SapphireTest;
9
use SilverStripe\Security\Security;
10
use SilverStripe\Control\Controller;
11
use LeKoala\SimpleJobs\SimpleJobsController;
12
use SilverStripe\ORM\DB;
13
use SilverStripe\Security\DefaultAdminService;
14
15
/**
16
 * Test for SimpleJobs
17
 *
18
 * @group SimpleJobs
19
 */
20
class SimpleJobsTest extends SapphireTest
21
{
22
    /**
23
     * Defines the fixture file to use for this test class
24
     * @var string
25
     */
26
    protected static $fixture_file = 'SimpleJobsTest.yml';
27
28
    protected function setUp(): void
29
    {
30
        parent::setUp();
31
        $controller = Controller::curr();
32
        $controller->config()->set('url_segment', 'test_controller');
33
    }
34
35
    protected function tearDown(): void
36
    {
37
        parent::tearDown();
38
    }
39
40
    public function testSimpleTask(): void
41
    {
42
        $task = new SimpleTask;
43
        $inst = Member::get()->first();
44
        $curr = $inst->TempIDHash;
45
        $task->addToTask($inst, 'regenerateTempID');
0 ignored issues
show
It seems like $inst can also be of type null; however, parameter $class of LeKoala\SimpleJobs\SimpleTask::addToTask() does only seem to accept SilverStripe\ORM\DataObject, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

45
        $task->addToTask(/** @scrutinizer ignore-type */ $inst, 'regenerateTempID');
Loading history...
46
        $task->write();
47
48
        // Make sure it's marked as being the next one to process
49
        $next = SimpleTask::getNextTaskToRun();
50
        $this->assertEquals($task->ID, $next->ID);
51
        $count = SimpleTask::getTasksThatNeedToRun()->count();
52
        $this->assertEquals(1, $count);
53
54
        // It's still the same
55
        $this->assertEquals($curr, $inst->TempIDHash);
56
        $task->process();
57
58
        // refresh inst
59
        $inst = Member::get()->first();
60
        $this->assertNotEquals($curr, $inst->TempIDHash);
61
62
        $this->assertEquals(true, $task->Processed);
63
        $this->assertEquals(1, $task->SuccessCalls);
64
        $this->assertEquals(1, $task->CallsCount);
65
        $this->assertEquals(0, $task->ErrorCalls);
66
67
        $count = SimpleTask::getTasksThatNeedToRun()->count();
68
        $this->assertEquals(0, $count);
69
    }
70
71
    public function testController(): void
72
    {
73
        $ctrl = new SimpleJobsController();
74
75
        Security::setCurrentUser(null);
76
        $res = $ctrl->trigger_manual();
77
        $this->assertStringContainsString("must be logged", $res);
78
79
        $service = DefaultAdminService::singleton();
80
        $admin = $service->findOrCreateDefaultAdmin();
81
        Security::setCurrentUser($admin);
82
83
        $res = $ctrl->trigger_manual();
84
        $this->assertStringNotContainsString("must be logged", $res);
85
    }
86
87
    public function testCanGenerateJobs(): void
88
    {
89
        CronJob::regenerateFromClasses();
90
        $this->assertNotEquals(0, CronJob::get()->count());
91
    }
92
93
    public function testHasTasks(): void
94
    {
95
        $this->assertNotEmpty(CronJob::allTasks());
96
    }
97
98
    public function testClearResults(): void
99
    {
100
        $t = date('Y-m-d', strtotime('-1 year'));
101
        DB::query("INSERT INTO CronTaskResult (Created) VALUES ('$t')");
102
103
        $count = DB::query('SELECT COUNT(*) FROM CronTaskResult')->value();
104
105
        SimpleJobsController::clearResultsTable();
106
107
        $newCount = DB::query('SELECT COUNT(*) FROM CronTaskResult')->value();
108
        $this->assertNotEquals($count, $newCount);
109
    }
110
}
111