Passed
Pull Request — master (#28)
by
unknown
03:15
created

SitewideContentReportTest::testSourceRecords()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 17
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 9
nc 1
nop 0
dl 0
loc 17
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace SilverStripe\SiteWideContentReport\Tests;
4
5
use SilverStripe\CMS\Model\SiteTree;
6
use SilverStripe\ORM\DataList;
7
use SilverStripe\SiteWideContentReport\SitewideContentReport;
8
use SilverStripe\Forms\GridField\GridFieldDataColumns;
9
use SilverStripe\Forms\GridField\GridFieldExportButton;
10
use SilverStripe\SiteWideContentReport\Model\SitewideContentTaxonomy;
11
use SilverStripe\Dev\SapphireTest;
12
13
/**
14
 * Class SitewideContentReportTest
15
 * @package SilverStripe\SiteWideContentReport\Tests
16
 */
17
class SitewideContentReportTest extends SapphireTest
18
{
19
    /**
20
     * @var string
21
     */
22
    protected static $fixture_file = 'SitewideContentReportTest.yml';
23
24
    /**
25
     * {@inheritdoc}
26
     */
27
    public function setUp()
28
    {
29
        parent::setUp();
30
31
        foreach (range(1, 5) as $i) {
32
            /** @var SiteTree $page */
33
            $page = $this->objFromFixture('Page', "page{$i}");
34
35
            if ($i <= 3) {
36
                $page->publishRecursive();
37
            }
38
        }
39
    }
40
41
    public function testSourceRecords()
42
    {
43
        $report = SitewideContentReport::create();
44
        $records = $report->sourceRecords();
45
46
        $this->assertEquals(count($records), 2, 'Returns an array with 2 items, one for pages and one for files');
47
        $this->assertArrayHasKey('Pages', $records);
48
        $this->assertArrayHasKey('Files', $records);
49
50
        /** @var DataList $pages */
51
        $pages = $records['Pages'];
52
53
        /** @var DataList $files */
54
        $files = $records['Files'];
55
56
        $this->assertEquals($pages->count(), 5, 'Total number of pages');
57
        $this->assertEquals($files->count(), 1, 'Total number of files');
58
    }
59
60
    public function testGetCMSFields()
61
    {
62
        $report = SitewideContentReport::create();
63
        $fields = $report->getCMSFields();
64
65
        if (class_exists('Subsite')) {
66
            $field = $fields->fieldByName('AllSubsites');
67
            $count = count(array_filter(array_keys($field->getSource()), function ($value) {
68
                return is_int($value);
69
            }));
70
71
            $this->assertEquals(4, $count, '2 subsites plus 2 added options to filter by subsite');
72
        } else {
73
            $this->assertNull($fields->fieldByName('AllSubsites'));
74
        }
75
    }
76
77
    public function testReportFields()
78
    {
79
        $report = SitewideContentReport::create();
80
81
        // Test pages view
82
        $gridField = $report->getReportField('Pages');
83
84
        /* @var $columns GridFieldDataColumns */
85
        $columns = $gridField->getConfig()->getComponentByType(GridFieldDataColumns::class);
86
        $displayed = $columns->getDisplayFields($gridField);
87
88
        $this->assertArrayHasKey('Title', $displayed);
89
        $this->assertArrayHasKey('Created', $displayed);
90
        $this->assertArrayHasKey('LastEdited', $displayed);
91
        $this->assertArrayHasKey('i18n_singular_name', $displayed);
92
        $this->assertArrayHasKey('StageState', $displayed);
93
94
        // Use correct link
95
        $this->assertArrayHasKey('RelativeLink', $displayed);
96
        $this->assertArrayNotHasKey('AbsoluteLink', $displayed);
97
98
        if (class_exists('Subsite')) {
99
            $this->assertArrayHasKey('SubsiteName', $displayed);
100
        } else {
101
            $this->assertArrayNotHasKey('SubsiteName', $displayed);
102
        }
103
104
        // Export-only fields are not in display list
105
        $this->assertArrayNotHasKey('Terms', $displayed);
106
        $this->assertArrayNotHasKey('OwnerNames', $displayed);
107
        $this->assertArrayNotHasKey('ReviewDate', $displayed);
108
        $this->assertArrayNotHasKey('MetaDescription', $displayed);
109
110
        // Tests print / export field
111
        /* @var $export GridFieldExportButton */
112
        $export = $gridField->getConfig()->getComponentByType(GridFieldExportButton::class);
113
        $exported = $export->getExportColumns();
114
115
        // Make sure all shared columns are in this report
116
        $this->assertArrayHasKey('Title', $exported);
117
        $this->assertArrayHasKey('Created', $exported);
118
        $this->assertArrayHasKey('LastEdited', $exported);
119
        $this->assertArrayHasKey('i18n_singular_name', $exported);
120
        $this->assertArrayHasKey('StageState', $exported);
121
122
        // Export-only fields
123
        $this->assertArrayHasKey('MetaDescription', $exported);
124
125
        // Use correct link
126
        $this->assertArrayHasKey('AbsoluteLink', $exported);
127
        $this->assertArrayNotHasKey('RelativeLink', $exported);
128
129
        if (class_exists('Subsite')) {
130
            $this->assertArrayHasKey('SubsiteName', $exported);
131
        } else {
132
            $this->assertArrayNotHasKey('SubsiteName', $exported);
133
        }
134
135
        if (SitewideContentTaxonomy::enabled()) {
136
            $this->assertArrayHasKey('Terms', $exported);
137
        } else {
138
            $this->assertArrayNotHasKey('Terms', $exported);
139
        }
140
141
        if (class_exists('SiteTreeContentReview')) {
142
            $this->assertArrayHasKey('OwnerNames', $exported);
143
            $this->assertArrayHasKey('ReviewDate', $exported);
144
        } else {
145
            $this->assertArrayNotHasKey('OwnerNames', $exported);
146
            $this->assertArrayNotHasKey('ReviewDate', $exported);
147
        }
148
    }
149
}
150