Chris@0: getMockBuilder('\Drupal\image\ImageEffectManager') Chris@0: ->disableOriginalConstructor() Chris@0: ->getMock(); Chris@0: $effectManager->expects($this->any()) Chris@0: ->method('createInstance') Chris@0: ->with($image_effect_id) Chris@0: ->will($this->returnValue($image_effect)); Chris@0: $default_stubs = [ Chris@0: 'getImageEffectPluginManager', Chris@0: 'fileUriScheme', Chris@0: 'fileUriTarget', Chris@0: 'fileDefaultScheme', Chris@0: ]; Chris@0: $image_style = $this->getMockBuilder('\Drupal\image\Entity\ImageStyle') Chris@0: ->setConstructorArgs([ Chris@0: ['effects' => [$image_effect_id => ['id' => $image_effect_id]]], Chris@0: $this->entityTypeId, Chris@0: ]) Chris@0: ->setMethods(array_merge($default_stubs, $stubs)) Chris@0: ->getMock(); Chris@0: Chris@0: $image_style->expects($this->any()) Chris@0: ->method('getImageEffectPluginManager') Chris@0: ->will($this->returnValue($effectManager)); Chris@0: $image_style->expects($this->any()) Chris@0: ->method('fileUriScheme') Chris@0: ->will($this->returnCallback([$this, 'fileUriScheme'])); Chris@0: $image_style->expects($this->any()) Chris@0: ->method('fileUriTarget') Chris@0: ->will($this->returnCallback([$this, 'fileUriTarget'])); Chris@0: $image_style->expects($this->any()) Chris@0: ->method('fileDefaultScheme') Chris@0: ->will($this->returnCallback([$this, 'fileDefaultScheme'])); Chris@0: Chris@0: return $image_style; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: protected function setUp() { Chris@0: $this->entityTypeId = $this->randomMachineName(); Chris@0: $this->provider = $this->randomMachineName(); Chris@0: $this->entityType = $this->getMock('\Drupal\Core\Entity\EntityTypeInterface'); Chris@0: $this->entityType->expects($this->any()) Chris@0: ->method('getProvider') Chris@0: ->will($this->returnValue($this->provider)); Chris@0: $this->entityManager = $this->getMock('\Drupal\Core\Entity\EntityManagerInterface'); Chris@0: $this->entityManager->expects($this->any()) Chris@0: ->method('getDefinition') Chris@0: ->with($this->entityTypeId) Chris@0: ->will($this->returnValue($this->entityType)); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @covers ::getDerivativeExtension Chris@0: */ Chris@0: public function testGetDerivativeExtension() { Chris@0: $image_effect_id = $this->randomMachineName(); Chris@0: $logger = $this->getMockBuilder('\Psr\Log\LoggerInterface')->getMock(); Chris@0: $image_effect = $this->getMockBuilder('\Drupal\image\ImageEffectBase') Chris@0: ->setConstructorArgs([[], $image_effect_id, [], $logger]) Chris@0: ->getMock(); Chris@0: $image_effect->expects($this->any()) Chris@0: ->method('getDerivativeExtension') Chris@0: ->will($this->returnValue('png')); Chris@0: Chris@0: $image_style = $this->getImageStyleMock($image_effect_id, $image_effect); Chris@0: Chris@0: $extensions = ['jpeg', 'gif', 'png']; Chris@0: foreach ($extensions as $extension) { Chris@0: $extensionReturned = $image_style->getDerivativeExtension($extension); Chris@0: $this->assertEquals($extensionReturned, 'png'); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * @covers ::buildUri Chris@0: */ Chris@0: public function testBuildUri() { Chris@0: // Image style that changes the extension. Chris@0: $image_effect_id = $this->randomMachineName(); Chris@0: $logger = $this->getMockBuilder('\Psr\Log\LoggerInterface')->getMock(); Chris@0: $image_effect = $this->getMockBuilder('\Drupal\image\ImageEffectBase') Chris@0: ->setConstructorArgs([[], $image_effect_id, [], $logger]) Chris@0: ->getMock(); Chris@0: $image_effect->expects($this->any()) Chris@0: ->method('getDerivativeExtension') Chris@0: ->will($this->returnValue('png')); Chris@0: Chris@0: $image_style = $this->getImageStyleMock($image_effect_id, $image_effect); Chris@0: $this->assertEquals($image_style->buildUri('public://test.jpeg'), 'public://styles/' . $image_style->id() . '/public/test.jpeg.png'); Chris@0: Chris@0: // Image style that doesn't change the extension. Chris@0: $image_effect_id = $this->randomMachineName(); Chris@0: $image_effect = $this->getMockBuilder('\Drupal\image\ImageEffectBase') Chris@0: ->setConstructorArgs([[], $image_effect_id, [], $logger]) Chris@0: ->getMock(); Chris@0: $image_effect->expects($this->any()) Chris@0: ->method('getDerivativeExtension') Chris@0: ->will($this->returnArgument(0)); Chris@0: Chris@0: $image_style = $this->getImageStyleMock($image_effect_id, $image_effect); Chris@0: $this->assertEquals($image_style->buildUri('public://test.jpeg'), 'public://styles/' . $image_style->id() . '/public/test.jpeg'); Chris@0: } Chris@0: Chris@0: /** Chris@0: * @covers ::getPathToken Chris@0: */ Chris@0: public function testGetPathToken() { Chris@0: $logger = $this->getMockBuilder('\Psr\Log\LoggerInterface')->getMock(); Chris@0: $private_key = $this->randomMachineName(); Chris@0: $hash_salt = $this->randomMachineName(); Chris@0: Chris@0: // Image style that changes the extension. Chris@0: $image_effect_id = $this->randomMachineName(); Chris@0: $image_effect = $this->getMockBuilder('\Drupal\image\ImageEffectBase') Chris@0: ->setConstructorArgs([[], $image_effect_id, [], $logger]) Chris@0: ->getMock(); Chris@0: $image_effect->expects($this->any()) Chris@0: ->method('getDerivativeExtension') Chris@0: ->will($this->returnValue('png')); Chris@0: Chris@0: $image_style = $this->getImageStyleMock($image_effect_id, $image_effect, ['getPrivateKey', 'getHashSalt']); Chris@0: $image_style->expects($this->any()) Chris@0: ->method('getPrivateKey') Chris@0: ->will($this->returnValue($private_key)); Chris@0: $image_style->expects($this->any()) Chris@0: ->method('getHashSalt') Chris@0: ->will($this->returnValue($hash_salt)); Chris@0: Chris@0: // Assert the extension has been added to the URI before creating the token. Chris@0: $this->assertEquals($image_style->getPathToken('public://test.jpeg.png'), $image_style->getPathToken('public://test.jpeg')); Chris@0: $this->assertEquals(substr(Crypt::hmacBase64($image_style->id() . ':' . 'public://test.jpeg.png', $private_key . $hash_salt), 0, 8), $image_style->getPathToken('public://test.jpeg')); Chris@0: $this->assertNotEquals(substr(Crypt::hmacBase64($image_style->id() . ':' . 'public://test.jpeg', $private_key . $hash_salt), 0, 8), $image_style->getPathToken('public://test.jpeg')); Chris@0: Chris@0: // Image style that doesn't change the extension. Chris@0: $image_effect_id = $this->randomMachineName(); Chris@0: $image_effect = $this->getMockBuilder('\Drupal\image\ImageEffectBase') Chris@0: ->setConstructorArgs([[], $image_effect_id, [], $logger]) Chris@0: ->getMock(); Chris@0: $image_effect->expects($this->any()) Chris@0: ->method('getDerivativeExtension') Chris@0: ->will($this->returnArgument(0)); Chris@0: Chris@0: $image_style = $this->getImageStyleMock($image_effect_id, $image_effect, ['getPrivateKey', 'getHashSalt']); Chris@0: $image_style->expects($this->any()) Chris@0: ->method('getPrivateKey') Chris@0: ->will($this->returnValue($private_key)); Chris@0: $image_style->expects($this->any()) Chris@0: ->method('getHashSalt') Chris@0: ->will($this->returnValue($hash_salt)); Chris@0: // Assert no extension has been added to the uri before creating the token. Chris@0: $this->assertNotEquals($image_style->getPathToken('public://test.jpeg.png'), $image_style->getPathToken('public://test.jpeg')); Chris@0: $this->assertNotEquals(substr(Crypt::hmacBase64($image_style->id() . ':' . 'public://test.jpeg.png', $private_key . $hash_salt), 0, 8), $image_style->getPathToken('public://test.jpeg')); Chris@0: $this->assertEquals(substr(Crypt::hmacBase64($image_style->id() . ':' . 'public://test.jpeg', $private_key . $hash_salt), 0, 8), $image_style->getPathToken('public://test.jpeg')); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Mock function for ImageStyle::fileUriScheme(). Chris@0: */ Chris@0: public function fileUriScheme($uri) { Chris@0: if (preg_match('/^([\w\-]+):\/\/|^(data):/', $uri, $matches)) { Chris@0: // The scheme will always be the last element in the matches array. Chris@0: return array_pop($matches); Chris@0: } Chris@0: Chris@0: return FALSE; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Mock function for ImageStyle::fileUriTarget(). Chris@0: */ Chris@0: public function fileUriTarget($uri) { Chris@0: // Remove the scheme from the URI and remove erroneous leading or trailing, Chris@0: // forward-slashes and backslashes. Chris@0: $target = trim(preg_replace('/^[\w\-]+:\/\/|^data:/', '', $uri), '\/'); Chris@0: Chris@0: // If nothing was replaced, the URI doesn't have a valid scheme. Chris@0: return $target !== $uri ? $target : FALSE; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Mock function for ImageStyle::fileDefaultScheme(). Chris@0: */ Chris@0: public function fileDefaultScheme() { Chris@0: return 'public'; Chris@0: } Chris@0: Chris@0: }