Issues (91)

Schedule/Extension/TaskCallbackHandlerTest.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\ScheduleRunContext;
7
use Zenstruck\ScheduleBundle\Schedule\Task;
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 TaskCallbackHandlerTest extends TestCase
15
{
16
    /**
17
     * @test
18
     */
19
    public function false_when_filter_skips_task()
20
    {
21
        $task = MockTask::success()->when('boolean value', false);
22
23
        $context = self::createRunContext($task);
24
25
        $this->assertTrue($context->hasRun());
26
        $this->assertCount(0, $context->getRun());
27
        $this->assertCount(1, $skipped = $context->getSkipped());
28
        $this->assertSame('boolean value', $skipped[0]->getDescription());
29
    }
30
31
    /**
32
     * @test
33
     */
34
    public function callback_returning_false_when_filter_skips_task()
35
    {
36
        $task = MockTask::success()->when('callback value', function() { return false; });
37
38
        $context = self::createRunContext($task);
39
40
        $this->assertTrue($context->hasRun());
41
        $this->assertCount(0, $context->getRun());
42
        $this->assertCount(1, $skipped = $context->getSkipped());
43
        $this->assertSame('callback value', $skipped[0]->getDescription());
44
    }
45
46
    /**
47
     * @test
48
     */
49
    public function true_when_filter_allows_task_to_run()
50
    {
51
        $task = MockTask::success()->when('boolean value', true);
52
53
        $context = self::createRunContext($task);
54
55
        $this->assertTrue($context->hasRun());
56
        $this->assertCount(1, $context->getRun());
57
        $this->assertCount(0, $context->getSkipped());
58
    }
59
60
    /**
61
     * @test
62
     */
63
    public function callback_returning_true_when_filter_allows_task_to_run()
64
    {
65
        $task = MockTask::success()->when('callback value', function() { return true; });
66
67
        $context = self::createRunContext($task);
68
69
        $this->assertTrue($context->hasRun());
70
        $this->assertCount(1, $context->getRun());
71
        $this->assertCount(0, $context->getSkipped());
72
    }
73
74
    /**
75
     * @test
76
     */
77
    public function true_skip_filter_skips_task()
78
    {
79
        $task = MockTask::success()->skip('boolean value', true);
80
81
        $context = self::createRunContext($task);
82
83
        $this->assertTrue($context->hasRun());
84
        $this->assertCount(0, $context->getRun());
85
        $this->assertCount(1, $skipped = $context->getSkipped());
86
        $this->assertSame('boolean value', $skipped[0]->getDescription());
87
    }
88
89
    /**
90
     * @test
91
     */
92
    public function callback_returning_true_skip_filter_skips_task()
93
    {
94
        $task = MockTask::success()->skip('callback value', function() { return true; });
95
96
        $context = self::createRunContext($task);
97
98
        $this->assertTrue($context->hasRun());
99
        $this->assertCount(0, $context->getRun());
100
        $this->assertCount(1, $skipped = $context->getSkipped());
101
        $this->assertSame('callback value', $skipped[0]->getDescription());
102
    }
103
104
    /**
105
     * @test
106
     */
107
    public function false_skip_filter_allows_task_to_run()
108
    {
109
        $task = MockTask::success()->skip('boolean value', false);
110
111
        $context = self::createRunContext($task);
112
113
        $this->assertTrue($context->hasRun());
114
        $this->assertCount(1, $context->getRun());
115
        $this->assertCount(0, $context->getSkipped());
116
    }
117
118
    /**
119
     * @test
120
     */
121
    public function callback_returning_false_skip_filter_allows_task_to_run()
122
    {
123
        $task = MockTask::success()->skip('callback value', function() { return false; });
124
125
        $context = self::createRunContext($task);
126
127
        $this->assertTrue($context->hasRun());
128
        $this->assertCount(1, $context->getRun());
129
        $this->assertCount(0, $context->getSkipped());
130
    }
131
132
    /**
133
     * @test
134
     */
135
    public function successful_task_calls_proper_callback_extensions()
136
    {
137
        $calls = [];
138
        $task = MockTask::success()
139
            ->filter(function() use (&$calls) { $calls[] = 'filter'; })
140
            ->before(function() use (&$calls) { $calls[] = 'before'; })
141
            ->after(function() use (&$calls) { $calls[] = 'after'; })
142
            ->then(function() use (&$calls) { $calls[] = 'then'; })
143
            ->onSuccess(function() use (&$calls) { $calls[] = 'onSuccess'; })
144
            ->onFailure(function() use (&$calls) { $calls[] = 'onFailure'; })
145
        ;
146
147
        self::createRunContext($task);
148
149
        $this->assertSame([
150
            'filter',
151
            'before',
152
            'after',
153
            'then',
154
            'onSuccess',
155
        ], $calls);
156
    }
157
158
    /**
159
     * @test
160
     */
161
    public function failed_task_calls_proper_callback_extensions()
162
    {
163
        $calls = [];
164
        $task = MockTask::failure()
165
            ->filter(function() use (&$calls) { $calls[] = 'filter'; })
166
            ->before(function() use (&$calls) { $calls[] = 'before'; })
167
            ->after(function() use (&$calls) { $calls[] = 'after'; })
168
            ->then(function() use (&$calls) { $calls[] = 'then'; })
169
            ->onSuccess(function() use (&$calls) { $calls[] = 'onSuccess'; })
170
            ->onFailure(function() use (&$calls) { $calls[] = 'onFailure'; })
171
        ;
172
173
        self::createRunContext($task);
174
175
        $this->assertSame([
176
            'filter',
177
            'before',
178
            'after',
179
            'then',
180
            'onFailure',
181
        ], $calls);
182
    }
183
184
    /**
185
     * @test
186
     */
187
    public function skipped_task_calls_proper_callback_extensions()
188
    {
189
        $calls = [];
190
        $task = MockTask::skipped()
191
            ->filter(function() use (&$calls) { $calls[] = 'filter'; })
192
            ->before(function() use (&$calls) { $calls[] = 'before'; })
193
            ->after(function() use (&$calls) { $calls[] = 'after'; })
194
            ->then(function() use (&$calls) { $calls[] = 'then'; })
195
            ->onSuccess(function() use (&$calls) { $calls[] = 'onSuccess'; })
196
            ->onFailure(function() use (&$calls) { $calls[] = 'onFailure'; })
197
        ;
198
199
        self::createRunContext($task);
200
201
        $this->assertSame([
202
            'filter',
203
            'before',
204
            'after',
205
            'then',
206
        ], $calls);
207
    }
208
209
    private static function createRunContext(Task $task): ScheduleRunContext
210
    {
211
        return (new MockScheduleBuilder())
212
            ->addTask($task)
213
            ->run()
214
        ;
215
    }
216
}
217