Issues (91)

Schedule/Extension/ScheduleCallbackHandlerTest.php (1 issue)

Labels
Severity
1
<?php
2
3
namespace Zenstruck\ScheduleBundle\Tests\Schedule\Extension;
4
5
use PHPUnit\Framework\TestCase;
0 ignored issues
show
The type PHPUnit\Framework\TestCase was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
6
use Zenstruck\ScheduleBundle\Schedule;
7
use Zenstruck\ScheduleBundle\Schedule\ScheduleBuilder;
8
use Zenstruck\ScheduleBundle\Tests\Fixture\MockScheduleBuilder;
9
use Zenstruck\ScheduleBundle\Tests\Fixture\MockTask;
10
11
/**
12
 * @author Kevin Bond <[email protected]>
13
 */
14
final class ScheduleCallbackHandlerTest extends TestCase
15
{
16
    /**
17
     * @test
18
     */
19
    public function false_when_filter_skips_schedule()
20
    {
21
        $context = self::createBuilder(function(Schedule $schedule) {
22
            $schedule->when('boolean value', false);
23
        })->run();
24
25
        $this->assertFalse($context->hasRun());
26
        $this->assertTrue($context->isSkipped());
27
        $this->assertSame('boolean value', $context->getSkipReason());
28
    }
29
30
    /**
31
     * @test
32
     */
33
    public function callback_returning_false_when_filter_skips_schedule()
34
    {
35
        $context = self::createBuilder(function(Schedule $schedule) {
36
            $schedule->when('callback value', function() { return false; });
37
        })->run();
38
39
        $this->assertFalse($context->hasRun());
40
        $this->assertTrue($context->isSkipped());
41
        $this->assertSame('callback value', $context->getSkipReason());
42
    }
43
44
    /**
45
     * @test
46
     */
47
    public function true_when_filter_allows_schedule_to_run()
48
    {
49
        $context = self::createBuilder(function(Schedule $schedule) {
50
            $schedule->when('boolean value', true);
51
        })->run();
52
53
        $this->assertTrue($context->hasRun());
54
        $this->assertFalse($context->isSkipped());
55
    }
56
57
    /**
58
     * @test
59
     */
60
    public function callback_returning_true_when_filter_allows_schedule_to_run()
61
    {
62
        $context = self::createBuilder(function(Schedule $schedule) {
63
            $schedule->when('callback value', function() { return true; });
64
        })->run();
65
66
        $this->assertTrue($context->hasRun());
67
        $this->assertFalse($context->isSkipped());
68
    }
69
70
    /**
71
     * @test
72
     */
73
    public function true_skip_filter_skips_schedule()
74
    {
75
        $context = self::createBuilder(function(Schedule $schedule) {
76
            $schedule->skip('boolean value', true);
77
        })->run();
78
79
        $this->assertFalse($context->hasRun());
80
        $this->assertTrue($context->isSkipped());
81
        $this->assertSame('boolean value', $context->getSkipReason());
82
    }
83
84
    /**
85
     * @test
86
     */
87
    public function callback_returning_true_skip_filter_skips_schedule()
88
    {
89
        $context = self::createBuilder(function(Schedule $schedule) {
90
            $schedule->skip('callback value', function() { return true; });
91
        })->run();
92
93
        $this->assertFalse($context->hasRun());
94
        $this->assertTrue($context->isSkipped());
95
        $this->assertSame('callback value', $context->getSkipReason());
96
    }
97
98
    /**
99
     * @test
100
     */
101
    public function false_skip_filter_allows_schedule_to_run()
102
    {
103
        $context = self::createBuilder(function(Schedule $schedule) {
104
            $schedule->skip('boolean value', false);
105
        })->run();
106
107
        $this->assertTrue($context->hasRun());
108
        $this->assertFalse($context->isSkipped());
109
    }
110
111
    /**
112
     * @test
113
     */
114
    public function callback_returning_false_skip_filter_allows_schedule_to_run()
115
    {
116
        $context = self::createBuilder(function(Schedule $schedule) {
117
            $schedule->skip('callback value', function() { return false; });
118
        })->run();
119
120
        $this->assertTrue($context->hasRun());
121
        $this->assertFalse($context->isSkipped());
122
    }
123
124
    /**
125
     * @test
126
     */
127
    public function no_due_tasks_calls_runs_proper_callbacks()
128
    {
129
        $calls = [];
130
131
        self::createBuilder(function(Schedule $schedule) use (&$calls) {
132
            $schedule->filter(function() use (&$calls) { $calls[] = 'filter'; });
133
            $schedule->before(function() use (&$calls) { $calls[] = 'before'; });
134
            $schedule->after(function() use (&$calls) { $calls[] = 'after'; });
135
            $schedule->then(function() use (&$calls) { $calls[] = 'then'; });
136
            $schedule->onSuccess(function() use (&$calls) { $calls[] = 'onSuccess'; });
137
            $schedule->onFailure(function() use (&$calls) { $calls[] = 'onFailure'; });
138
        })->run();
139
140
        $this->assertSame([
141
            'filter',
142
            'before',
143
            'after',
144
            'then',
145
            'onSuccess',
146
        ], $calls);
147
    }
148
149
    /**
150
     * @test
151
     */
152
    public function all_successful_tasks_calls_runs_proper_callbacks()
153
    {
154
        $calls = [];
155
156
        self::createBuilder(function(Schedule $schedule) use (&$calls) {
157
            $schedule->filter(function() use (&$calls) { $calls[] = 'filter'; });
158
            $schedule->before(function() use (&$calls) { $calls[] = 'before'; });
159
            $schedule->after(function() use (&$calls) { $calls[] = 'after'; });
160
            $schedule->then(function() use (&$calls) { $calls[] = 'then'; });
161
            $schedule->onSuccess(function() use (&$calls) { $calls[] = 'onSuccess'; });
162
            $schedule->onFailure(function() use (&$calls) { $calls[] = 'onFailure'; });
163
        })->addTask(MockTask::success())->run();
164
165
        $this->assertSame([
166
            'filter',
167
            'before',
168
            'after',
169
            'then',
170
            'onSuccess',
171
        ], $calls);
172
    }
173
174
    /**
175
     * @test
176
     */
177
    public function single_failed_task_calls_runs_proper_callbacks()
178
    {
179
        $calls = [];
180
181
        self::createBuilder(function(Schedule $schedule) use (&$calls) {
182
            $schedule->filter(function() use (&$calls) { $calls[] = 'filter'; });
183
            $schedule->before(function() use (&$calls) { $calls[] = 'before'; });
184
            $schedule->after(function() use (&$calls) { $calls[] = 'after'; });
185
            $schedule->then(function() use (&$calls) { $calls[] = 'then'; });
186
            $schedule->onSuccess(function() use (&$calls) { $calls[] = 'onSuccess'; });
187
            $schedule->onFailure(function() use (&$calls) { $calls[] = 'onFailure'; });
188
        })->addTask(MockTask::success())->addTask(MockTask::failure())->run();
189
190
        $this->assertSame([
191
            'filter',
192
            'before',
193
            'after',
194
            'then',
195
            'onFailure',
196
        ], $calls);
197
    }
198
199
    private static function createBuilder(callable $builder): MockScheduleBuilder
200
    {
201
        return (new MockScheduleBuilder())
202
            ->addBuilder(new class($builder) implements ScheduleBuilder {
203
                private $builder;
204
205
                public function __construct(callable $builder)
206
                {
207
                    $this->builder = $builder;
208
                }
209
210
                public function buildSchedule(Schedule $schedule): void
211
                {
212
                    ($this->builder)($schedule);
213
                }
214
            })
215
        ;
216
    }
217
}
218