159 lines
5.8 KiB
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
|
|
];
|
|
}
|
|
}
|