94 lines
3.1 KiB
PHP
94 lines
3.1 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) 2020 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);
|
|
*
|
|
*/
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace oat\taoQtiItem\test\unit\model\compile;
|
|
|
|
use DOMDocument;
|
|
use GuzzleHttp\Psr7\Stream;
|
|
use oat\generis\test\TestCase;
|
|
use oat\oatbox\log\LoggerService;
|
|
use oat\tao\model\media\MediaAsset;
|
|
use oat\tao\model\media\MediaBrowser;
|
|
use oat\taoQtiItem\model\compile\QtiAssetCompiler\XIncludeXmlInjector;
|
|
use oat\taoQtiItem\model\pack\QtiAssetPacker\PackedAsset;
|
|
use Psr\Log\NullLogger;
|
|
|
|
class XIncludeXmlInjectorTest extends TestCase
|
|
{
|
|
/** @var XIncludeXmlInjector */
|
|
private $subject;
|
|
|
|
public function setUp(): void
|
|
{
|
|
$this->subject = new XIncludeXmlInjector();
|
|
$this->subject->setServiceLocator($this->getServiceLocatorMock([
|
|
LoggerService::SERVICE_ID => new NullLogger()
|
|
]));
|
|
}
|
|
|
|
public function testInjectSharedStimulus()
|
|
{
|
|
$sharedStimulusContent = '<?xml version="1.0" encoding="UTF-8"?><div class="grid-row">Some nice stuff</div>';
|
|
$itemContent = '<?xml version="1.0" encoding="UTF-8"?><div>This is my content: <include href="stimulus-url" /></div>';
|
|
$expectedItemContent = '<?xml version="1.0" encoding="UTF-8"?><div>This is my content: <div class="grid-row">Some nice stuff</div></div>';
|
|
|
|
$mediaSource = $this->createMock(MediaBrowser::class);
|
|
$mediaSource
|
|
->method('getFileStream')
|
|
->with('fixture-id')
|
|
->willReturn(
|
|
$this->createConfiguredMock(Stream::class, ['getContents' => $sharedStimulusContent])
|
|
);
|
|
|
|
$mediaAsset = $this->createConfiguredMock(
|
|
MediaAsset::class,
|
|
[
|
|
'getMediaIdentifier' => 'fixture-id',
|
|
'getMediaSource' => $mediaSource,
|
|
]
|
|
);
|
|
|
|
$packedAsset = $this->createConfiguredMock(
|
|
PackedAsset::class,
|
|
[
|
|
'getMediaAsset' => $mediaAsset
|
|
]
|
|
);
|
|
|
|
$packedAssets = [
|
|
'stimulus-url' => $packedAsset,
|
|
'another-fixture' => '',
|
|
];
|
|
|
|
$domDocument = new DOMDocument('1.0', 'UTF-8');
|
|
$domDocument->loadXML($itemContent);
|
|
|
|
$this->subject->injectSharedStimulus($domDocument, $packedAssets);
|
|
|
|
$this->assertXmlStringEqualsXmlString(
|
|
$expectedItemContent,
|
|
$domDocument->saveXML()
|
|
);
|
|
}
|
|
}
|