*/ class RdsDeliveryLogServiceTest extends TaoPhpUnitTestRunner { /** * @var RdsDeliveryLogService */ private $service; private $persistence; private $deliveryExecutionId = 'http://sample/first.rdf#i1450191587554180_test_record'; /** * Set up test */ public function setUp(): void { TaoPhpUnitTestRunner::initTest(); $this->service = new RdsDeliveryLogService(array(RdsDeliveryLogService::OPTION_PERSISTENCE => 'default', 'fields' => array( 'event_id', 'created_by', 'delivery_execution_id' ))); $this->persistence = \common_persistence_Manager::getPersistence('default'); } public function tearDown(): void { $this->deleteTestData(); } /** * Clear test data before and after each test method * @after * @before */ public function deleteTestData() { $sql = 'DELETE FROM ' . RdsDeliveryLogService::TABLE_NAME . ' WHERE ' . RdsDeliveryLogService::DELIVERY_EXECUTION_ID . " LIKE '%_test_record'"; // @todo fix "Base table or view not found: 1146 Table 'tao.delivery_log' doesn't exist" $this->persistence->exec($sql); } /** * @dataProvider getLogData * @param $deliveryExecutionId */ public function testSearch($deliveryExecutionId) { $this->service->log($deliveryExecutionId, 'test_event_same_uniq_1', 'test_val_1'); $this->service->log($deliveryExecutionId, 'test_event_same_uniq_1', 'test_val_2'); $loggedData = $this->service->search([ 'event_id' => 'test_event_same_uniq_1', ], [ 'order' => 'created_at', 'dir' => 'desc', ]); $this->assertEquals(2, count($loggedData)); $firstLog = $loggedData[0]; $this->assertEquals($deliveryExecutionId, $firstLog[RdsDeliveryLogService::DELIVERY_EXECUTION_ID]); $this->assertEquals('test_event_same_uniq_1', $firstLog[RdsDeliveryLogService::EVENT_ID]); $this->assertEquals('test_val_2', $firstLog[RdsDeliveryLogService::DATA]); $secondLog = $loggedData[1]; $this->assertEquals($deliveryExecutionId, $secondLog[RdsDeliveryLogService::DELIVERY_EXECUTION_ID]); $this->assertEquals('test_event_same_uniq_1', $secondLog[RdsDeliveryLogService::EVENT_ID]); $this->assertEquals('test_val_1', $secondLog[RdsDeliveryLogService::DATA]); } /** * @dataProvider getLogData * @param $deliveryExecutionId */ public function testDelete($deliveryExecutionId) { $this->service->log($deliveryExecutionId, 'test_event_same_uniq_2', 'test_val_1'); $executionMock = $this->getMockBuilder(DeliveryExecutionInterface::class)->getMock(); $executionMock ->method('getIdentifier') ->willReturn($deliveryExecutionId); $request = $this->getMockBuilder(DeliveryExecutionDeleteRequest::class)->disableOriginalConstructor()->getMock(); $request ->method('getDeliveryExecution') ->willReturn($executionMock); $this->assertTrue($this->service->deleteDeliveryExecutionData($request)); } /** * @dataProvider getLogData * @param $deliveryExecutionId * @param $eventId * @param $data * @param string $userId */ public function testLog($deliveryExecutionId, $eventId, $data, $userId) { $result = $this->service->log($deliveryExecutionId, $eventId, $data, $userId); $this->assertTrue($result); $loggedData = $this->getRecordByDeliveryExecutionId($deliveryExecutionId); //get last logged record $loggedData = $loggedData[count($loggedData) - 1]; $this->assertEquals($deliveryExecutionId, $loggedData[RdsDeliveryLogService::DELIVERY_EXECUTION_ID]); $this->assertEquals($eventId, $loggedData[RdsDeliveryLogService::EVENT_ID]); $this->assertEquals($data, json_decode($loggedData[RdsDeliveryLogService::DATA], true)); $this->assertTrue(is_numeric($loggedData[RdsDeliveryLogService::CREATED_AT])); $this->assertTrue(!empty($loggedData[RdsDeliveryLogService::CREATED_BY])); if ($userId) { $this->assertEquals($userId, $loggedData[RdsDeliveryLogService::CREATED_BY]); } } /** * @dataProvider getLogData * @param $deliveryExecutionId * @param $eventId * @param $data */ public function testGet($deliveryExecutionId, $eventId, $data) { $this->service->log($deliveryExecutionId, $eventId, $data); $this->service->log($deliveryExecutionId, 'test', 'test_val'); $loggedData = $this->service->get($deliveryExecutionId, $eventId); $loggedDataAllEvents = $this->service->get($deliveryExecutionId); $this->assertEquals(1, count($loggedData)); $this->assertEquals(2, count($loggedDataAllEvents)); //get last logged record $loggedData = $loggedData[count($loggedData) - 1]; $this->assertEquals($deliveryExecutionId, $loggedData[RdsDeliveryLogService::DELIVERY_EXECUTION_ID]); $this->assertEquals($eventId, $loggedData[RdsDeliveryLogService::EVENT_ID]); $this->assertEquals($data, $loggedData[RdsDeliveryLogService::DATA]); $this->assertTrue(is_numeric($loggedData[RdsDeliveryLogService::CREATED_AT])); $this->assertTrue(!empty($loggedData[RdsDeliveryLogService::CREATED_BY])); } /** * Get data to be logged * @return array */ public function getLogData() { return [ [ $this->deliveryExecutionId, 'test_event_1', 'string value', 'user_id' ], [ $this->deliveryExecutionId, 'test_event_2', [ 'key_1' => 'value_1', 'key_2' => 'value_2', ], null ], ]; } /** * Get logged data from database * @param string $id delivery execution id * @return array */ private function getRecordByDeliveryExecutionId($id) { $sql = 'SELECT * FROM ' . RdsDeliveryLogService::TABLE_NAME . ' WHERE ' . RdsDeliveryLogService::DELIVERY_EXECUTION_ID . '=?'; return $this->persistence->query($sql, [$id])->fetchAll(); } }