/
ImageShortcodeProviderTest.php
152 lines (126 loc) · 4.69 KB
/
ImageShortcodeProviderTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
<?php
namespace SilverStripe\Assets\Tests\Shortcodes;
use SilverStripe\Assets\File;
use Silverstripe\Assets\Dev\TestAssetStore;
use SilverStripe\Dev\SapphireTest;
use SilverStripe\View\Parsers\ShortcodeParser;
use SilverStripe\Assets\Image;
use SilverStripe\Assets\Shortcodes\ImageShortcodeProvider;
/**
* @skipUpgrade
*/
class ImageShortcodeProviderTest extends SapphireTest
{
protected static $fixture_file = '../ImageTest.yml';
public function setUp()
{
parent::setUp();
// Set backend root to /ImageTest
TestAssetStore::activate('ImageTest');
// Copy test images for each of the fixture references
$images = Image::get();
/** @var Image $image */
foreach ($images as $image) {
$sourcePath = __DIR__ . '/../ImageTest/' . $image->Name;
$image->setFromLocalFile($sourcePath, $image->Filename);
}
}
public function tearDown()
{
TestAssetStore::reset();
parent::tearDown();
}
public function testShortcodeHandlerDoesNotFallBackToFileProperties()
{
$image = $this->objFromFixture(Image::class, 'imageWithTitle');
$parser = new ShortcodeParser();
$parser->register('image', [ImageShortcodeProvider::class, 'handle_shortcode']);
$this->assertEquals(
sprintf(
'<img src="%s" alt="">',
$image->Link()
),
$parser->parse(sprintf('[image id=%d]', $image->ID))
);
}
public function testShortcodeHandlerUsesShortcodeProperties()
{
$image = $this->objFromFixture(Image::class, 'imageWithTitle');
$parser = new ShortcodeParser();
$parser->register('image', [ImageShortcodeProvider::class, 'handle_shortcode']);
$this->assertEquals(
sprintf(
'<img src="%s" alt="Alt content" title="Title content">',
$image->Link()
),
$parser->parse(sprintf(
'[image id="%d" alt="Alt content" title="Title content"]',
$image->ID
))
);
}
public function testShortcodeHandlerAddsDefaultAttributes()
{
$image = $this->objFromFixture(Image::class, 'imageWithoutTitle');
$parser = new ShortcodeParser();
$parser->register('image', [ImageShortcodeProvider::class, 'handle_shortcode']);
$this->assertEquals(
sprintf(
'<img src="%s" alt="">',
$image->Link()
),
$parser->parse(sprintf(
'[image id="%d"]',
$image->ID
))
);
}
public function testShortcodeHandlerDoesNotResampleToNonIntegerImagesSizes()
{
$image = $this->objFromFixture(Image::class, 'imageWithoutTitle');
$parser = new ShortcodeParser();
$parser->register('image', [ImageShortcodeProvider::class, 'handle_shortcode']);
$this->assertEquals(
sprintf(
'<img src="%s" alt="" width="50%%" height="auto">',
$image->Link()
),
$parser->parse(sprintf(
'[image id="%d" alt="" width="50%%" height="auto"]',
$image->ID
))
);
}
public function testShortcodeHandlerFailsGracefully()
{
$parser = new ShortcodeParser();
$parser->register('image', [ImageShortcodeProvider::class, 'handle_shortcode']);
$nonExistentImageID = File::get()->max('ID') + 1;
$expected = '<img alt="Image not found">';
$shortcodes = [
'[image id="' . $nonExistentImageID . '"]',
'[image id="' . $nonExistentImageID . '" alt="my-alt-attr"]',
];
foreach ($shortcodes as $shortcode) {
$actual = $parser->parse($shortcode);
$this->assertEquals($expected, $actual);
}
}
public function testMissingImageDoesNotCache()
{
$parser = new ShortcodeParser();
$parser->register('image', [ImageShortcodeProvider::class, 'handle_shortcode']);
$nonExistentImageID = File::get()->max('ID') + 1;
$shortcode = '[image id="' . $nonExistentImageID . '"]';
// make sure cache is not populated from a previous test
$cache = ImageShortcodeProvider::getCache();
$cache->clear();
$args = ['id' => (string)$nonExistentImageID];
$cacheKey = ImageShortcodeProvider::getCacheKey($args);
// assert that cache is empty before parsing shortcode
$this->assertNull($cache->get($cacheKey));
$parser->parse($shortcode);
// assert that cache is still empty after parsing shortcode
$this->assertNull($cache->get($cacheKey));
}
}