From a96d1964152f30aa9c450fc3199c4062d13e44d5 Mon Sep 17 00:00:00 2001 From: Alex Pott <alex.a.pott@googlemail.com> Date: Mon, 6 Mar 2017 14:56:45 +0000 Subject: [PATCH] Issue #2852242 by Jo Fitzgerald: Merge the two files testing the file_copy process plugin --- .../tests/src/Kernel/process/CopyFileTest.php | 218 ------------------ .../tests/src/Kernel/process/FileCopyTest.php | 26 +++ 2 files changed, 26 insertions(+), 218 deletions(-) delete mode 100644 core/modules/migrate/tests/src/Kernel/process/CopyFileTest.php diff --git a/core/modules/migrate/tests/src/Kernel/process/CopyFileTest.php b/core/modules/migrate/tests/src/Kernel/process/CopyFileTest.php deleted file mode 100644 index ecd1bb14d455..000000000000 --- a/core/modules/migrate/tests/src/Kernel/process/CopyFileTest.php +++ /dev/null @@ -1,218 +0,0 @@ -<?php - -namespace Drupal\Tests\migrate\Kernel\process; - -use Drupal\Core\StreamWrapper\StreamWrapperInterface; -use Drupal\KernelTests\KernelTestBase; -use Drupal\migrate\MigrateExecutableInterface; -use Drupal\migrate\Plugin\migrate\process\FileCopy; -use Drupal\migrate\Row; - -/** - * Tests the copy_file process plugin. - * - * @group migrate - */ -class CopyFileTest extends KernelTestBase { - - /** - * {@inheritdoc} - */ - public static $modules = ['migrate', 'system']; - - /** - * The file system service. - * - * @var \Drupal\Core\File\FileSystemInterface - */ - protected $fileSystem; - - /** - * {@inheritdoc} - */ - protected function setUp() { - parent::setUp(); - $this->fileSystem = $this->container->get('file_system'); - $this->container->get('stream_wrapper_manager')->registerWrapper('temporary', 'Drupal\Core\StreamWrapper\TemporaryStream', StreamWrapperInterface::LOCAL_NORMAL); - } - - /** - * Test successful imports/copies. - */ - public function testSuccessfulCopies() { - $file = $this->createUri(NULL, NULL, 'temporary'); - $file_absolute = $this->fileSystem->realpath($file); - $data_sets = [ - // Test a local to local copy. - [ - $this->root . '/core/modules/simpletest/files/image-test.jpg', - 'public://file1.jpg' - ], - // Test a temporary file using an absolute path. - [ - $file_absolute, - 'temporary://test.jpg' - ], - // Test a temporary file using a relative path. - [ - $file_absolute, - 'temporary://core/modules/simpletest/files/test.jpg' - ], - ]; - foreach ($data_sets as $data) { - list($source_path, $destination_path) = $data; - $actual_destination = $this->doImport($source_path, $destination_path); - $message = sprintf('File %s exists', $destination_path); - $this->assertFileExists($destination_path, $message); - // Make sure we didn't accidentally do a move. - $this->assertFileExists($source_path, $message); - $this->assertSame($actual_destination, $destination_path, 'The import returned the copied filename.'); - } - } - - /** - * Test successful file reuse. - */ - public function testSuccessfulReuse() { - $source_path = $this->root . '/core/modules/simpletest/files/image-test.jpg'; - $destination_path = 'public://file1.jpg'; - $file_reuse = file_unmanaged_copy($source_path, $destination_path); - $timestamp = (new \SplFileInfo($file_reuse))->getMTime(); - $this->assertInternalType('int', $timestamp); - - // We need to make sure the modified timestamp on the file is sooner than - // the attempted migration. - sleep(1); - $configuration = ['reuse' => TRUE]; - $this->doImport($source_path, $destination_path, $configuration); - clearstatcache(TRUE, $destination_path); - $modified_timestamp = (new \SplFileInfo($destination_path))->getMTime(); - $this->assertEquals($timestamp, $modified_timestamp); - - $configuration = ['reuse' => FALSE]; - $this->doImport($source_path, $destination_path, $configuration); - clearstatcache(TRUE, $destination_path); - $modified_timestamp = (new \SplFileInfo($destination_path))->getMTime(); - $this->assertGreaterThan($timestamp, $modified_timestamp); - } - - /** - * Test successful moves. - */ - public function testSuccessfulMoves() { - $file_1 = $this->createUri(NULL, NULL, 'temporary'); - $file_1_absolute = $this->fileSystem->realpath($file_1); - $file_2 = $this->createUri(NULL, NULL, 'temporary'); - $file_2_absolute = $this->fileSystem->realpath($file_2); - $local_file = $this->createUri(NULL, NULL, 'public'); - $data_sets = [ - // Test a local to local copy. - [ - $local_file, - 'public://file1.jpg' - ], - // Test a temporary file using an absolute path. - [ - $file_1_absolute, - 'temporary://test.jpg' - ], - // Test a temporary file using a relative path. - [ - $file_2_absolute, - 'temporary://core/modules/simpletest/files/test.jpg' - ], - ]; - foreach ($data_sets as $data) { - list($source_path, $destination_path) = $data; - $actual_destination = $this->doImport($source_path, $destination_path, ['move' => TRUE]); - $message = sprintf('File %s exists', $destination_path); - $this->assertFileExists($destination_path, $message); - $message = sprintf('File %s does not exist', $source_path); - $this->assertFileNotExists($source_path, $message); - $this->assertSame($actual_destination, $destination_path, 'The importer returned the moved filename.'); - } - } - - /** - * Test that non-existent files throw an exception. - * - * @expectedException \Drupal\migrate\MigrateException - * - * @expectedExceptionMessage File '/non/existent/file' does not exist - */ - public function testNonExistentSourceFile() { - $source = '/non/existent/file'; - $this->doImport($source, 'public://wontmatter.jpg'); - } - - /** - * Test the 'rename' overwrite mode. - */ - public function testRenameFile() { - $source = $this->createUri(NULL, NULL, 'temporary'); - $destination = $this->createUri('foo.txt', NULL, 'public'); - $expected_destination = 'public://foo_0.txt'; - $actual_destination = $this->doImport($source, $destination, ['rename' => TRUE]); - $this->assertFileExists($expected_destination, 'File was renamed on import'); - $this->assertSame($actual_destination, $expected_destination, 'The importer returned the renamed filename.'); - } - - /** - * Do an import using the destination. - * - * @param string $source_path - * Source path to copy from. - * @param string $destination_path - * The destination path to copy to. - * @param array $configuration - * Process plugin configuration settings. - * - * @throws \Drupal\migrate\MigrateException - */ - protected function doImport($source_path, $destination_path, $configuration = []) { - $plugin = FileCopy::create($this->container, $configuration, 'file_copy', []); - $executable = $this->prophesize(MigrateExecutableInterface::class)->reveal(); - $row = new Row(); - - $result = $plugin->transform([$source_path, $destination_path], $executable, $row, 'foobaz'); - - // Return the imported file Uri. - return $result; - } - - /** - * Create a file and return the URI of it. - * - * @param $filepath - * Optional string specifying the file path. If none is provided then a - * randomly named file will be created in the site's files directory. - * @param $contents - * Optional contents to save into the file. If a NULL value is provided an - * arbitrary string will be used. - * @param $scheme - * Optional string indicating the stream scheme to use. Drupal core includes - * public, private, and temporary. The public wrapper is the default. - * @return - * File URI. - */ - protected function createUri($filepath = NULL, $contents = NULL, $scheme = NULL) { - if (!isset($filepath)) { - // Prefix with non-latin characters to ensure that all file-related - // tests work with international filenames. - $filepath = 'Файл Ð´Ð»Ñ Ñ‚ÐµÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ' . $this->randomMachineName(); - } - if (empty($scheme)) { - $scheme = file_default_scheme(); - } - $filepath = $scheme . '://' . $filepath; - - if (empty($contents)) { - $contents = "file_put_contents() doesn't seem to appreciate empty strings so let's put in some data."; - } - - file_put_contents($filepath, $contents); - $this->assertFileExists($filepath, t('The test file exists on the disk.')); - return $filepath; - } - -} diff --git a/core/modules/migrate/tests/src/Kernel/process/FileCopyTest.php b/core/modules/migrate/tests/src/Kernel/process/FileCopyTest.php index 451d832c3f0f..571ec3666f3c 100644 --- a/core/modules/migrate/tests/src/Kernel/process/FileCopyTest.php +++ b/core/modules/migrate/tests/src/Kernel/process/FileCopyTest.php @@ -74,6 +74,32 @@ public function testSuccessfulCopies() { } } + /** + * Test successful file reuse. + */ + public function testSuccessfulReuse() { + $source_path = $this->root . '/core/modules/simpletest/files/image-test.jpg'; + $destination_path = 'public://file1.jpg'; + $file_reuse = file_unmanaged_copy($source_path, $destination_path); + $timestamp = (new \SplFileInfo($file_reuse))->getMTime(); + $this->assertInternalType('int', $timestamp); + + // We need to make sure the modified timestamp on the file is sooner than + // the attempted migration. + sleep(1); + $configuration = ['reuse' => TRUE]; + $this->doTransform($source_path, $destination_path, $configuration); + clearstatcache(TRUE, $destination_path); + $modified_timestamp = (new \SplFileInfo($destination_path))->getMTime(); + $this->assertEquals($timestamp, $modified_timestamp); + + $configuration = ['reuse' => FALSE]; + $this->doTransform($source_path, $destination_path, $configuration); + clearstatcache(TRUE, $destination_path); + $modified_timestamp = (new \SplFileInfo($destination_path))->getMTime(); + $this->assertGreaterThan($timestamp, $modified_timestamp); + } + /** * Test successful moves. */ -- GitLab