193 lines
7.0 KiB
PHP
193 lines
7.0 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) 2015 (original work) Open Assessment Technologies SA;
|
|
*
|
|
*
|
|
*/
|
|
|
|
namespace oat\taoProctoring\test\integration\monitorCache;
|
|
|
|
require_once dirname(__FILE__).'/../../../../tao/includes/raw_start.php';
|
|
|
|
use oat\tao\test\TaoPhpUnitTestRunner;
|
|
use oat\taoDelivery\model\execution\DeliveryExecution;
|
|
use oat\taoDelivery\model\execution\DeliveryExecutionContextInterface;
|
|
use oat\taoDelivery\model\execution\DeliveryExecutionInterface;
|
|
use oat\taoProctoring\model\monitorCache\implementation\DeliveryMonitoringData;
|
|
use oat\taoProctoring\model\monitorCache\DeliveryMonitoringService;
|
|
use oat\generis\test\MockObject;
|
|
|
|
/**
|
|
* class DeliveryMonitoringData
|
|
*
|
|
* Represents data model of delivery execution.
|
|
*
|
|
* @package oat\taoProctoring
|
|
* @author Aleh Hutnikau <hutnikau@1pt.com>
|
|
*/
|
|
class DeliveryMonitoringDataTest extends TaoPhpUnitTestRunner
|
|
{
|
|
/**
|
|
* @var DeliveryExecutionInterface|MockObject
|
|
*/
|
|
private $deliveryExecutionMock;
|
|
|
|
/**
|
|
* @var DeliveryExecutionContextInterface|MockObject
|
|
*/
|
|
private $deliveryExecutionContextMock;
|
|
|
|
/**
|
|
* @var DeliveryMonitoringData
|
|
*/
|
|
private $object;
|
|
|
|
public function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
|
|
$this->deliveryExecutionContextMock = $this->createMock(DeliveryExecutionContextInterface::class);
|
|
$this->deliveryExecutionMock = $this->createMock(DeliveryExecutionInterface::class);
|
|
$this->object = new DeliveryMonitoringData($this->deliveryExecutionMock, []);
|
|
}
|
|
|
|
public function testConstruct()
|
|
{
|
|
$deliveryExecutionId = 'http://sample/first.rdf#i1450190828500474_test_record';
|
|
$columns = [
|
|
DeliveryMonitoringService::TEST_TAKER=> 'http://sample/first.rdf#superUser',
|
|
DeliveryMonitoringService::STATUS => 'initial',
|
|
'arbitrary_key' => 'arbitrary_value',
|
|
];
|
|
|
|
$deliveryExecution = $this->getDeliveryExecution();
|
|
|
|
$data = new DeliveryMonitoringData($deliveryExecution, [DeliveryMonitoringService::DELIVERY_EXECUTION_ID => $deliveryExecution->getIdentifier()]);
|
|
$data->setServiceLocator($this->getServiceManagerProphecy());
|
|
foreach ($columns as $columnKey => $columnVal) {
|
|
$data->addValue($columnKey, $columnVal);
|
|
}
|
|
|
|
foreach ($columns as $columnKey => $columnVal) {
|
|
$this->assertNotEmpty($data->get()[$columnKey]);
|
|
$this->assertEquals($data->get()[$columnKey], $columnVal);
|
|
}
|
|
}
|
|
|
|
public function testAddValue()
|
|
{
|
|
$deliveryExecution = $this->getDeliveryExecution();
|
|
$data = new DeliveryMonitoringData($deliveryExecution, [DeliveryMonitoringService::DELIVERY_EXECUTION_ID => $deliveryExecution->getIdentifier()]);
|
|
$data->setServiceLocator($this->getServiceManagerProphecy());
|
|
|
|
$this->assertEquals($data->get()[DeliveryMonitoringService::DELIVERY_EXECUTION_ID], $deliveryExecution->getIdentifier());
|
|
|
|
$data->addValue('new_value', 'value');
|
|
$this->assertEquals($data->get()['new_value'], 'value');
|
|
|
|
//should not be overwritten
|
|
$data->addValue('new_value', 'value_changed');
|
|
$this->assertEquals($data->get()['new_value'], 'value');
|
|
|
|
//should be overwritten
|
|
$data->addValue('new_value', 'value_changed', true);
|
|
$this->assertEquals($data->get()['new_value'], 'value_changed');
|
|
}
|
|
|
|
public function testValidate()
|
|
{
|
|
$deliveryExecution = $this->getDeliveryExecution();
|
|
$data = new DeliveryMonitoringData($deliveryExecution, [DeliveryMonitoringService::DELIVERY_EXECUTION_ID => $deliveryExecution->getIdentifier()]);
|
|
$data->setServiceLocator($this->getServiceManagerProphecy());
|
|
$this->assertFalse($data->validate());
|
|
$errors = $data->getErrors();
|
|
|
|
$this->assertTrue(!empty($errors));
|
|
|
|
$data->addValue(DeliveryMonitoringService::TEST_TAKER, 'test_taker_id');
|
|
$data->addValue(DeliveryMonitoringService::STATUS, 'active');
|
|
|
|
$this->assertTrue($data->validate());
|
|
$errors = $data->getErrors();
|
|
$this->assertTrue(empty($errors));
|
|
}
|
|
|
|
private function getDeliveryExecution($state = null)
|
|
{
|
|
$id = 'http://sample/first.rdf#i1450190828500474_test_record';
|
|
$prophet = new \Prophecy\Prophet();
|
|
$deliveryExecutionProphecy = $prophet->prophesize(DeliveryExecution::class);
|
|
$deliveryExecutionProphecy->getIdentifier()->willReturn($id);
|
|
$deliveryExecutionProphecy->getState()->willReturn($state);
|
|
return $deliveryExecutionProphecy->reveal();
|
|
}
|
|
|
|
public function testGetDeliveryExecution()
|
|
{
|
|
$deliveryExecution = $this->object->getDeliveryExecution();
|
|
|
|
$this->assertInstanceOf(DeliveryExecutionInterface::class, $deliveryExecution, 'Method must return an instance of expected interface.');
|
|
}
|
|
|
|
public function testSetDeliveryExecutionContext()
|
|
{
|
|
$this->deliveryExecutionContextMock->expects($this->once())
|
|
->method('jsonSerialize')
|
|
->willReturn([]);
|
|
|
|
$this->object->setDeliveryExecutionContext($this->deliveryExecutionContextMock);
|
|
|
|
$monitoringData = $this->object->get();
|
|
$this->assertArrayHasKey(
|
|
'execution_context',
|
|
$monitoringData,
|
|
'Delivery execution context object must be stored in monitoring data.'
|
|
);
|
|
$this->assertIsString(
|
|
$monitoringData['execution_context'],
|
|
'Delivery monitoring context must be stored as JSON string.'
|
|
);
|
|
}
|
|
|
|
public function testDetDeliveryExecutionContextDoesNotExist()
|
|
{
|
|
$result = $this->object->getDeliveryExecutionContext();
|
|
|
|
$this->assertNull($result, 'Method must return false if context does not exist.');
|
|
}
|
|
|
|
public function testGetDeliveryExecutionContext()
|
|
{
|
|
$contextData = [
|
|
'execution_id' => 'http://test-execution-uri.dev',
|
|
'context_id' => 'test_context_id',
|
|
];
|
|
$this->deliveryExecutionContextMock->expects($this->once())
|
|
->method('jsonSerialize')
|
|
->willReturn($contextData);
|
|
|
|
$this->object->setDeliveryExecutionContext($this->deliveryExecutionContextMock);
|
|
|
|
$result = $this->object->getDeliveryExecutionContext();
|
|
|
|
$this->assertInstanceOf(
|
|
DeliveryExecutionContextInterface::class,
|
|
$result,
|
|
'Method must return an instance of expected interface.'
|
|
);
|
|
}
|
|
} |