tao-test/app/taoProctoring/test/integration/monitorCache/DeliveryMonitoringDataTest.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.'
);
}
}