Completed
Push — master ( 1049b7...e6ae53 )
by Damian
09:20
created

testFolderWithDefaultPrefix()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 7
nc 1
nop 0
dl 0
loc 13
rs 9.4285
c 1
b 0
f 0
1
<?php
2
3
namespace SilverStripe\Assets\Tests\Storage;
4
5
use SilverStripe\Assets\Storage\DefaultAssetNameGenerator;
6
use SilverStripe\Core\Config\Config;
7
use SilverStripe\Dev\SapphireTest;
8
9
/**
10
 * covers {@see DefaultAssetNameGenerator}
11
 */
12
class DefaultAssetNameGeneratorTest extends SapphireTest
13
{
14
15
    /**
16
     * Test non-prefix behaviour
17
     */
18
    public function testWithoutPrefix()
19
    {
20
        Config::inst()->update(DefaultAssetNameGenerator::class, 'version_prefix', '');
21
        $generator = new DefaultAssetNameGenerator('folder/MyFile-001.jpg');
22
        $suggestions = iterator_to_array($generator);
23
24
        // Expect 100 suggestions
25
        $this->assertEquals(100, count($suggestions));
26
27
        // First item is always the same as input
28
        $this->assertEquals('folder/MyFile-001.jpg', $suggestions[0]);
29
30
        // Check that padding is respected
31
        $this->assertEquals('folder/MyFile-002.jpg', $suggestions[1]);
32
        $this->assertEquals('folder/MyFile-003.jpg', $suggestions[2]);
33
        $this->assertEquals('folder/MyFile-004.jpg', $suggestions[3]);
34
        $this->assertEquals('folder/MyFile-021.jpg', $suggestions[20]);
35
        $this->assertEquals('folder/MyFile-099.jpg', $suggestions[98]);
36
37
        // Last item should be some semi-random string, not in the same numeric sequence
38
        $this->assertNotEquals('folder/MyFile-0100.jpg', $suggestions[99]);
39
        $this->assertNotEquals('folder/MyFile-100.jpg', $suggestions[99]);
40
41
        // Test with a value starting above 1
42
        $generator = new DefaultAssetNameGenerator('folder/MyFile-024.jpg');
43
        $suggestions = iterator_to_array($generator);
44
        $this->assertEquals(100, count($suggestions));
45
        $this->assertEquals('folder/MyFile-024.jpg', $suggestions[0]);
46
        $this->assertEquals('folder/MyFile-025.jpg', $suggestions[1]);
47
        $this->assertEquals('folder/MyFile-026.jpg', $suggestions[2]);
48
        $this->assertEquals('folder/MyFile-048.jpg', $suggestions[24]);
49
        $this->assertEquals('folder/MyFile-122.jpg', $suggestions[98]);
50
        $this->assertNotEquals('folder/MyFile-0123.jpg', $suggestions[99]);
51
        $this->assertNotEquals('folder/MyFile-123.jpg', $suggestions[99]); // Last suggestion is semi-random
52
53
        // Test without numeric value
54
        $generator = new DefaultAssetNameGenerator('folder/MyFile.jpg');
55
        $suggestions = iterator_to_array($generator);
56
        $this->assertEquals(100, count($suggestions));
57
        $this->assertEquals('folder/MyFile.jpg', $suggestions[0]);
58
        $this->assertEquals('folder/MyFile2.jpg', $suggestions[1]);
59
        $this->assertEquals('folder/MyFile3.jpg', $suggestions[2]);
60
        $this->assertEquals('folder/MyFile25.jpg', $suggestions[24]);
61
        $this->assertEquals('folder/MyFile99.jpg', $suggestions[98]);
62
        $this->assertNotEquals('folder/MyFile100.jpg', $suggestions[99]); // Last suggestion is semi-random
63
    }
64
65
    /**
66
     * Test with default -v prefix
67
     */
68
    public function testWithDefaultPrefix()
69
    {
70
        Config::inst()->update(DefaultAssetNameGenerator::class, 'version_prefix', '-v');
71
72
        // Test with item that doesn't contain the prefix
73
        $generator = new DefaultAssetNameGenerator('folder/MyFile-001.jpg');
74
        $suggestions = iterator_to_array($generator);
75
        $this->assertEquals(100, count($suggestions));
76
        $this->assertEquals('folder/MyFile-001.jpg', $suggestions[0]);
77
        $this->assertEquals('folder/MyFile-001-v2.jpg', $suggestions[1]);
78
        $this->assertEquals('folder/MyFile-001-v4.jpg', $suggestions[3]);
79
        $this->assertEquals('folder/MyFile-001-v21.jpg', $suggestions[20]);
80
        $this->assertEquals('folder/MyFile-001-v99.jpg', $suggestions[98]);
81
        $this->assertNotEquals('folder/MyFile-001-v100.jpg', $suggestions[99]); // Last suggestion is semi-random
82
83
84
        // Test with item that contains prefix
85
        $generator = new DefaultAssetNameGenerator('folder/MyFile-v24.jpg');
86
        $suggestions = iterator_to_array($generator);
87
        $this->assertEquals(100, count($suggestions));
88
        $this->assertEquals('folder/MyFile-v24.jpg', $suggestions[0]);
89
        $this->assertEquals('folder/MyFile-v25.jpg', $suggestions[1]);
90
        $this->assertEquals('folder/MyFile-v26.jpg', $suggestions[2]);
91
        $this->assertEquals('folder/MyFile-v48.jpg', $suggestions[24]);
92
        $this->assertEquals('folder/MyFile-v122.jpg', $suggestions[98]);
93
        $this->assertNotEquals('folder/MyFile-v123.jpg', $suggestions[99]);
94
        $this->assertNotEquals('folder/MyFile-123.jpg', $suggestions[99]);
95
96
        // Test without numeric value
97
        $generator = new DefaultAssetNameGenerator('folder/MyFile.jpg');
98
        $suggestions = iterator_to_array($generator);
99
        $this->assertEquals(100, count($suggestions));
100
        $this->assertEquals('folder/MyFile.jpg', $suggestions[0]);
101
        $this->assertEquals('folder/MyFile-v2.jpg', $suggestions[1]);
102
        $this->assertEquals('folder/MyFile-v3.jpg', $suggestions[2]);
103
        $this->assertEquals('folder/MyFile-v25.jpg', $suggestions[24]);
104
        $this->assertEquals('folder/MyFile-v99.jpg', $suggestions[98]);
105
        $this->assertNotEquals('folder/MyFile-v100.jpg', $suggestions[99]);
106
    }
107
108
    public function testFolderWithoutDefaultPrefix()
109
    {
110
        Config::inst()->update(DefaultAssetNameGenerator::class, 'version_prefix', '');
111
        $generator = new DefaultAssetNameGenerator('folder/subfolder');
112
        $suggestions = iterator_to_array($generator);
113
114
        // Expect 100 suggestions
115
        $this->assertEquals(100, count($suggestions));
116
117
        // First item is always the same as input
118
        $this->assertEquals('folder/subfolder', $suggestions[0]);
119
        $this->assertEquals('folder/subfolder2', $suggestions[1]);
120
    }
121
122
    public function testFolderWithDefaultPrefix()
123
    {
124
        Config::inst()->update(DefaultAssetNameGenerator::class, 'version_prefix', '-v');
125
        $generator = new DefaultAssetNameGenerator('folder/subfolder');
126
        $suggestions = iterator_to_array($generator);
127
128
        // Expect 100 suggestions
129
        $this->assertEquals(100, count($suggestions));
130
131
        // First item is always the same as input
132
        $this->assertEquals('folder/subfolder', $suggestions[0]);
133
        $this->assertEquals('folder/subfolder-v2', $suggestions[1]);
134
    }
135
}
136