202 lines
6.2 KiB
PHP
202 lines
6.2 KiB
PHP
<?php
|
|
|
|
/**
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; under version 2
|
|
* of the License (non-upgradable).
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* Copyright (c) 2018 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);
|
|
*/
|
|
|
|
namespace oat\generis\test\integration\helpers;
|
|
|
|
use common_Config;
|
|
use core_kernel_persistence_smoothsql_SmoothModel;
|
|
use oat\generis\scripts\tools\FileSerializerMigration\MigrationHelper;
|
|
use oat\generis\model\fileReference\ResourceFileSerializer;
|
|
use oat\generis\model\fileReference\UrlFileSerializer;
|
|
use oat\generis\model\GenerisRdf;
|
|
use oat\generis\test\GenerisTestCase;
|
|
use oat\oatbox\filesystem\Directory;
|
|
use oat\oatbox\filesystem\File;
|
|
use oat\oatbox\filesystem\FileSystemService;
|
|
use oat\oatbox\filesystem\FileSystemHandler;
|
|
use oat\generis\test\FileSystemMockTrait;
|
|
|
|
/**
|
|
* Test cases for the File serializer migration script helper
|
|
* @see \oat\generis\Helper\FileSerializerMigrationHelper
|
|
*/
|
|
class FileSerializerMigrationHelperTest extends GenerisTestCase
|
|
{
|
|
use FileSystemMockTrait;
|
|
|
|
const PARENT_RESOURCE_URI = 'http://www.tao.lu/Ontologies/generis.rdf#UnitTest';
|
|
const PROPERTY_URI = 'http://www.tao.lu/Ontologies/generis.rdf#TestFile';
|
|
const SAMPLE_FILE = 'fileMigrationUnitTest.txt';
|
|
|
|
/**
|
|
* @var MigrationHelper
|
|
*/
|
|
protected $fileMigrationHelper;
|
|
|
|
/**
|
|
* @var \core_kernel_classes_Class
|
|
*/
|
|
protected $testClass;
|
|
|
|
/**
|
|
* @var core_kernel_persistence_smoothsql_SmoothModel
|
|
*/
|
|
private $ontologyMock;
|
|
|
|
/**
|
|
* @var ResourceFileSerializer
|
|
*/
|
|
private $resourceFileSerializer;
|
|
|
|
/**
|
|
* @var UrlFileSerializer
|
|
*/
|
|
private $urlFileSerializer;
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
private $tempFileSystemId;
|
|
|
|
/**
|
|
* @var
|
|
*/
|
|
private $tempDirectory;
|
|
|
|
/**
|
|
* @var File|Directory
|
|
*/
|
|
private $testFile;
|
|
|
|
/**
|
|
* @var FileSystemService
|
|
*/
|
|
private $fileSystemService;
|
|
|
|
/**
|
|
* Initialize test
|
|
*/
|
|
public function setUp(): void
|
|
{
|
|
common_Config::load();
|
|
$this->fileMigrationHelper = new MigrationHelper();
|
|
$this->resourceFileSerializer = new ResourceFileSerializer();
|
|
$this->urlFileSerializer = new UrlFileSerializer();
|
|
|
|
$serviceLocator = $this->getServiceLocatorMock([FileSystemService::SERVICE_ID => $this->getMockFileSystem()]);
|
|
$this->fileMigrationHelper->setServiceLocator($serviceLocator);
|
|
$this->resourceFileSerializer->setServiceLocator($serviceLocator);
|
|
$this->urlFileSerializer->setServiceLocator($serviceLocator);
|
|
|
|
$this->ontologyMock = $this->getOntologyMock();
|
|
}
|
|
|
|
/**
|
|
* Test the migration of a file resource
|
|
*/
|
|
public function testResourceMigration()
|
|
{
|
|
try {
|
|
$fileResource = $this->getFileResource();
|
|
$this->fileMigrationHelper->migrateResource(
|
|
$fileResource,
|
|
$this->ontologyMock->getProperty(self::PARENT_RESOURCE_URI),
|
|
$this->ontologyMock->getResource(self::PROPERTY_URI)
|
|
);
|
|
} catch (\Exception $e) {
|
|
if ($this->testFile !== null) {
|
|
$this->testFile->delete();
|
|
}
|
|
throw new \Exception($e->getMessage());
|
|
}
|
|
|
|
self::assertSame($this->fileMigrationHelper->migrationInformation['migrated_count'], 1);
|
|
|
|
$this->testFile->delete();
|
|
}
|
|
|
|
/**
|
|
* Generate a file resource used for testing
|
|
*/
|
|
private function getFileResource()
|
|
{
|
|
$dir = $this->getTempDirectory();
|
|
$fileClass = $this->ontologyMock->getClass(GenerisRdf::CLASS_GENERIS_FILE);
|
|
$this->testFile = $dir->getFile(self::SAMPLE_FILE);
|
|
$this->testFile->write(self::SAMPLE_FILE, 'PHP Unit test file');
|
|
|
|
if ($this->testFile instanceof File) {
|
|
$filename = $this->testFile->getBasename();
|
|
$filePath = dirname($this->testFile->getPrefix());
|
|
} elseif ($this->testFile instanceof Directory) {
|
|
$filename = '';
|
|
$filePath = $this->testFile->getPrefix();
|
|
} else {
|
|
return false;
|
|
}
|
|
|
|
$resource = $fileClass->createInstanceWithProperties(
|
|
[
|
|
GenerisRdf::PROPERTY_FILE_FILENAME => $filename,
|
|
GenerisRdf::PROPERTY_FILE_FILEPATH => $filePath,
|
|
GenerisRdf::PROPERTY_FILE_FILESYSTEM => $this->ontologyMock->getResource($this->testFile->getFileSystemId()),
|
|
]
|
|
);
|
|
|
|
self::assertInstanceOf(FileSystemHandler::class, $this->resourceFileSerializer->unserialize($resource));
|
|
|
|
$unitTestResource = $this->ontologyMock->getResource(self::PARENT_RESOURCE_URI);
|
|
$testFileProperty = $this->ontologyMock->getProperty(self::PROPERTY_URI);
|
|
$unitTestResource->setPropertyValue($testFileProperty, $unitTestResource);
|
|
|
|
return $resource;
|
|
}
|
|
|
|
/**
|
|
* @return Directory
|
|
*/
|
|
private function getTempDirectory()
|
|
{
|
|
if (!$this->tempDirectory) {
|
|
$this->tempDirectory = $this->getFileSystemMock(['unit-test'])->getDirectory('unit-test');
|
|
}
|
|
return $this->tempDirectory;
|
|
}
|
|
|
|
protected function tearDown(): void
|
|
{
|
|
$dir = $this->getTempDirectory();
|
|
$this->testFile = $dir->getFile(self::SAMPLE_FILE);
|
|
$this->testFile->delete();
|
|
}
|
|
|
|
/**
|
|
* @return FileSystemService
|
|
*/
|
|
private function getMockFileSystem()
|
|
{
|
|
if ($this->fileSystemService === null) {
|
|
$this->fileSystemService = $this->getServiceLocatorMock([FileSystemService::SERVICE_ID => new FileSystemService()])->get(FileSystemService::SERVICE_ID);
|
|
}
|
|
|
|
return $this->fileSystemService;
|
|
}
|
|
}
|