Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Tests\image\Kernel;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Core\DependencyInjection\ContainerBuilder;
|
Chris@0
|
6 use Drupal\Core\StreamWrapper\PrivateStream;
|
Chris@0
|
7 use Drupal\Core\StreamWrapper\PublicStream;
|
Chris@0
|
8 use Drupal\file_test\StreamWrapper\DummyReadOnlyStreamWrapper;
|
Chris@0
|
9 use Drupal\file_test\StreamWrapper\DummyRemoteReadOnlyStreamWrapper;
|
Chris@0
|
10 use Drupal\file_test\StreamWrapper\DummyStreamWrapper;
|
Chris@0
|
11 use Drupal\image\Entity\ImageStyle;
|
Chris@0
|
12 use Drupal\KernelTests\KernelTestBase;
|
Chris@0
|
13
|
Chris@0
|
14 /**
|
Chris@0
|
15 * Tests derivative generation with source images using stream wrappers.
|
Chris@0
|
16 *
|
Chris@0
|
17 * @group image
|
Chris@0
|
18 */
|
Chris@0
|
19 class ImageStyleCustomStreamWrappersTest extends KernelTestBase {
|
Chris@0
|
20
|
Chris@0
|
21 /**
|
Chris@0
|
22 * Modules to enable.
|
Chris@0
|
23 *
|
Chris@0
|
24 * @var string[]
|
Chris@0
|
25 */
|
Chris@0
|
26 public static $modules = ['system', 'image'];
|
Chris@0
|
27
|
Chris@0
|
28 /**
|
Chris@0
|
29 * A testing image style entity.
|
Chris@0
|
30 *
|
Chris@0
|
31 * @var \Drupal\image\ImageStyleInterface
|
Chris@0
|
32 */
|
Chris@0
|
33 protected $imageStyle;
|
Chris@0
|
34
|
Chris@0
|
35 /**
|
Chris@0
|
36 * The file system service.
|
Chris@0
|
37 *
|
Chris@0
|
38 * @var \Drupal\Core\File\FileSystemInterface
|
Chris@0
|
39 */
|
Chris@0
|
40 protected $fileSystem;
|
Chris@0
|
41
|
Chris@0
|
42 /**
|
Chris@0
|
43 * {@inheritdoc}
|
Chris@0
|
44 */
|
Chris@0
|
45 protected function setUp() {
|
Chris@0
|
46 parent::setUp();
|
Chris@0
|
47 $this->fileSystem = $this->container->get('file_system');
|
Chris@0
|
48 $this->config('system.file')->set('default_scheme', 'public')->save();
|
Chris@0
|
49 $this->imageStyle = ImageStyle::create(['name' => 'test']);
|
Chris@0
|
50 $this->imageStyle->save();
|
Chris@0
|
51 }
|
Chris@0
|
52
|
Chris@0
|
53 /**
|
Chris@0
|
54 * {@inheritdoc}
|
Chris@0
|
55 */
|
Chris@0
|
56 public function register(ContainerBuilder $container) {
|
Chris@0
|
57 parent::register($container);
|
Chris@0
|
58 foreach ($this->providerTestCustomStreamWrappers() as $stream_wrapper) {
|
Chris@0
|
59 $scheme = $stream_wrapper[0];
|
Chris@0
|
60 $class = $stream_wrapper[2];
|
Chris@0
|
61 $container->register("stream_wrapper.$scheme", $class)
|
Chris@0
|
62 ->addTag('stream_wrapper', ['scheme' => $scheme]);
|
Chris@0
|
63 }
|
Chris@0
|
64 }
|
Chris@0
|
65
|
Chris@0
|
66 /**
|
Chris@0
|
67 * Tests derivative creation with several source on a local writable stream.
|
Chris@0
|
68 *
|
Chris@0
|
69 * @dataProvider providerTestCustomStreamWrappers
|
Chris@0
|
70 *
|
Chris@0
|
71 * @param string $source_scheme
|
Chris@0
|
72 * The source stream wrapper scheme.
|
Chris@0
|
73 * @param string $expected_scheme
|
Chris@0
|
74 * The derivative expected stream wrapper scheme.
|
Chris@0
|
75 */
|
Chris@0
|
76 public function testCustomStreamWrappers($source_scheme, $expected_scheme) {
|
Chris@0
|
77 $derivative_uri = $this->imageStyle->buildUri("$source_scheme://some/path/image.png");
|
Chris@0
|
78 $derivative_scheme = $this->fileSystem->uriScheme($derivative_uri);
|
Chris@0
|
79
|
Chris@0
|
80 // Check that the derivative scheme is the expected scheme.
|
Chris@0
|
81 $this->assertSame($expected_scheme, $derivative_scheme);
|
Chris@0
|
82
|
Chris@0
|
83 // Check that the derivative URI is the expected one.
|
Chris@0
|
84 $expected_uri = "$expected_scheme://styles/{$this->imageStyle->id()}/$source_scheme/some/path/image.png";
|
Chris@0
|
85 $this->assertSame($expected_uri, $derivative_uri);
|
Chris@0
|
86 }
|
Chris@0
|
87
|
Chris@0
|
88 /**
|
Chris@0
|
89 * Provide test cases for testCustomStreamWrappers().
|
Chris@0
|
90 *
|
Chris@0
|
91 * Derivatives created from writable source stream wrappers will inherit the
|
Chris@0
|
92 * scheme from source. Derivatives created from read-only stream wrappers will
|
Chris@0
|
93 * fall-back to the default scheme.
|
Chris@0
|
94 *
|
Chris@0
|
95 * @return array[]
|
Chris@0
|
96 * An array having each element an array with three items:
|
Chris@0
|
97 * - The source stream wrapper scheme.
|
Chris@0
|
98 * - The derivative expected stream wrapper scheme.
|
Chris@0
|
99 * - The stream wrapper service class.
|
Chris@0
|
100 */
|
Chris@0
|
101 public function providerTestCustomStreamWrappers() {
|
Chris@0
|
102 return [
|
Chris@0
|
103 ['public', 'public', PublicStream::class],
|
Chris@0
|
104 ['private', 'private', PrivateStream::class],
|
Chris@0
|
105 ['dummy', 'dummy', DummyStreamWrapper::class],
|
Chris@0
|
106 ['dummy-readonly', 'public', DummyReadOnlyStreamWrapper::class],
|
Chris@0
|
107 ['dummy-remote-readonly', 'public', DummyRemoteReadOnlyStreamWrapper::class],
|
Chris@0
|
108 ];
|
Chris@0
|
109 }
|
Chris@0
|
110
|
Chris@0
|
111 }
|