From ca4997fd7fc1477e61d29c9cc03fe63a8e7c65ca Mon Sep 17 00:00:00 2001 From: Alejandro Gallardo Escobar Date: Wed, 3 Apr 2019 11:40:40 +0200 Subject: [PATCH] Visual Console Refactor: fixed the events history model Former-commit-id: 9228339af7213996fb969ee631a93a3e972e102a --- .../VisualConsole/Items/EventsHistory.php | 60 +++++++++++++++++-- .../VisualConsole/Items/EventsHistoryTest.php | 46 ++++++-------- 2 files changed, 72 insertions(+), 34 deletions(-) diff --git a/pandora_console/include/rest-api/models/VisualConsole/Items/EventsHistory.php b/pandora_console/include/rest-api/models/VisualConsole/Items/EventsHistory.php index f0af58f0f9..4018a80036 100644 --- a/pandora_console/include/rest-api/models/VisualConsole/Items/EventsHistory.php +++ b/pandora_console/include/rest-api/models/VisualConsole/Items/EventsHistory.php @@ -28,6 +28,33 @@ final class EventsHistory extends Item protected static $useLinkedVisualConsole = true; + /** + * Validate the received data structure to ensure if we can extract the + * values required to build the model. + * + * @param array $data Input data. + * + * @return void + * + * @throws \InvalidArgumentException If any input value is considered + * invalid. + * + * @overrides Item::validateData. + */ + protected function validateData(array $data): void + { + parent::validateData($data); + + if (static::notEmptyStringOr($data['encodedHtml'], null) === null + && static::notEmptyStringOr($data['html'], null) === null + ) { + throw new \InvalidArgumentException( + 'the html property is required and should be string' + ); + } + } + + /** * Returns a valid representation of the model. * @@ -54,7 +81,7 @@ final class EventsHistory extends Item * * @return mixed The time in seconds of the graph period or null. */ - private function extractMaxTime(array $data) + private static function extractMaxTime(array $data) { return static::parseIntOr( static::issetInArray($data, ['maxTime', 'period']), @@ -69,15 +96,36 @@ final class EventsHistory extends Item * @param array $data Unknown input data structure. * * @return string The HTML representation in base64 encoding. - * @throws \InvalidArgumentException When an agent Id cannot be found. */ - private function extractEncodedHtml(array $data): string + private static function extractEncodedHtml(array $data): string { if (isset($data['encodedHtml']) === true) { return $data['encodedHtml']; } else if (isset($data['html']) === true) { return \base64_encode($data['html']); } + } + + + /** + * Fetch a vc item data structure from the database using a filter. + * + * @param array $filter Filter of the Visual Console Item. + * + * @return array The Visual Console Item data structure stored into the DB. + * @throws \InvalidArgumentException When an agent Id cannot be found. + * + * @override Item::fetchDataFromDB. + */ + protected static function fetchDataFromDB(array $filter): array + { + // Due to this DB call, this function cannot be unit tested without + // a proper mock. + $data = parent::fetchDataFromDB($filter); + + /* + * Retrieve extra data. + */ // Load side libraries. global $config; @@ -99,13 +147,15 @@ final class EventsHistory extends Item $moduleId, (int) $data['width'], (int) $data['height'], - $this->extractMaxTime($data), + static::extractMaxTime($data), '', true ); $html .= ''; - return \base64_encode($html); + $data['encodedHtml'] = \base64_encode($html); + + return $data; } diff --git a/pandora_console/tests/Functional/Models/VisualConsole/Items/EventsHistoryTest.php b/pandora_console/tests/Functional/Models/VisualConsole/Items/EventsHistoryTest.php index cc0e937c52..3bd8e65949 100644 --- a/pandora_console/tests/Functional/Models/VisualConsole/Items/EventsHistoryTest.php +++ b/pandora_console/tests/Functional/Models/VisualConsole/Items/EventsHistoryTest.php @@ -28,7 +28,7 @@ class EventsHistoryTest extends TestCase 'width' => '600', 'height' => '500', 'maxTime' => null, - 'data' => [], + 'html' => '

Foo

', ] ) ); @@ -37,15 +37,12 @@ class EventsHistoryTest extends TestCase EventsHistory::class, EventsHistory::fromArray( [ - 'id' => 14, - 'type' => AUTO_SLA_GRAPH, - 'width' => '600', - 'height' => '500', - 'maxTime' => 12800, - 'data' => [ - 'data' => '5', - 'time' => 23456788, - ], + 'id' => 14, + 'type' => AUTO_SLA_GRAPH, + 'width' => '600', + 'height' => '500', + 'maxTime' => 12800, + 'encodedHtml' => 'PGgxPkZvbzwvaDE+', ] ) ); @@ -60,7 +57,7 @@ class EventsHistoryTest extends TestCase public function testContainerIsRepresentedAsJson(): void { $this->assertEquals( - '{"aclGroupId":null,"agentId":null,"agentName":null,"data":[],"height":0,"id":7,"isLinkEnabled":true,"isOnTop":false,"label":null,"labelPosition":"up","linkedLayoutAgentId":null,"linkedLayoutId":null,"linkedLayoutStatusType":"default","maxTime":null,"moduleId":null,"moduleName":null,"parentId":null,"type":14,"width":0,"x":-666,"y":76}', + '{"aclGroupId":null,"agentId":null,"agentName":null,"encodedHtml":"PGgxPkZvbzwvaDE+","height":0,"id":7,"isLinkEnabled":true,"isOnTop":false,"label":null,"labelPosition":"up","linkedLayoutAgentId":null,"linkedLayoutId":null,"linkedLayoutStatusType":"default","maxTime":null,"moduleId":null,"moduleName":null,"parentId":null,"type":14,"width":0,"x":-666,"y":76}', (string) EventsHistory::fromArray( [ 'id' => 7, @@ -75,13 +72,13 @@ class EventsHistoryTest extends TestCase 'x' => -666, 'y' => 76, 'maxTime' => null, - 'data' => [], + 'html' => '

Foo

', ] ) ); $this->assertEquals( - '{"aclGroupId":null,"agentId":null,"agentName":null,"data":{"time":23456789,"data":15},"height":0,"id":7,"isLinkEnabled":true,"isOnTop":false,"label":null,"labelPosition":"up","linkedLayoutAgentId":null,"linkedLayoutId":null,"linkedLayoutStatusType":"default","maxTime":12800,"moduleId":null,"moduleName":null,"parentId":null,"type":14,"width":0,"x":-666,"y":76}', + '{"aclGroupId":null,"agentId":null,"agentName":null,"encodedHtml":"PGgxPkZvbzwvaDE+","height":0,"id":7,"isLinkEnabled":true,"isOnTop":false,"label":null,"labelPosition":"up","linkedLayoutAgentId":null,"linkedLayoutId":null,"linkedLayoutStatusType":"default","maxTime":12800,"moduleId":null,"moduleName":null,"parentId":null,"type":14,"width":0,"x":-666,"y":76}', (string) EventsHistory::fromArray( [ 'id' => 7, @@ -96,16 +93,13 @@ class EventsHistoryTest extends TestCase 'x' => -666, 'y' => 76, 'maxTime' => 12800, - 'data' => [ - 'time' => 23456789, - 'data' => 15, - ], + 'encodedHtml' => 'PGgxPkZvbzwvaDE+', ] ) ); $this->assertEquals( - '{"aclGroupId":null,"agentId":null,"agentName":null,"data":[],"height":0,"id":7,"isLinkEnabled":true,"isOnTop":false,"label":null,"labelPosition":"up","linkedLayoutAgentId":null,"linkedLayoutId":1,"linkedLayoutStatusType":"default","maxTime":null,"moduleId":null,"moduleName":null,"parentId":null,"type":14,"width":0,"x":-666,"y":76}', + '{"aclGroupId":null,"agentId":null,"agentName":null,"encodedHtml":"PGgxPkZvbzwvaDE+","height":0,"id":7,"isLinkEnabled":true,"isOnTop":false,"label":null,"labelPosition":"up","linkedLayoutAgentId":null,"linkedLayoutId":1,"linkedLayoutStatusType":"default","maxTime":null,"moduleId":null,"moduleName":null,"parentId":null,"type":14,"width":0,"x":-666,"y":76}', (string) EventsHistory::fromArray( [ 'id' => 7, @@ -120,14 +114,14 @@ class EventsHistoryTest extends TestCase 'x' => -666, 'y' => 76, 'maxTime' => null, - 'data' => [], + 'encodedHtml' => 'PGgxPkZvbzwvaDE+', 'id_layout_linked' => 1, ] ) ); $this->assertEquals( - '{"aclGroupId":null,"agentId":null,"agentName":null,"data":{"time":23456789,"data":15},"height":0,"id":7,"isLinkEnabled":true,"isOnTop":false,"label":null,"labelPosition":"up","linkedLayoutAgentId":3,"linkedLayoutId":2,"linkedLayoutStatusType":"default","maxTime":12800,"metaconsoleId":5,"moduleId":null,"moduleName":null,"parentId":null,"type":14,"width":0,"x":-666,"y":76}', + '{"aclGroupId":null,"agentId":null,"agentName":null,"encodedHtml":"PGgxPkZvbzwvaDE+","height":0,"id":7,"isLinkEnabled":true,"isOnTop":false,"label":null,"labelPosition":"up","linkedLayoutAgentId":3,"linkedLayoutId":2,"linkedLayoutStatusType":"default","maxTime":12800,"metaconsoleId":5,"moduleId":null,"moduleName":null,"parentId":null,"type":14,"width":0,"x":-666,"y":76}', (string) EventsHistory::fromArray( [ 'id' => 7, @@ -142,10 +136,7 @@ class EventsHistoryTest extends TestCase 'x' => -666, 'y' => 76, 'maxTime' => 12800, - 'data' => [ - 'time' => 23456789, - 'data' => 15, - ], + 'encodedHtml' => 'PGgxPkZvbzwvaDE+', 'id_metaconsole' => 5, 'linked_layout_node_id' => 3, 'linkedLayoutId' => 2, @@ -154,7 +145,7 @@ class EventsHistoryTest extends TestCase ); $this->assertEquals( - '{"aclGroupId":null,"agentId":21,"agentName":null,"data":{"time":23456789,"data":15},"height":0,"id":7,"isLinkEnabled":true,"isOnTop":false,"label":null,"labelPosition":"up","linkedLayoutAgentId":15,"linkedLayoutId":3,"linkedLayoutStatusType":"default","maxTime":12800,"metaconsoleId":2,"moduleId":385,"moduleName":"module_test","parentId":null,"type":14,"width":0,"x":-666,"y":76}', + '{"aclGroupId":null,"agentId":21,"agentName":null,"encodedHtml":"PGgxPkZvbzwvaDE+","height":0,"id":7,"isLinkEnabled":true,"isOnTop":false,"label":null,"labelPosition":"up","linkedLayoutAgentId":15,"linkedLayoutId":3,"linkedLayoutStatusType":"default","maxTime":12800,"metaconsoleId":2,"moduleId":385,"moduleName":"module_test","parentId":null,"type":14,"width":0,"x":-666,"y":76}', (string) EventsHistory::fromArray( [ 'id' => 7, @@ -169,10 +160,7 @@ class EventsHistoryTest extends TestCase 'x' => -666, 'y' => 76, 'maxTime' => 12800, - 'data' => [ - 'time' => 23456789, - 'data' => 15, - ], + 'encodedHtml' => 'PGgxPkZvbzwvaDE+', 'id_metaconsole' => 2, 'linked_layout_node_id' => 15, 'linkedLayoutId' => 3,