tao-test/app/taoQtiTest/test/unit/models/classes/runner/TestDefinitionSerializerServiceTest.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)
);
}
}