Completed
Push — master ( 2fdc96...4f1f24 )
by Damian
12:09
created

AssetManipulationListTest::countItems()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 2

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 3
rs 10
cc 1
eloc 2
nc 1
nop 1
1
<?php
2
use SilverStripe\Filesystem\AssetManipulationList;
3
4
/**
5
 * Tests set manipulations of groups of assets of differing visibilities
6
 */
7
class AssetManipulationListTest extends SapphireTest {
8
9
    public function testVisibility() {
10
        $set = new AssetManipulationList();
11
        $file1 = ['Filename' => 'Test1.jpg', 'Hash' => '975677589962604d9e16b700cf84734f9dda2817'];
12
        $file2 = ['Filename' => 'Test2.jpg', 'Hash' => '22af86a45ea56287437a12cf83aded5c077a5db5'];
13
        $file3 = ['Filename' => 'DupeHash1.jpg', 'Hash' => 'f167433dd318e738281b845a07d7be2053b8c997'];
14
        $file4 = ['Filename' => 'DupeName.jpg', 'Hash' => 'afde6577a034323959b7915f41ac8d1f53bc597f'];
15
        $file5 = ['Filename' => 'DupeName.jpg', 'Hash' => '1e94b066e5aa16907d0e5e32556c7a2a0b692eb9'];
16
        $file6 = ['Filename' => 'DupeHash2.jpg', 'Hash' => 'f167433dd318e738281b845a07d7be2053b8c997'];
17
18
        // Non-overlapping assets remain in assigned sets
19
        $this->assertTrue($set->addDeletedAsset($file1));
20
        $this->assertTrue($set->addDeletedAsset($file2));
21
        $this->assertTrue($set->addProtectedAsset($file3));
22
        $this->assertTrue($set->addProtectedAsset($file4));
23
        $this->assertTrue($set->addPublicAsset($file5));
24
        $this->assertTrue($set->addPublicAsset($file6));
25
26
        // Check initial state of list
27
        $this->assertEquals(6, $this->countItems($set));
28
        $this->assertContains($file1, $set->getDeletedAssets());
29
        $this->assertContains($file2, $set->getDeletedAssets());
30
        $this->assertContains($file3, $set->getProtectedAssets());
31
        $this->assertContains($file4, $set->getProtectedAssets());
32
        $this->assertContains($file5, $set->getPublicAssets());
33
        $this->assertContains($file6, $set->getPublicAssets());
34
35
        // Public or Protected assets will not be deleted
36
        $this->assertFalse($set->addDeletedAsset($file3));
37
        $this->assertFalse($set->addDeletedAsset($file4));
38
        $this->assertFalse($set->addDeletedAsset($file5));
39
        $this->assertFalse($set->addDeletedAsset($file6));
40
        $this->assertEquals(6, $this->countItems($set));
41
        $this->assertNotContains($file3, $set->getDeletedAssets());
42
        $this->assertNotContains($file4, $set->getDeletedAssets());
43
        $this->assertNotContains($file5, $set->getDeletedAssets());
44
        $this->assertNotContains($file6, $set->getDeletedAssets());
45
46
        // Adding records as protected will remove them from the deletion list, but
47
        // not the public list
48
        $this->assertTrue($set->addProtectedAsset($file1));
49
        $this->assertFalse($set->addProtectedAsset($file5));
50
        $this->assertEquals(6, $this->countItems($set));
51
        $this->assertNotContains($file1, $set->getDeletedAssets());
52
        $this->assertContains($file1, $set->getProtectedAssets());
53
        $this->assertNotContains($file5, $set->getProtectedAssets());
54
        $this->assertContains($file5, $set->getPublicAssets());
55
56
        // Adding records as public will ensure they are not deleted or marked as protected
57
        // Existing public assets won't be re-added
58
        $this->assertTrue($set->addPublicAsset($file2));
59
        $this->assertTrue($set->addPublicAsset($file4));
60
        $this->assertFalse($set->addPublicAsset($file5));
61
        $this->assertEquals(6, $this->countItems($set));
62
        $this->assertNotContains($file2, $set->getDeletedAssets());
63
        $this->assertNotContains($file2, $set->getProtectedAssets());
64
        $this->assertContains($file2, $set->getPublicAssets());
65
        $this->assertNotContains($file4, $set->getProtectedAssets());
66
        $this->assertContains($file4, $set->getPublicAssets());
67
        $this->assertContains($file5, $set->getPublicAssets());
68
    }
69
70
    /**
71
     * Helper to count all items in a set
72
     *
73
     * @param AssetManipulationList $set
74
     * @return int
75
     */
76
    protected function countItems(AssetManipulationList $set) {
77
        return count($set->getPublicAssets()) + count($set->getProtectedAssets()) + count($set->getDeletedAssets());
78
    }
79
}
80