/** * @test * @group library */ public function copyShouldCopyAsExpected() { $sourceWebsiteId = 'SITE-mf12copy-20da-4ea8-a477-4ee793source-SITE'; $destinationWebsiteId = 'SITE-mf12copy-20da-4ea8-a477-4ee7j3f5dest-SITE'; $this->service->copyMediaFileToNewWebsite($sourceWebsiteId, $destinationWebsiteId); $expectedDestinationDirectory = $this->testMediaFilesDirectory . DIRECTORY_SEPARATOR . $destinationWebsiteId; $assertionMessage = sprintf("Destination directory '%s' has not been created", $expectedDestinationDirectory); $this->assertTrue(is_dir($expectedDestinationDirectory), $assertionMessage); $testFilesDirectory = $this->config->test->files->directory; $expectedCopyTreeFile = $testFilesDirectory . DIRECTORY_SEPARATOR . 'expected_media_copy.tree'; $expectedCopyTree = file_get_contents($expectedCopyTreeFile); $this->assertSame($expectedCopyTree, DirectoryHelper::getRecursiveAsJson($expectedDestinationDirectory, true), "Tree mismatch between copied directory tree and expected directory tree"); DirectoryHelper::removeRecursiv($expectedDestinationDirectory, $this->testMediaFilesDirectory); }
/** * @test * @group library */ public function copyShouldCopyMediaMediafilesAsExpected() { $sourceWebsiteId = 'SITE-mc10e89c-2rtf-46cd-a651-fc42dc7812so-SITE'; $newWebsiteId = 'SITE-mc10e89c-2rtf-46cd-a651-fc42dc7f75de-SITE'; $this->service->copyMediaToNewWebsite($sourceWebsiteId, $newWebsiteId); $medias = $this->service->getByWebsiteIdAndFilter($newWebsiteId); $this->assertTrue(count($medias) === 5); $medias = $this->service->getByWebsiteIdAndFilter($sourceWebsiteId); $this->assertTrue(count($medias) === 5); $config = Registry::getConfig(); $copiedMediaDirectory = $config->media->files->directory . DIRECTORY_SEPARATOR . $newWebsiteId; $this->assertTrue(is_dir($copiedMediaDirectory)); $testFilesDirectory = $config->test->files->directory; $expectedCopyTreeFile = $testFilesDirectory . DIRECTORY_SEPARATOR . 'expected_media_copy_in_aggregating_service.tree'; $expectedCopyTree = file_get_contents($expectedCopyTreeFile); $this->assertSame($expectedCopyTree, DirectoryHelper::getRecursiveAsJson($copiedMediaDirectory, true), "Tree mismatch between copied directory tree and expected directory tree"); DirectoryHelper::removeRecursiv($copiedMediaDirectory, $config->media->files->directory); }
/** * @test * @group integration */ public function exportModulesShouldExportAsExpectedWithSpecifiedName() { $config = Registry::getConfig(); $exportDirectoryName = 'test_export_0_modules'; $exportBaseDirectory = $config->export->directory; $exportDirectory = $exportBaseDirectory . DIRECTORY_SEPARATOR . md5($exportDirectoryName); $exportZipFile = $exportBaseDirectory . DIRECTORY_SEPARATOR . md5($exportDirectoryName) . DIRECTORY_SEPARATOR . md5($exportDirectoryName) . '.' . self::EXPORT_FILE_EXTENSION; $websiteId = 'SITE-ae6e702f-10ac-4e1e-exmo-307e4b8765db-SITE'; $moduleIds = array('"MODUL-0rap5eb8-0df3-47e9-exmo-90ae9d96d3c0-MODUL"', '"MODUL-0rap5eb8-0df3-47e9-exmo-90ae9d96d3c1-MODUL"', '"MODUL-0rap5eb8-0df3-47e9-exmo-90ae9d96d3c2-MODUL"', '"MODUL-0rap5eb8-0df3-47e9-exmo-90ae9d96d3c3-MODUL"'); $requestUri = sprintf('export/modules/params/{"websiteid":"%s","ids":[%s],"name":"%s"}', $websiteId, implode(',', $moduleIds), $exportDirectoryName); $this->dispatch($requestUri); $response = $this->getValidatedSuccessResponse(); $responseData = $response->getData(); $this->assertObjectHasAttribute('url', $responseData); $nameDataPart = sprintf('{"name":"%s"}', $exportDirectoryName); $this->assertStringEndsWith($nameDataPart, $responseData->url); $this->assertTrue(is_dir($exportDirectory)); $this->assertFileExists($exportZipFile); $unzipCommand = sprintf("unzip %s -d %s", $exportZipFile, $exportDirectory); if (strstr($unzipCommand, $exportBaseDirectory)) { SystemHelper::user_proc_exec($unzipCommand); DirectoryHelper::removeRecursiv($exportZipFile, $exportBaseDirectory); } $testFilesDirectory = $config->test->files->directory; $expectedExportTreeFile = $testFilesDirectory . DIRECTORY_SEPARATOR . 'trees' . DIRECTORY_SEPARATOR . 'export' . DIRECTORY_SEPARATOR . 'expected_modules_export.tree'; $expectedExportTree = file_get_contents($expectedExportTreeFile); $exportDirectoryTree = DirectoryHelper::getRecursiveAsJson($exportDirectory, true); $this->assertSame($expectedExportTree, $exportDirectoryTree, "Tree mismatch between export directory tree and expected directory tree"); DirectoryHelper::removeRecursiv($exportDirectory, $exportBaseDirectory); }
/** * @test * @group integration */ public function moduleImportShouldImportAsExpectedAlsoForDeepFolders() { $config = Registry::getConfig(); $testImportDirectory = $config->import->directory; $testFilesDirectory = $config->test->files->directory; $testImportFilename = 'test_modules_export_deep.zip'; $testImportFile = $testFilesDirectory . DIRECTORY_SEPARATOR . 'test_exports' . DIRECTORY_SEPARATOR . $testImportFilename; $expectedImportFile = $testImportDirectory . DIRECTORY_SEPARATOR . $testImportFilename; $importUnzipDirectory = str_replace('.zip', '', $expectedImportFile); $assertionMessage = sprintf("Import file '%s' existiert nicht", $testImportFile); $this->assertFileExists($testImportFile, $assertionMessage); $testImportTmpFile = DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR . 'phpe7f3im'; $fileInputname = 'import'; $alreadyExistingWebsiteId = 'SITE-rs13up2c-exmd-4ea8-a477-4ee79e8e62mo-SITE'; $requestUri = sprintf('/import/file/params/{"websiteid":"%s","fileinputname":"%s"}', $alreadyExistingWebsiteId, $fileInputname); $this->assertFakeUpload($fileInputname, $testImportFile, $testImportTmpFile); $this->dispatch($requestUri); $this->assertHeaderContains('Content-Type', 'text/plain'); $responseBody = $this->getResponseBody(); $this->assertInternalType('string', $responseBody); $this->assertNotNull($responseBody); $response = new Response($responseBody); $this->assertTrue($response->getSuccess(), $responseBody); $expectedNewModulIds = array('MODUL-0c1e62c1-023c-42c7-8628-f2cb4236eb08-MODUL'); $actualNewModulIds = array(); $modules = $this->moduleService->getAll($alreadyExistingWebsiteId); foreach ($modules as $module) { $moduleId = $module->getId(); $actualNewModulIds[] = $moduleId; $expectedImportAssetsTree = file_get_contents(FS::joinPath($testFilesDirectory, 'trees', 'import', 'modules', 'expected_assets_modules_deep', $moduleId . '.tree')); $actualAssetPath = $this->moduleService->getAssetsPath($alreadyExistingWebsiteId, $moduleId); $this->assertEquals($expectedImportAssetsTree, DirectoryHelper::getRecursiveAsJson($actualAssetPath, true), "Tree mismatch between import module (" . $moduleId . ") assets directory tree" . " and expected assets directory tree"); } sort($expectedNewModulIds); sort($actualNewModulIds); $this->assertSame($expectedNewModulIds, $actualNewModulIds); if (strstr($importUnzipDirectory, $testImportDirectory)) { DirectoryHelper::removeRecursiv($importUnzipDirectory, $testImportDirectory); if (is_dir($importUnzipDirectory)) { rmdir($importUnzipDirectory); } if (file_exists($expectedImportFile)) { unlink($expectedImportFile); } } }
/** * @test * @group integration */ public function deleteAlbumShouldAlsoDeleteIncludedMedia() { $albumId = 'ALBUM-ce1ecf0d-acc4-4fdb-dem4-72ebb0878008-ALBUM'; $websiteId = 'SITE-ce6e702f-10ac-4e1e-dem7-307d4b8760al-SITE'; $expectedAlbumCountBeforeDelete = 2; $expectedAlbumCountAfterDelete = 1; $mediaFiles = array('samy-v1.js', 'backbone.js', 'samy-v2.js', 'samy-v3.js', 'samy-v4.js'); $this->assertTrue($this->createTestMedias($websiteId, $mediaFiles)); $getAllRequest = sprintf('/album/getall/params/{"websiteId":"%s"}', $websiteId); $this->dispatch($getAllRequest); $response = new Response($this->getResponseBody()); $this->assertTrue($response->getSuccess()); $responseData = $response->getData(); $this->assertObjectHasAttribute('albums', $responseData); $this->assertInternalType('array', $responseData->albums); $this->assertSame($expectedAlbumCountBeforeDelete, count($responseData->albums)); $request = sprintf('/album/delete/params/{"websiteId":"%s","id":"%s"}', $websiteId, $albumId); $this->dispatch($request); $response = $this->getResponseBody(); $this->dispatch($getAllRequest); $response = new Response($this->getResponseBody()); $this->assertTrue($response->getSuccess()); $responseData = $response->getData(); $this->assertObjectHasAttribute('albums', $responseData); $this->assertInternalType('array', $responseData->albums); $this->assertSame($expectedAlbumCountAfterDelete, count($responseData->albums)); $config = Registry::getConfig(); $testFilesDirectory = $config->test->files->directory; $testFilesMediaDirectory = $config->media->files->directory; $testMediaDirectory = $testFilesDirectory . DIRECTORY_SEPARATOR . $websiteId; $expectedAfterDeleteMediasTreeFile = $testFilesDirectory . DIRECTORY_SEPARATOR . 'trees' . DIRECTORY_SEPARATOR . 'album_delete.tree'; $expectedAfterDeleteMediasTree = file_get_contents($expectedAfterDeleteMediasTreeFile); $testMediaDirectory = $testFilesDirectory . DIRECTORY_SEPARATOR . 'media' . DIRECTORY_SEPARATOR . $websiteId; $assertionMessage = "Tree mismatch between medias directory tree and " . "expected medias directory tree after album deletion"; $this->assertSame($expectedAfterDeleteMediasTree, \Test\Seitenbau\Directory\Helper::getRecursiveAsJson($testMediaDirectory, true), $assertionMessage); DirectoryHelper::removeRecursiv($testMediaDirectory, $testFilesMediaDirectory); }
/** * @test * @group integration */ public function copyCopiesAssociatedAlbums() { $sourceWebsiteId = 'SITE-1964e89c-0001-cows-a651-fc42dc78fe50-SITE'; $sourceAlbumIds = array('ALBUM-wc0ecf03-moe9-4adb-ed3f-72ebb087800c-ALBUM', 'ALBUM-wc1ecf03-moe9-4adb-ed3f-72ebb087800c-ALBUM', 'ALBUM-wc2ecf03-moe9-4adb-ed3f-72ebb087800c-ALBUM'); $sourceMediaNames = array('Website_Copy_Album_0_0', 'Website_Copy_Album_0_1', 'Website_Copy_Album_0_2', 'Website_Copy_Album_1_0', 'Website_Copy_Album_1_1', 'Website_Copy_Album_1_2', 'Website_Copy_Album_2_0', 'Website_Copy_Album_2_1', 'Website_Copy_Album_2_2'); $testMediaFiles = array('report_2009.pdf', 'backbone.js', 'footer.jpg', 'header_0.png', 'report_2010.pdf', 'pdf.js', 'report_2011.pdf', 'grumble.js', 'header_0.gif'); $this->createTestMedias($sourceWebsiteId, $testMediaFiles); $copyRequest = sprintf('website/copy/params/{"id":"%s","name":"%s"}', $sourceWebsiteId, 'copied_website_with_copied_albums'); $this->dispatch($copyRequest); $response = $this->getResponseBody(); $response = new Response($response); $this->assertTrue($response->getSuccess()); $responseData = $response->getData(); $this->assertObjectHasAttribute('id', $responseData); $copiedWebsiteId = $responseData->id; $uniqueidValidator = new UniqueIdValidator(DataWebsite::ID_PREFIX, DataWebsite::ID_SUFFIX); $this->assertTrue($uniqueidValidator->isValid($copiedWebsiteId)); $config = Registry::getConfig(); $mediaBaseDirectory = realpath($config->media->files->directory); $sourceMediaDirectory = $mediaBaseDirectory . DIRECTORY_SEPARATOR . $sourceWebsiteId; $copiedMediaDirectory = $mediaBaseDirectory . DIRECTORY_SEPARATOR . $copiedWebsiteId; $this->assertTrue(is_dir($copiedMediaDirectory)); $testFilesDirectory = $config->test->files->directory; $expectedCopyTreeFile = $testFilesDirectory . DIRECTORY_SEPARATOR . 'trees' . DIRECTORY_SEPARATOR . 'website_copy.tree'; $expectedCopyTree = file_get_contents($expectedCopyTreeFile); $this->assertSame($expectedCopyTree, DirectoryHelper::getRecursiveAsJson($copiedMediaDirectory, true), "Tree mismatch between copied directory tree and expected directory tree"); $getAllMediaRequest = sprintf('media/getall/params/{"websiteid":"%s"}', $copiedWebsiteId); $this->dispatch($getAllMediaRequest); $response = $this->getResponseBody(); $response = new Response($response); $this->assertTrue($response->getSuccess()); $responseData = $response->getData(); $this->assertObjectHasAttribute('media', $responseData); $this->assertInternalType('array', $responseData->media); $this->assertObjectHasAttribute('total', $responseData); $expectedCopiedMediaTotal = 9; $this->assertSame($expectedCopiedMediaTotal, $responseData->total); $actualCopiedAlbumIds = array(); $actualMediaNames = array(); foreach ($responseData->media as $media) { $this->assertInstanceOf('stdClass', $media); $this->assertObjectHasAttribute('websiteId', $media); $this->assertObjectHasAttribute('albumId', $media); $this->assertObjectHasAttribute('name', $media); $this->assertSame($copiedWebsiteId, $media->websiteId); $this->assertContains($media->albumId, $sourceAlbumIds); $actualMediaNames[] = $media->name; if (!in_array($media->albumId, $actualCopiedAlbumIds)) { $actualCopiedAlbumIds[] = $media->albumId; } } sort($sourceMediaNames); sort($actualMediaNames); $this->assertSame($sourceMediaNames, $actualMediaNames); $expectedAlbumCount = 3; $this->assertSame($expectedAlbumCount, count($actualCopiedAlbumIds)); $getAllAlbumRequest = sprintf('album/getall/params/{"websiteid":"%s"}', $copiedWebsiteId); $this->dispatch($getAllAlbumRequest); $response = $this->getResponseBody(); $response = new Response($response); $this->assertTrue($response->getSuccess()); $responseData = $response->getData(); $this->assertObjectHasAttribute('albums', $responseData); $this->assertInternalType('array', $responseData->albums); $copiedAlbums = $responseData->albums; $this->assertSame($expectedAlbumCount, count($copiedAlbums)); $copiedAlbumIds = array(); foreach ($copiedAlbums as $album) { $this->assertInstanceOf('stdClass', $album); $this->assertObjectHasAttribute('id', $album); $copiedAlbumIds[] = $album->id; } sort($actualCopiedAlbumIds); sort($copiedAlbumIds); $this->assertSame($actualCopiedAlbumIds, $copiedAlbumIds); $getAllMediaRequest = sprintf('media/getall/params/{"websiteid":"%s"}', $sourceWebsiteId); $this->dispatch($getAllMediaRequest); $response = $this->getResponseBody(); $response = new Response($response); $this->assertTrue($response->getSuccess()); $responseData = $response->getData(); $this->assertObjectHasAttribute('media', $responseData); $this->assertInternalType('array', $responseData->media); $this->assertObjectHasAttribute('total', $responseData); $expectedSourceMediaTotal = 9; $this->assertSame($expectedSourceMediaTotal, $responseData->total); foreach ($responseData->media as $media) { $this->assertInstanceOf('stdClass', $media); $this->assertObjectHasAttribute('websiteId', $media); $this->assertObjectHasAttribute('albumId', $media); $this->assertSame($sourceWebsiteId, $media->websiteId); $this->assertContains($media->albumId, $actualCopiedAlbumIds); } DirectoryHelper::removeRecursiv($sourceMediaDirectory, $mediaBaseDirectory); DirectoryHelper::removeRecursiv($copiedMediaDirectory, $mediaBaseDirectory); }
/** * @test * @group integration */ public function exportTemplateSnippetsShouldExportAsExpectedWithSpecifiedName() { $config = Registry::getConfig(); $exportDirectoryName = 'test_export_0_templatesnippet'; $exportBaseDirectory = $config->export->directory; $exportDirectory = $exportBaseDirectory . DIRECTORY_SEPARATOR . md5($exportDirectoryName); $exportZipFile = $exportBaseDirectory . DIRECTORY_SEPARATOR . md5($exportDirectoryName) . DIRECTORY_SEPARATOR . md5($exportDirectoryName) . '.' . self::EXPORT_FILE_EXTENSION; $websiteId = 'SITE-ae6e702f-10ac-4e1e-exmo-307e4b8765db-SITE'; $templateSnippetIds = array('TPLS-template-snip-pet0-test-000000000021-TPLS', 'TPLS-template-snip-pet0-test-000000000022-TPLS', 'TPLS-template-snip-pet0-test-000000000023-TPLS'); $requestUri = sprintf('export/templatesnippets/params/%s', \Zend_Json::encode(array('websiteid' => $websiteId, 'ids' => $templateSnippetIds, 'name' => $exportDirectoryName))); $this->dispatch($requestUri); $response = $this->getValidatedSuccessResponse(); $responseData = $response->getData(); $this->assertObjectHasAttribute('url', $responseData); $nameDataPart = sprintf('{"name":"%s"}', $exportDirectoryName); $this->assertStringEndsWith($nameDataPart, $responseData->url); $this->assertTrue(is_dir($exportDirectory)); $this->assertFileExists($exportZipFile); $unzipCommand = sprintf("unzip %s -d %s", $exportZipFile, $exportDirectory); if (strstr($unzipCommand, $exportBaseDirectory)) { SystemHelper::user_proc_exec($unzipCommand); DirectoryHelper::removeRecursiv($exportZipFile, $exportBaseDirectory); } $testFilesDirectory = $config->test->files->directory; $expectedExportTreeFile = $testFilesDirectory . DIRECTORY_SEPARATOR . 'trees' . DIRECTORY_SEPARATOR . 'export' . DIRECTORY_SEPARATOR . 'expected_templatesnippets_export.tree'; $expectedExportTree = file_get_contents($expectedExportTreeFile); $exportDirectoryTree = DirectoryHelper::getRecursiveAsJson($exportDirectory, true); $this->assertSame($expectedExportTree, $exportDirectoryTree, "Tree mismatch between export directory tree and expected directory tree"); DirectoryHelper::removeRecursiv($exportDirectory, $exportBaseDirectory); }
/** * @test * @group integration */ public function exportWebsiteShouldCreateExpectedFiles() { // ARRANGE $websiteId = 'SITE-controll-er0e-xpor-t0we-bsite0000001-SITE'; $config = Registry::getConfig(); $expectedJsonFilesDirectory = $config->test->json->storage->directory; $testFilesDirectory = $config->test->files->directory; $expectedExportedPackagesTree = FS::readContentFromFile(FS::joinPath($testFilesDirectory, 'trees', 'export', $websiteId, 'packages.tree')); $exportDirectoryName = 'test_export_0_website_with_album'; $exportBaseDirectory = $config->export->directory; $exportDirectory = FS::joinPath($exportBaseDirectory, md5($exportDirectoryName)); $exportZipFileName = md5($exportDirectoryName) . '.' . self::EXPORT_FILE_EXTENSION; $exportZipFile = FS::joinPath($exportDirectory, $exportZipFileName); $expectedTemplates = array('TPL-controll-er0e-xpor-t0we-bsite0000001-TPL' => (object) array('id' => 'TPL-controll-er0e-xpor-t0we-bsite0000001-TPL', 'name' => 'template export 1', 'content' => json_encode(array((object) array('abc' => 'def'))), 'pageType' => 'the_page_type_id'), 'TPL-controll-er0e-xpor-t0we-bsite0000002-TPL' => (object) array('id' => 'TPL-controll-er0e-xpor-t0we-bsite0000002-TPL', 'name' => 'template export 2', 'content' => json_encode(array()), 'pageType' => null)); // ACT $this->dispatchWithParams('export/website', array('websiteid' => $websiteId, 'name' => $exportDirectoryName)); // ASSERT $this->getValidatedSuccessResponse(); $this->assertTrue(is_dir($exportDirectory)); $this->assertFileExists($exportZipFile); $unzipCommand = sprintf("unzip %s -d %s", $exportZipFile, $exportDirectory); if (strstr($unzipCommand, $exportBaseDirectory)) { SystemHelper::user_proc_exec($unzipCommand); DirectoryHelper::removeRecursiv($exportZipFile, $exportBaseDirectory); } $expectedWebsiteJsonFile = FS::joinPath($expectedJsonFilesDirectory, 'expected_website.json'); $this->assertFileExists($expectedWebsiteJsonFile); $this->assertWebsiteJsonCreatedAsExpected($exportDirectory, $expectedWebsiteJsonFile); $expectedWebsiteSettingsJsonFile = FS::joinPath($expectedJsonFilesDirectory, 'expected_export_websitesettings.json'); $this->assertFileExists($expectedWebsiteSettingsJsonFile); $this->assertWebsiteSettingsJsonCreatedAsExpected($exportDirectory, $expectedWebsiteSettingsJsonFile); $this->assertTemplateJsonCreatedAsExpected($exportDirectory, $expectedTemplates); $exportedPackagesDirectory = FS::joinPath($exportDirectory, 'packages'); $actualExportedPackagesTree = DirectoryHelper::getRecursiveAsJson($exportedPackagesDirectory, true); $this->assertSame($actualExportedPackagesTree, $expectedExportedPackagesTree, "Tree mismatch between export package directory tree and expected package directory tree"); DirectoryHelper::removeRecursiv($exportDirectory, $exportBaseDirectory); }