183 lines
6.7 KiB
PHP
183 lines
6.7 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) 2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);
|
|
*
|
|
*/
|
|
|
|
namespace oat\taoQtiTest\test\unit\models\classes\runner;
|
|
|
|
use oat\generis\test\TestCase;
|
|
use oat\oatbox\filesystem\File;
|
|
use oat\taoQtiTest\models\runner\QtiRunnerServiceContext;
|
|
use oat\taoQtiTest\models\runner\TestDefinitionSerializerService;
|
|
use tao_models_classes_service_StorageDirectory;
|
|
use oat\generis\test\MockObject;
|
|
|
|
class TestDefinitionSerializerServiceTest extends TestCase
|
|
{
|
|
const TEST_DEFINITION = '<?xml version="1.0" encoding="UTF-8"?>
|
|
<assessmentTest xmlns="http://www.imsglobal.org/xsd/imsqti_v2p1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" identifier="Test-1" title="Test 1" toolName="tao" xsi:schemaLocation="http://www.imsglobal.org/xsd/imsqti_v2p1 http://www.imsglobal.org/xsd/qti/qtiv2p1/imsqti_v2p1.xsd">
|
|
<testPart identifier="testPart-1" navigationMode="linear" submissionMode="individual">
|
|
<itemSessionControl allowSkipping="true" validateResponses="false"/>
|
|
<assessmentSection identifier="assessmentSection-1" title="Section 1">
|
|
<itemSessionControl showSolution="false" />
|
|
<assessmentItemRef identifier="item-1" href="http://sample/first.rdf#i156576550888883">
|
|
<itemSessionControl maxAttempts="0"/>
|
|
</assessmentItemRef>
|
|
</assessmentSection>
|
|
</testPart>
|
|
</assessmentTest>';
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
private $parsedDefinition = [
|
|
'@attributes' => [
|
|
'identifier' => 'Test-1',
|
|
'title' => 'Test 1',
|
|
'toolName' => 'tao'
|
|
],
|
|
'testPart' => [
|
|
[
|
|
'@attributes' => [
|
|
'identifier' => 'testPart-1',
|
|
'navigationMode' => 'linear',
|
|
'submissionMode' => 'individual'
|
|
],
|
|
'itemSessionControl' => [
|
|
'@attributes' => [
|
|
'validateResponses' => 'false',
|
|
'allowSkipping' => 'true'
|
|
]
|
|
],
|
|
'assessmentSection' => [
|
|
[
|
|
'@attributes' => [
|
|
'identifier' => 'assessmentSection-1',
|
|
'title' => 'Section 1'
|
|
],
|
|
'itemSessionControl' => [
|
|
'@attributes' => ['showSolution' => 'false']
|
|
],
|
|
'assessmentItemRef' => [
|
|
[
|
|
'@attributes' => [
|
|
'identifier' => 'item-1',
|
|
'href' => 'http://sample/first.rdf#i156576550888883'
|
|
],
|
|
'itemSessionControl' => [
|
|
'@attributes' => ['maxAttempts' => 0]
|
|
]
|
|
]
|
|
]
|
|
]
|
|
]
|
|
]
|
|
]
|
|
];
|
|
|
|
/** @var TestDefinitionSerializerService */
|
|
private $testDefinitionSerializerService;
|
|
|
|
/** @var \tao_models_classes_service_FileStorage|MockObject */
|
|
private $fileStorageServiceMock;
|
|
|
|
/** @var tao_models_classes_service_StorageDirectory|MockObject */
|
|
private $directoryMock;
|
|
|
|
/** @var File|MockObject */
|
|
private $indexFileMock;
|
|
|
|
/** @var File|MockObject */
|
|
private $fileMock;
|
|
|
|
/** @var QtiRunnerServiceContext|MockObject */
|
|
private $qtiRunnerServiceContext;
|
|
|
|
public function setUp(): void
|
|
{
|
|
$this->testDefinitionSerializerService = new TestDefinitionSerializerService();
|
|
|
|
$this->fileStorageServiceMock = $this
|
|
->getMockBuilder(\tao_models_classes_service_FileStorage::class)
|
|
->getMock();
|
|
|
|
$this->qtiRunnerServiceContext = $this
|
|
->getMockBuilder(QtiRunnerServiceContext::class)
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
|
|
$this->qtiRunnerServiceContext
|
|
->method('getTestCompilationUri')
|
|
->willReturn('test|test');
|
|
|
|
$this->directoryMock = $this
|
|
->getMockBuilder(tao_models_classes_service_StorageDirectory::class)
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
|
|
$this->indexFileMock = $this
|
|
->getMockBuilder(File::class)
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
|
|
$this->fileMock = $this
|
|
->getMockBuilder(File::class)
|
|
->disableOriginalConstructor()
|
|
->getMock();
|
|
|
|
$this->indexFileMock->method('read')
|
|
->willReturn('tests/i153233799330111609/tao-qtitest-testdefinition.xml');
|
|
|
|
$this->fileMock->method('read')
|
|
->willReturn(self::TEST_DEFINITION);
|
|
|
|
$this->fileStorageServiceMock
|
|
->method('getDirectoryById')
|
|
->willReturn($this->directoryMock);
|
|
|
|
$serviceLocatorMock = $this->getServiceLocatorMock([
|
|
\tao_models_classes_service_FileStorage::SERVICE_ID => $this->fileStorageServiceMock,
|
|
]);
|
|
|
|
$this->testDefinitionSerializerService->setServiceLocator($serviceLocatorMock);
|
|
}
|
|
|
|
public function testGetSerializedTestDefinition()
|
|
{
|
|
$this->fileStorageServiceMock
|
|
->expects($this->once())
|
|
->method('getDirectoryById')
|
|
->with('test');
|
|
|
|
$this->directoryMock
|
|
->expects($this->exactly(2))
|
|
->method('getFile')
|
|
->withConsecutive(
|
|
['.index/qti-test.txt'],
|
|
['tests/i153233799330111609/tao-qtitest-testdefinition.xml']
|
|
)
|
|
->will($this->onConsecutiveCalls($this->indexFileMock, $this->fileMock));
|
|
|
|
$this->assertEquals(
|
|
$this->parsedDefinition,
|
|
$this->testDefinitionSerializerService->getSerializedTestDefinition($this->qtiRunnerServiceContext)
|
|
);
|
|
}
|
|
}
|