Passed
Push — master ( fd6eda...7847da )
by Sam
01:40
created

AbstractFileCheckTest::runProvider()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 37
Code Lines 26

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 26
nc 1
nop 0
dl 0
loc 37
rs 8.8571
c 0
b 0
f 0
1
<?php
2
3
namespace SilverStripe\ModuleRatings\Tests\Check;
4
5
use PHPUnit\Framework\TestCase;
6
use SilverStripe\ModuleRatings\Check\ContributingFileCheck;
7
use SilverStripe\ModuleRatings\Check\EditorConfigFileCheck;
8
use SilverStripe\ModuleRatings\Check\GitAttributesFileCheck;
9
use SilverStripe\ModuleRatings\Check\LicenseCheck;
10
use SilverStripe\ModuleRatings\Check\ReadmeCheck;
11
use SilverStripe\ModuleRatings\CheckSuite;
12
use Symfony\Component\Finder\Finder;
13
14
/**
15
 * This test covers the same logic used in all file based checks
16
 */
17
class AbstractFileCheckTest extends TestCase
18
{
19
    /**
20
     * @param string $cleckClass
21
     * @param array $filenames
22
     * @param bool $expected
23
     * @dataProvider runProvider
24
     */
25
    public function testRun($checkClass, $filenames, $expected)
26
    {
27
        // Set up the Finder mock
28
        $finder = $this->getMockBuilder(Finder::class)
29
            ->setMethods(['files', 'in', 'name'])
30
            ->getMock();
31
32
        $finder->expects($this->once())->method('files')->will($this->returnSelf());
33
        $finder->expects($this->once())->method('in')->will($this->returnSelf());
34
        $finder->expects($this->once())->method('name')->willReturn($filenames);
35
36
        $check = new $checkClass();
37
        $check->setSuite(new CheckSuite());
38
        $check->setFinder($finder);
39
        $check->run();
40
41
        $this->assertSame($expected, $check->getSuccessful());
42
    }
43
44
    /**
45
     * @return array[]
46
     */
47
    public function runProvider()
48
    {
49
        return [
50
            // License check tests
51
            'markdown license uppercase' => [LicenseCheck::class, ['LICENSE.md'], true],
52
            'markdown license lowercase' => [LicenseCheck::class, ['license.md'], true],
53
            'text license uppercase' => [LicenseCheck::class, ['LICENSE.txt'], true],
54
            'text license lowercase' => [LicenseCheck::class, ['license.txt'], true],
55
            'license uppercase' => [LicenseCheck::class, ['LICENSE'], true],
56
            'license lowercase' => [LicenseCheck::class, ['license'], true],
57
            'no license' => [LicenseCheck::class, [], false],
58
59
            // Contributing check tests
60
            'markdown contributing mixed case' => [ContributingFileCheck::class, ['CoNtrIbUtIng.md'], true],
61
            'markdown contributing lowercase' => [ContributingFileCheck::class, ['contributing.md'], true],
62
            'text contributing uppercase' => [ContributingFileCheck::class, ['CONTRIBUTING.txt'], true],
63
            'text contributing lowercase' => [ContributingFileCheck::class, ['contributing.txt'], true],
64
            'contributing uppercase' => [ContributingFileCheck::class, ['CONTRIBUTING'], true],
65
            'contributing lowercase' => [ContributingFileCheck::class, ['contributing'], true],
66
            'no contributing' => [ContributingFileCheck::class, [], false],
67
68
            // Editorconfig check tests
69
            'editorconfig' => [EditorConfigFileCheck::class, ['.editorconfig'], true],
70
            'no editorconfig' => [EditorConfigFileCheck::class, [], false],
71
72
            // Gitattributes check tests
73
            'gitattributes' => [GitAttributesFileCheck::class, ['.gitattributes'], true],
74
            'no gitattributes' => [GitAttributesFileCheck::class, [], false],
75
76
            // Readme check tests
77
            'markdown readme uppercase' => [ReadmeCheck::class, ['README.md'], true],
78
            'markdown readme lowercase' => [ReadmeCheck::class, ['readme.md'], true],
79
            'text readme uppercase' => [ReadmeCheck::class, ['README.txt'], true],
80
            'text readme lowercase' => [ReadmeCheck::class, ['readme.txt'], true],
81
            'readme uppercase' => [ReadmeCheck::class, ['README'], true],
82
            'readme lowercase' => [ReadmeCheck::class, ['readme'], true],
83
            'no readme' => [ReadmeCheck::class, [], false],
84
        ];
85
    }
86
}
87