tao-test/app/taoQtiTest/test/integration/runner/time/QtiTimeStorageTest.php

159 lines
5.8 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) 2016 (original work) Open Assessment Technologies SA;
*/
namespace oat\taoQtiTest\test\integration\runner\time;
use oat\generis\test\GenerisPhpUnitTestRunner;
use oat\tao\model\state\StateStorage;
use oat\taoQtiTest\models\runner\time\QtiTimeLine;
use oat\taoQtiTest\models\runner\time\QtiTimeStorage;
use oat\taoQtiTest\models\runner\time\storageFormat\QtiTimeStorageJsonFormat;
use oat\taoTests\models\runner\time\TimePoint;
use oat\taoTests\models\runner\time\TimeStorage;
use Prophecy\Argument;
use Prophecy\Prophet;
/**
* Test the {@link QtiTimeStorage.php}
*
* @author Aleh hutnikau, <hutnikau@1pt.com>
*/
class QtiTimeStorageTest extends GenerisPhpUnitTestRunner
{
/**
* @var string
*/
protected $testSessionId = 'fake_session_id';
/**
* @var string
*/
protected $userId = 'fake_user_id';
/**
* @throws \common_ext_ExtensionException
*/
public function setUp(): void
{
\common_ext_ExtensionsManager::singleton()->getExtensionById('taoQtiTest');
}
/**
* Test the QtiTimeStorage instantiation
*/
public function testConstructor()
{
$storage = new QtiTimeStorage($this->testSessionId, $this->userId);
$this->assertInstanceOf(TimeStorage::class, $storage);
$this->assertEquals($this->testSessionId, $this->getSessionId($storage));
}
/**
* Test the QtiTimeStorage::store()
*/
public function testStore()
{
$storage = new QtiTimeStorage($this->testSessionId, $this->userId);
$buffer = [];
$this->mockStorage($storage, $buffer);
$result = $storage->store($this->getTimeLine());
$this->assertEquals($storage, $result);
$this->assertEquals($this->getTimeLine(), $result->load());
}
/**
* Test the QtiTimeStorage::load()
*/
public function testLoad()
{
$storage = new QtiTimeStorage($this->testSessionId, $this->userId);
$buffer = [];
$this->mockStorage($storage, $buffer);
$storage->store($this->getTimeLine());
$this->assertEquals($this->getTimeLine(), $storage->load());
}
/**
* Get test session id from QtiTimeStorage instance
*
* @param QtiTimeStorage $storage
* @return string
*/
protected function getSessionId(QtiTimeStorage $storage)
{
$reflectionClass = new \ReflectionClass(QtiTimeStorage::class);
$reflectionProperty = $reflectionClass->getProperty('testSessionId');
$reflectionProperty->setAccessible(true);
return $reflectionProperty->getValue($storage);
}
/**
* @param $storage
* @param $buffer
*/
private function mockStorage($storage, &$buffer)
{
$prophet = new Prophet();
$prophecy = $prophet->prophesize(StateStorage::class);
$prophecy->get(Argument::type('string'), Argument::type('string'))->will(function ($args) use (&$buffer) {
return $buffer[$args[0]][$args[1]];
});
$prophecy->set(Argument::type('string'), Argument::type('string'), Argument::type('string'))->will(function ($args) use (&$buffer) {
$buffer[$args[0]][$args[1]] = $args[2];
});
$storage->setStorageService($prophecy->reveal());
$storage->setStorageFormat(new QtiTimeStorageJsonFormat());
}
/**
* @return array
*/
private function getTimeLine()
{
$tags1 = ['Test1', 'TestPart1', 'TestSection1', 'Item1', 'Item1#0', 'Item1#0-1'];
$tags2 = ['Test1', 'TestPart1', 'TestSection1', 'Item2', 'Item2#0', 'Item2#0-1'];
$tags3 = ['Test1', 'TestPart1', 'TestSection1', 'Item3', 'Item3#0', 'Item3#0-1'];
return [
'timeLine' => new QtiTimeLine([
new TimePoint($tags1, 1507706410.8289, TimePoint::TYPE_START, TimePoint::TARGET_SERVER),
new TimePoint($tags1, 1507706424.3663, TimePoint::TYPE_END, TimePoint::TARGET_SERVER),
new TimePoint($tags1, 1507706412.2481, TimePoint::TYPE_START, TimePoint::TARGET_CLIENT),
new TimePoint($tags1, 1507706422.947, TimePoint::TYPE_END, TimePoint::TARGET_CLIENT),
new TimePoint($tags2, 1507706424.8342, TimePoint::TYPE_START, TimePoint::TARGET_SERVER),
new TimePoint($tags2, 1507706525.0912, TimePoint::TYPE_END, TimePoint::TARGET_SERVER),
new TimePoint($tags2, 1507706427.1259, TimePoint::TYPE_START, TimePoint::TARGET_CLIENT),
new TimePoint($tags2, 1507706522.7994, TimePoint::TYPE_END, TimePoint::TARGET_CLIENT),
new TimePoint($tags3, 1507706525.682, TimePoint::TYPE_START, TimePoint::TARGET_SERVER),
new TimePoint($tags3, 1507706640.9469, TimePoint::TYPE_END, TimePoint::TARGET_SERVER),
new TimePoint($tags3, 1507706526.4789, TimePoint::TYPE_START, TimePoint::TARGET_CLIENT),
new TimePoint($tags3, 1507706640.1501, TimePoint::TYPE_END, TimePoint::TARGET_CLIENT),
]),
'extraTime' => 0,
'extendedTime' => 0,
'extraTimeLine' => new QtiTimeLine(),
'consumedExtraTime' => 0
];
}
}