Passed
Pull Request — master (#3)
by Kevin
02:01
created

CronExpressionTest::hashedExpressionProvider()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 20
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 18
c 1
b 0
f 0
dl 0
loc 20
rs 9.6666
cc 1
nc 1
nop 0
1
<?php
2
3
namespace Zenstruck\ScheduleBundle\Tests\Schedule;
4
5
use PHPUnit\Framework\TestCase;
0 ignored issues
show
Bug introduced by
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\CronExpression;
7
8
/**
9
 * @author Kevin Bond <[email protected]>
10
 */
11
final class CronExpressionTest extends TestCase
12
{
13
    /**
14
     * @test
15
     */
16
    public function can_handle_standard_expressions()
17
    {
18
        $expressionA = new CronExpression('0 * * * *', 'my task');
19
        $expressionB = new CronExpression('0 * * * *', 'my task');
20
        $expressionC = new CronExpression('0 * * * *', 'another task');
21
22
        $this->assertFalse($expressionA->isHashed());
23
        $this->assertSame('0 * * * *', $expressionA->getRawValue());
24
        $this->assertSame('0 * * * *', $expressionA->getParsedValue());
25
        $this->assertSame((string) $expressionA, $expressionA->getParsedValue());
26
        $this->assertSame((string) $expressionA, (string) $expressionB);
27
        $this->assertSame((string) $expressionA, (string) $expressionC);
28
    }
29
30
    /**
31
     * @test
32
     * @dataProvider hashedExpressionProvider
33
     */
34
    public function can_handle_hashed_expressions($value, $expected)
35
    {
36
        $expressionA = new CronExpression($value, 'my task');
37
        $expressionB = new CronExpression($value, 'my task');
38
        $expressionC = new CronExpression($value, 'another task');
39
40
        $this->assertTrue($expressionA->isHashed());
41
        $this->assertSame($value, $expressionA->getRawValue());
42
        $this->assertSame((string) $expressionA, $expressionA->getParsedValue());
43
        $this->assertSame((string) $expressionA, (string) $expressionB);
44
        $this->assertNotSame((string) $expressionA, (string) $expressionC);
45
        $this->assertSame($expected, (string) $expressionA);
46
    }
47
48
    public static function hashedExpressionProvider(): array
49
    {
50
        return [
51
            ['H * * * *', '56 * * * *'],
52
            ['H H * * *', '56 20 * * *'],
53
            ['H H H * *', '56 20 1 * *'],
54
            ['H H H H *', '56 20 1 9 *'],
55
            ['H H H H H', '56 20 1 9 0'],
56
            ['H H 1,15 1-11 *', '56 20 1,15 1-11 *'],
57
            ['H H 1,15 * *', '56 20 1,15 * *'],
58
            ['@hourly', '56 * * * *'],
59
            ['@daily', '56 20 * * *'],
60
            ['@weekly', '56 20 * * 0'],
61
            ['@monthly', '56 20 1 * *'],
62
            ['@yearly', '56 20 1 9 *'],
63
            ['@annually', '56 20 1 9 *'],
64
            ['H(1-15) * * * *', '12 * * * *'],
65
            ['H(1-15) * * * H(3-5)', '12 * * * 5'],
66
            ['H(1-15) * H * H(3-5)', '12 * 1 * 5'],
67
            ['@midnight', '56 2 * * *'],
68
        ];
69
    }
70
71
    /**
72
     * @test
73
     * @dataProvider invalidExpressionProvider
74
     */
75
    public function cannot_set_invalid_cron_expression($value)
76
    {
77
        $this->expectException(\InvalidArgumentException::class);
78
        $this->expectExceptionMessage("\"{$value}\" is an invalid cron expression.");
79
80
        new CronExpression($value, 'context');
81
    }
82
83
    public static function invalidExpressionProvider(): array
84
    {
85
        return [
86
            ['* *'],
87
            ['*****'],
88
            ['* * * * * *'],
89
            ['daily'],
90
            ['@ daily'],
91
            ['@everyday'],
92
        ];
93
    }
94
}
95