installConfig(['image']); } /** * Tests that an exception is thrown when ImageCache is not installed. */ public function testMissingTable() { $this->sourceDatabase->update('system') ->fields([ 'status' => 0, ]) ->condition('name', 'imagecache') ->condition('type', 'module') ->execute(); try { $this->getMigration('d6_imagecache_presets') ->getSourcePlugin() ->checkRequirements(); $this->fail('Did not catch expected RequirementsException.'); } catch (RequirementsException $e) { $this->pass('Caught expected RequirementsException: ' . $e->getMessage()); } } /** * Test basic passing migrations. */ public function testPassingMigration() { $this->executeMigration('d6_imagecache_presets'); /** @var \Drupal\image\Entity\ImageStyle $style */ $style = ImageStyle::load('big_blue_cheese'); // Check basic Style info. $this->assertIdentical('big_blue_cheese', $style->get('name'), 'ImageStyle name set correctly'); $this->assertIdentical('big_blue_cheese', $style->get('label'), 'ImageStyle label set correctly'); // Test effects. $effects = $style->getEffects(); // Check crop effect. $this->assertImageEffect($effects, 'image_crop', [ 'width' => 555, 'height' => 5555, 'anchor' => 'center-center', ]); // Check resize effect. $this->assertImageEffect($effects, 'image_resize', [ 'width' => 55, 'height' => 55, ]); // Check rotate effect. $this->assertImageEffect($effects, 'image_rotate', [ 'degrees' => 55, 'random' => FALSE, 'bgcolor' => '', ]); } /** * Test that missing actions causes failures. */ public function testMissingEffectPlugin() { Database::getConnection('default', 'migrate')->insert("imagecache_action") ->fields([ 'presetid', 'weight', 'module', 'action', 'data', ]) ->values([ 'presetid' => '1', 'weight' => '0', 'module' => 'imagecache', 'action' => 'imagecache_deprecated_scale', 'data' => 'a:3:{s:3:"fit";s:7:"outside";s:5:"width";s:3:"200";s:6:"height";s:3:"200";}', ])->execute(); $this->startCollectingMessages(); $this->executeMigration('d6_imagecache_presets'); $messages = $this->migration->getIdMap()->getMessageIterator(); $count = 0; foreach ($messages as $message) { $count++; $this->assertEqual($message->message, 'The "image_deprecated_scale" plugin does not exist.'); $this->assertEqual($message->level, MigrationInterface::MESSAGE_ERROR); } // There should be only the one message. $this->assertEqual($count, 1); } /** * Test that missing action's causes failures. */ public function testInvalidCropValues() { Database::getConnection('default', 'migrate')->insert("imagecache_action") ->fields([ 'presetid', 'weight', 'module', 'action', 'data', ]) ->values([ 'presetid' => '1', 'weight' => '0', 'module' => 'imagecache', 'action' => 'imagecache_crop', 'data' => serialize([ 'xoffset' => '10', 'yoffset' => '10', ]), ])->execute(); $this->startCollectingMessages(); $this->executeMigration('d6_imagecache_presets'); $this->assertEqual([ 'error' => [ 'The Drupal 8 image crop effect does not support numeric values for x and y offsets. Use keywords to set crop effect offsets instead.', ], ], $this->migrateMessages); } /** * Assert that a given image effect is migrated. * * @param array $collection * Collection of effects * @param $id * Id that should exist in the collection. * @param $config * Expected configuration for the collection. * * @return bool */ protected function assertImageEffect($collection, $id, $config) { /** @var \Drupal\image\ConfigurableImageEffectBase $effect */ foreach ($collection as $key => $effect) { $effect_config = $effect->getConfiguration(); if ($effect_config['id'] == $id && $effect_config['data'] == $config) { // We found this effect so succeed and return. return $this->pass('Effect ' . $id . ' imported correctly'); } } // The loop did not find the effect so we it was not imported correctly. return $this->fail('Effect ' . $id . ' did not import correctly'); } }