Files
Cloud-CMS/tests/integration/DisplayGroupTest.php
Matt Batchelder 05ce0da296 Initial Upload
2025-12-02 10:32:59 -05:00

900 lines
36 KiB
PHP

<?php
/**
* Copyright (C) 2020 Xibo Signage Ltd
*
* Xibo - Digital Signage - http://www.xibo.org.uk
*
* This file is part of Xibo.
*
* Xibo is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* Xibo 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Xibo. If not, see <http://www.gnu.org/licenses/>.
*/
namespace Xibo\Tests\Integration;
use Xibo\Helper\Random;
use Xibo\OAuth2\Client\Entity\XiboCommand;
use Xibo\OAuth2\Client\Entity\XiboDisplay;
use Xibo\OAuth2\Client\Entity\XiboDisplayGroup;
use Xibo\OAuth2\Client\Entity\XiboLayout;
use Xibo\OAuth2\Client\Entity\XiboLibrary;
use Xibo\Tests\Helper\LayoutHelperTrait;
use Xibo\Tests\LocalWebTestCase;
/**
* Class DisplayGroupTest
* @package Xibo\Tests\Integration
*/
class DisplayGroupTest extends LocalWebTestCase
{
use LayoutHelperTrait;
protected $startDisplayGroups;
protected $startDisplays;
protected $startLayouts;
protected $startCommands;
/**
* setUp - called before every test automatically
*/
public function setup()
{
parent::setup();
$this->startDisplayGroups = (new XiboDisplayGroup($this->getEntityProvider()))->get(['start' => 0, 'length' => 10000]);
$this->startDisplays = (new XiboDisplay($this->getEntityProvider()))->get(['start' => 0, 'length' => 10000]);
$this->startLayouts = (new XiboLayout($this->getEntityProvider()))->get(['start' => 0, 'length' => 10000]);
$this->startCommands = (new XiboCommand($this->getEntityProvider()))->get(['start' => 0, 'length' => 10000]);
}
/**
* tearDown - called after every test automatically
*/
public function tearDown()
{
// tearDown all display groups that weren't there initially
$finalDisplayGroups = (new XiboDisplayGroup($this->getEntityProvider()))->get(['start' => 0, 'length' => 10000]);
# Loop over any remaining display groups and nuke them
foreach ($finalDisplayGroups as $displayGroup) {
/** @var XiboDisplayGroup $displayGroup */
$flag = true;
foreach ($this->startDisplayGroups as $startGroup) {
if ($startGroup->displayGroupId == $displayGroup->displayGroupId) {
$flag = false;
}
}
if ($flag) {
try {
$displayGroup->delete();
} catch (\Exception $e) {
fwrite(STDERR, 'Unable to delete ' . $displayGroup->displayGroupId . '. E:' . $e->getMessage());
}
}
}
// Tear down any displays that weren't there before
$finalDisplays = (new XiboDisplay($this->getEntityProvider()))->get();
# Loop over any remaining displays and nuke them
foreach ($finalDisplays as $display) {
/** @var XiboDisplay $display */
$flag = true;
foreach ($this->startDisplays as $startDisplay) {
if ($startDisplay->displayId == $display->displayId) {
$flag = false;
}
}
if ($flag) {
try {
$display->delete();
} catch (\Exception $e) {
fwrite(STDERR, 'Unable to delete ' . $display->displayId . '. E:' . $e->getMessage());
}
}
}
// tearDown all layouts that weren't there initially
$finalLayouts = (new XiboLayout($this->getEntityProvider()))->get(['start' => 0, 'length' => 10000]);
# Loop over any remaining layouts and nuke them
foreach ($finalLayouts as $layout) {
/** @var XiboLayout $layout */
$flag = true;
foreach ($this->startLayouts as $startLayout) {
if ($startLayout->layoutId == $layout->layoutId) {
$flag = false;
}
}
if ($flag) {
try {
$layout->delete();
} catch (\Exception $e) {
fwrite(STDERR, 'Unable to delete ' . $layout->layoutId . '. E:' . $e->getMessage());
}
}
}
// tearDown all commands that weren't there initially
$finalCommands = (new XiboCommand($this->getEntityProvider()))->get(['start' => 0, 'length' => 10000]);
# Loop over any remaining commands and nuke them
foreach ($finalCommands as $command) {
/** @var XiboCommand $command */
$flag = true;
foreach ($this->startCommands as $startCom) {
if ($startCom->commandId == $command->commandId) {
$flag = false;
}
}
if ($flag) {
try {
$command->delete();
} catch (\Exception $e) {
fwrite(STDERR, 'Unable to delete ' . $command->commandId . '. E:' . $e->getMessage());
}
}
}
parent::tearDown();
}
/**
* List all display groups known empty
* @group minimal
* @group destructive
*/
public function testListEmpty()
{
if (count($this->startDisplayGroups) > 0) {
$this->skipTest("There are pre-existing DisplayGroups");
return;
}
$response = $this->sendRequest('GET','/displaygroup');
$this->assertSame(200, $response->getStatusCode());
$this->assertNotEmpty($response->getBody());
$object = json_decode($response->getBody());
$this->assertObjectHasAttribute('data', $object, $response->getBody());
# There should be no DisplayGroups in the system
$this->assertEquals(0, $object->data->recordsTotal);
}
/**
* testAddSuccess - test adding various Display Groups that should be valid
* @dataProvider provideSuccessCases
* @group minimal
*/
public function testAddSuccess($groupName, $groupDescription, $isDynamic, $expectedDynamic, $dynamicCriteria, $expectedDynamicCriteria)
{
// Loop through any pre-existing DisplayGroups to make sure we're not
// going to get a clash
foreach ($this->startDisplayGroups as $tmpGroup) {
if ($tmpGroup->displayGroup == $groupName) {
$this->skipTest("There is a pre-existing DisplayGroup with this name");
return;
}
}
$response = $this->sendRequest('POST','/displaygroup', [
'displayGroup' => $groupName,
'description' => $groupDescription,
'isDynamic' => $isDynamic,
'dynamicCriteria' => $dynamicCriteria
]);
$this->assertSame(200, $response->getStatusCode(), "Not successful: " . $response->getBody());
$object = json_decode($response->getBody());
$this->assertObjectHasAttribute('data', $object);
$this->assertObjectHasAttribute('id', $object);
$this->assertSame($groupName, $object->data->displayGroup);
$this->assertSame($groupDescription, $object->data->description);
$this->assertSame($expectedDynamic, $object->data->isDynamic);
$this->assertSame($expectedDynamicCriteria, $object->data->dynamicCriteria);
# Check that the group was really added
$displayGroups = (new XiboDisplayGroup($this->getEntityProvider()))->get(['length' => 1000]);
$this->assertEquals(count($this->startDisplayGroups) + 1, count($displayGroups));
# Check that the group was added correctly
$displayGroup = (new XiboDisplayGroup($this->getEntityProvider()))->getById($object->id);
$this->assertSame($groupName, $displayGroup->displayGroup);
$this->assertSame($groupDescription, $displayGroup->description);
$this->assertSame($expectedDynamic, $displayGroup->isDynamic);
$this->assertSame($expectedDynamicCriteria, $displayGroup->dynamicCriteria);
# Clean up the DisplayGroup as we no longer need it
$this->assertTrue($displayGroup->delete(), 'Unable to delete ' . $displayGroup->displayGroupId);
}
/**
* testAddFailure - test adding various Display Groups that should be invalid
* @dataProvider provideFailureCases
* @group minimal
*/
public function testAddFailure($groupName, $groupDescription, $isDynamic, $dynamicCriteria)
{
$response = $this->sendRequest('POST','/displaygroup', [
'displayGroup' => $groupName,
'description' => $groupDescription,
'isDynamic' => $isDynamic,
'dynamicCriteria' => $dynamicCriteria
]);
$this->assertSame(422, $response->getStatusCode(), 'Expecting failure, received ' . $response->getStatusCode());
}
/**
* List all display groups known set
* @group minimal
* @depends testAddSuccess
*/
public function testListKnown()
{
# Load in a known set of display groups
# We can assume this works since we depend upon the test which
# has previously added and removed these without issue:
$cases = $this->provideSuccessCases();
$displayGroups = [];
// Check each possible case to ensure it's not pre-existing
// If it is, skip over it
foreach ($cases as $case) {
$flag = true;
foreach ($this->startDisplayGroups as $tmpGroup) {
if ($case[0] == $tmpGroup->displayGroup) {
$flag = false;
}
}
if ($flag) {
$displayGroups[] = (new XiboDisplayGroup($this->getEntityProvider()))->create($case[0],$case[1],$case[2],$case[3]);
}
}
$response = $this->sendRequest('GET','/displaygroup');
$this->assertSame(200, $response->getStatusCode());
$this->assertNotEmpty($response->getBody());
$object = json_decode($response->getBody());
$this->assertObjectHasAttribute('data', $object, $response->getBody());
# There should be as many groups as we created plus the number we started with in the system
$this->assertEquals(count($displayGroups) + count($this->startDisplayGroups), $object->data->recordsTotal);
# Clean up the groups we created
foreach ($displayGroups as $group) {
$group->delete();
}
}
/**
* List specific display groups
* @group minimal
* @group destructive
* @depends testListKnown
* @depends testAddSuccess
* @dataProvider provideSuccessCases
*/
public function testListFilter($groupName, $groupDescription, $isDynamic, $expectedDynamic, $dynamicCriteria, $expectedDynamicCriteria)
{
if (count($this->startDisplayGroups) > 0) {
$this->skipTest("There are pre-existing DisplayGroups");
return;
}
# Load in a known set of display groups
# We can assume this works since we depend upon the test which
# has previously added and removed these without issue:
$cases = $this->provideSuccessCases();
$displayGroups = [];
foreach ($cases as $case) {
$displayGroups[] = (new XiboDisplayGroup($this->getEntityProvider()))->create($case[0], $case[1], $case[2], $case[3]);
}
$response = $this->sendRequest('GET','/displaygroup', [
'displayGroup' => $groupName
]);
$this->assertSame(200, $response->getStatusCode());
$this->assertNotEmpty($response->getBody());
$object = json_decode($response->getBody());
$this->assertObjectHasAttribute('data', $object, $response->getBody());
# There should be at least one match
$this->assertGreaterThanOrEqual(1, $object->data->recordsTotal);
$flag = false;
# Check that for the records returned, $groupName is in the groups names
foreach ($object->data->data as $group) {
if (strpos($groupName, $group->displayGroup) == 0) {
$flag = true;
}
else {
// The object we got wasn't the exact one we searched for
// Make sure all the words we searched for are in the result
foreach (array_map('trim',explode(",",$groupName)) as $word) {
assertTrue((strpos($word, $group->displayGroup) !== false), 'Group returned did not match the query string: ' . $group->displayGroup);
}
}
}
$this->assertTrue($flag, 'Search term not found');
foreach ($displayGroups as $group) {
$group->delete();
}
}
/**
* Each array is a test run
* Format
* (Group Name, Group Description, isDynamic, Returned isDynamic (0 or 1),
* Criteria for Dynamic group, Returned Criteria for Dynamic group)
* For example, if you set isDynamic to 0 and send criteria, it will come back
* with criteria = null
* These are reused in other tests so please ensure Group Name is unique
* through the dataset
* @return array
*/
public function provideSuccessCases()
{
return [
// Multi-language non-dynamic groups
'English 1' => ['phpunit test group', 'Api', 0, 0, null, null],
'English 2' => ['another phpunit test group', 'Api', 0, 0, null, null],
'French 1' => ['Test de Français 1', 'Bienvenue à la suite de tests Xibo', 0, 0, null, null],
'German 1' => ['Deutsch Prüfung 1', 'Weiß mit schwarzem Text', 0, 0, null, null],
'Simplified Chinese 1' => ['试验组', '测试组描述', 0, 0, null, null],
// Multi-language dynamic groups
'English Dynamic 1' => ['phpunit test dynamic group', 'Api', 1, 1, 'test', 'test'],
'French Dynamic 1' => ['Test de Français 2', 'Bienvenue à la suite de tests Xibo', 1, 1, 'test', 'test'],
'German Dynamic 1' => ['Deutsch Prüfung 2', 'Weiß mit schwarzem Text', 1, 1, 'test', 'test'],
// Tests for the various allowed values for isDynamic = 1
'isDynamic on' => ['phpunit group dynamic is on', 'Api', 'on', 1, 'test', 'test'],
'isDynamic true' => ['phpunit group dynamic is true', 'Api', 'true', 1, 'test', 'test'],
// Invalid isDynamic flag (the CMS sanitises these for us to false)
'isDynamic is 7 null criteria' => ['Invalid isDynamic flag 1', 'Invalid isDynamic flag', 7, 0, null, null],
'isDynamic is 7 with criteria' => ['Invalid isDynamic flag 2 ', 'Invalid isDynamic flag', 7, 0, 'criteria', 'criteria'],
'isDynamic is invalid null criteria' => ['Invalid isDynamic flag alpha 1', 'Invalid isDynamic flag alpha', 'invalid', 0, null, null],
'isDynamic is invalid with criteria' => ['Invalid isDynamic flag alpha 2', 'Invalid isDynamic flag alpha', 'invalid', 0, 'criteria', 'criteria']
];
}
/**
* Each array is a test run
* Format
* (Group Name, Group Description, isDynamic, Criteria for Dynamic group)
* @return array
*/
public function provideFailureCases()
{
return [
// Description is limited to 255 characters
'Description over 254 characters' => ['Too long description', Random::generateString(255), 0, null],
// If isDynamic = 1 then criteria must be set
'No dynamicCriteria on dynamic group' => ['No dynamic criteria', 'No dynamic criteria', 1, null],
// Missing group names
'Group name empty' => ['', 'Group name is empty', 0, null],
'Group name null' => [null, 'Group name is null', 0, null]
];
}
/**
* Try and add two display groups with the same name
* @group minimal
* @depends testAddSuccess
*/
public function testAddDuplicate()
{
$flag = true;
foreach ($this->startDisplayGroups as $group) {
if ($group->displayGroup == 'phpunit displaygroup') {
$flag = false;
}
}
# Load in a known display group if it's not there already
if ($flag) {
$displayGroup = (new XiboDisplayGroup($this->getEntityProvider()))->create('phpunit displaygroup', 'phpunit displaygroup', 0, '');
}
$response = $this->sendRequest('POST','/displaygroup', [
'displayGroup' => 'phpunit displaygroup',
'description' => 'phpunit displaygroup',
'isDynamic' => 0,
'dynamicCriteria' => ''
]);
$this->assertSame(409, $response->getStatusCode(), 'Expecting failure, received ' . $response->getStatusCode());
$displayGroup->delete();
}
/**
* Edit an existing display group
* @depends testAddSuccess
* @group minimal
*/
public function testEdit()
{
foreach ($this->startDisplayGroups as $group) {
if ($group->displayGroup == 'phpunit displaygroup') {
$this->skipTest('displayGroup already exists with that name');
return;
}
}
# Load in a known display group
/** @var XiboDisplayGroup $displayGroup */
$displayGroup = (new XiboDisplayGroup($this->getEntityProvider()))->create('phpunit displaygroup', 'phpunit displaygroup', 0, '');
# Change the group name and description
# Change it to a dynamic group with a fixed criteria
$name = Random::generateString(8, 'phpunit');
$description = Random::generateString(8, 'description');
$criteria = 'test';
$response = $this->sendRequest('PUT','/displaygroup/' . $displayGroup->displayGroupId, [
'displayGroup' => $name,
'description' => $description,
'isDynamic' => 1,
'dynamicCriteria' => $criteria
], ['CONTENT_TYPE' => 'application/x-www-form-urlencoded']);
$this->assertSame(200, $response->getStatusCode(), 'Not successful: ' . $response->getBody());
$object = json_decode($response->getBody());
# Examine the returned object and check that it's what we expect
$this->assertObjectHasAttribute('data', $object);
$this->assertObjectHasAttribute('id', $object);
$this->assertSame($name, $object->data->displayGroup);
$this->assertSame($description, $object->data->description);
$this->assertSame(1, $object->data->isDynamic);
$this->assertSame($criteria, $object->data->dynamicCriteria);
# Check that the group was actually renamed
$displayGroup = (new XiboDisplayGroup($this->getEntityProvider()))->getById($object->id);
$this->assertSame($name, $displayGroup->displayGroup);
$this->assertSame($description, $displayGroup->description);
$this->assertSame(1, $displayGroup->isDynamic);
$this->assertSame($criteria, $displayGroup->dynamicCriteria);
# Clean up the DisplayGroup as we no longer need it
$displayGroup->delete();
}
/**
* Test delete
* @depends testAddSuccess
* @group minimal
*/
public function testDelete()
{
$name1 = Random::generateString(8, 'phpunit');
$name2 = Random::generateString(8, 'phpunit');
# Load in a couple of known display groups
$displayGroup1 = (new XiboDisplayGroup($this->getEntityProvider()))->create($name1, 'phpunit description', 0, '');
$displayGroup2 = (new XiboDisplayGroup($this->getEntityProvider()))->create($name2, 'phpunit description', 0, '');
# Delete the one we created last
$response = $this->sendRequest('DELETE','/displaygroup/' . $displayGroup2->displayGroupId);
# This should return 204 for success
$object = json_decode($response->getBody());
$this->assertSame(204, $object->status, $response->getBody());
# Check only one remains
$groups = (new XiboDisplayGroup($this->getEntityProvider()))->get();
$this->assertEquals(count($this->startDisplayGroups) + 1, count($groups));
$flag = false;
foreach ($groups as $group) {
if ($group->displayGroupId == $displayGroup1->displayGroupId) {
$flag = true;
}
}
$this->assertTrue($flag, 'DisplayGroup ID ' . $displayGroup1->displayGroupId . ' was not found after deleting a different DisplayGroup');
# Clean up
$displayGroup1->delete();
}
/**
* Assign new displays Test
*/
public function testAssignDisplay()
{
# Create a Display in the system
$hardwareId = Random::generateString(12, 'phpunit');
$this->getXmdsWrapper()->RegisterDisplay($hardwareId, 'PHPUnit Test Display');
# Now find the Id of that Display
$displays = (new XiboDisplay($this->getEntityProvider()))->get();
$display = null;
foreach ($displays as $disp) {
if ($disp->license == $hardwareId) {
$display = $disp;
}
}
if ($display === null) {
$this->fail('Display was not added correctly');
}
# Create a DisplayGroup to add the display to
$name = Random::generateString(8, 'phpunit');
$displayGroup = (new XiboDisplayGroup($this->getEntityProvider()))->create($name, 'phpunit description', 0, '');
# Call assign display to display group
$response = $this->sendRequest('POST','/displaygroup/' . $displayGroup->displayGroupId . '/display/assign', [
'displayId' => [$display->displayId]
]);
$object = json_decode($response->getBody());
$this->assertSame(204, $object->status, $response->getBody());
# Get a list of all Displays in the group
$displays = (new XiboDisplay($this->getEntityProvider()))->get(['displayGroupId' => $displayGroup->displayGroupId]);
# Check that there's only us in that group
$this->assertEquals(1, count($displays));
$this->assertEquals($display->displayId, $displays[0]->displayId);
# Clean up
$displayGroup->delete();
$display->delete();
}
/**
* Try to assign display to isDisplaySpecific displayGroupId
*/
public function testAssignDisplayFailure()
{
# Create a Display in the system
$hardwareId = Random::generateString(12, 'phpunit');
$this->getXmdsWrapper()->RegisterDisplay($hardwareId, 'PHPUnit Test Display');
# Now find the Id of that Display
$displays = (new XiboDisplay($this->getEntityProvider()))->get();
$display = null;
foreach ($displays as $disp) {
if ($disp->license == $hardwareId) {
$display = $disp;
}
}
if ($display === null) {
$this->fail('Display was not added correctly');
}
# Call assign display to display specific display group
$response = $this->sendRequest('POST','/displaygroup/' . $display->displayGroupId . '/display/assign', [
'displayId' => [$display->displayId]
]);
$this->assertSame(422, $response->getStatusCode(), 'Expecting failure, received ' . $response->getStatusCode());
}
/**
* Unassign displays Test
*/
public function testUnassignDisplay()
{
# Create a Display in the system
$hardwareId = Random::generateString(12, 'phpunit');
$this->getXmdsWrapper()->RegisterDisplay($hardwareId, 'PHPUnit Test Display');
# Now find the Id of that Display
$displays = (new XiboDisplay($this->getEntityProvider()))->get();
$display = null;
foreach ($displays as $disp) {
if ($disp->license == $hardwareId) {
$display = $disp;
}
}
if ($display === null) {
$this->fail('Display was not added correctly');
}
# Create display group
$name = Random::generateString(8, 'phpunit');
$displayGroup = (new XiboDisplayGroup($this->getEntityProvider()))->create($name, 'phpunit description', 0, '');
# Assign display to display group
$displayGroup->assignDisplay([$display->displayId]);
# Unassign display from display group
$response = $this->sendRequest('POST','/displaygroup/' . $displayGroup->displayGroupId . '/display/unassign', [
'displayId' => [$display->displayId]
]);
$this->assertSame(200, $response->getStatusCode());
$object = json_decode($response->getBody());
$this->assertSame(204, $object->status, $response->getBody());
$this->assertObjectHasAttribute('data', $object);
$this->assertObjectHasAttribute('id', $object);
# Clean up
$displayGroup->delete();
$display->delete();
}
/**
* Try to unassign display from isDisplaySpecific displayGroupId
*/
public function testUnassignDisplayFailure()
{
# Create a Display in the system
$hardwareId = Random::generateString(12, 'phpunit');
$this->getXmdsWrapper()->RegisterDisplay($hardwareId, 'PHPUnit Test Display');
# Now find the Id of that Display
$displays = (new XiboDisplay($this->getEntityProvider()))->get();
$display = null;
foreach ($displays as $disp) {
if ($disp->license == $hardwareId) {
$display = $disp;
}
}
if ($display === null) {
$this->fail('Display was not added correctly');
}
# Create display group
$name = Random::generateString(8, 'phpunit');
$displayGroup = (new XiboDisplayGroup($this->getEntityProvider()))->create($name, 'phpunit description', 0, '');
# Assign display to display group - should be successful
$displayGroup->assignDisplay([$display->displayId]);
# Unassign display from isDisplaySpecific display group - should fail
$response = $this->sendRequest('POST','/displaygroup/' . $display->displayGroupId . '/display/unassign', [
'displayId' => [$display->displayId]
]);
$this->assertSame(422, $response->getStatusCode(), 'Expecting failure, received ' . $response->getStatusCode());
}
/**
* Assign new display group Test
*/
public function testAssignGroup()
{
# Generate new random names
$name = Random::generateString(8, 'phpunit');
$name2 = Random::generateString(8, 'phpunit');
# Create new display group
$displayGroup = (new XiboDisplayGroup($this->getEntityProvider()))->create($name, 'phpunit description', 0, '');
$displayGroup2 = (new XiboDisplayGroup($this->getEntityProvider()))->create($name2, 'phpunit description', 0, '');
# Assign second display group to the first one
$response = $this->sendRequest('POST','/displaygroup/' . $displayGroup->displayGroupId . '/displayGroup/assign', [
'displayGroupId' => [$displayGroup2->displayGroupId]
]);
# Check if call was successful
$this->assertSame(200, $response->getStatusCode());
$object = json_decode($response->getBody());
$this->assertSame(204, $object->status, $response->getBody());
# Clean up
$displayGroup->delete();
$displayGroup2->delete();
}
/**
* Unassign displays group Test
*/
public function testUnassignGroup()
{
# Generate new random names
$name = Random::generateString(8, 'PARENT');
$name2 = Random::generateString(8, 'CHILD');
# Create new display groups
$displayGroup = (new XiboDisplayGroup($this->getEntityProvider()))->create($name, 'phpunit description', 0, '');
$displayGroup2 = (new XiboDisplayGroup($this->getEntityProvider()))->create($name2, 'phpunit description', 0, '');
# Assign second display group to the first one
$displayGroup->assignDisplayGroup([$displayGroup2->displayGroupId]);
# Unassign second display group from the first one
$response = $this->sendRequest('POST','/displaygroup/' . $displayGroup->displayGroupId . '/displayGroup/unassign', [
'displayGroupId' => [$displayGroup2->displayGroupId]
]);
# Check if call was successful
$this->assertSame(200, $response->getStatusCode());
$object = json_decode($response->getBody());
$this->assertSame(204, $object->status, $response->getBody());
# Clean up
$displayGroup->delete();
$displayGroup2->delete();
}
/**
* Assign new media file to a group Test
*/
public function testAssignMedia()
{
# Generate new random name
$name = Random::generateString(8, 'phpunit');
# Create new display group
$displayGroup = (new XiboDisplayGroup($this->getEntityProvider()))->create($name, 'phpunit description', 0, '');
# Upload a known files
$media = (new XiboLibrary($this->getEntityProvider()))->create('API video 12', PROJECT_ROOT . '/tests/resources/HLH264.mp4');
$media2 = (new XiboLibrary($this->getEntityProvider()))->create('API image 12', PROJECT_ROOT . '/tests/resources/xts-night-001.jpg');
# Assign two files o the display group and unassign one of them
$response = $this->sendRequest('POST','/displaygroup/' . $displayGroup->displayGroupId . '/media/assign', [
'mediaId' => [$media->mediaId, $media2->mediaId],
'unassignMediaId' => [$media2->mediaId]
]);
$this->assertSame(200, $response->getStatusCode());
$object = json_decode($response->getBody());
$this->assertSame(204, $object->status, $response->getBody());
# Clean up
$displayGroup->delete();
$media->delete();
$media2->delete();
}
/**
* Unassign media files from a group Test
*/
public function testUnassignMedia()
{
# Generate new random name
$name = Random::generateString(8, 'phpunit');
# Create new display group
$displayGroup = (new XiboDisplayGroup($this->getEntityProvider()))->create($name, 'phpunit description', 0, '');
# Upload a known file
$media = (new XiboLibrary($this->getEntityProvider()))->create('API image 29', PROJECT_ROOT . '/tests/resources/xts-night-001.jpg');
# Assign media to display Group
$displayGroup->assignMedia([$media->mediaId]);
# Unassign the media from the display group
$response = $this->sendRequest('POST','/displaygroup/' . $displayGroup->displayGroupId . '/media/unassign', [
'mediaId' => [$media->mediaId]
]);
$this->assertSame(200, $response->getStatusCode());
$object = json_decode($response->getBody());
$this->assertSame(204, $object->status, $response->getBody());
# Clean up
$displayGroup->delete();
$media->delete();
}
/**
* Assign new layouts to a group Test
*/
public function testAssignLayout()
{
# Create new random name
$name = Random::generateString(8, 'phpunit');
# Create new display group
$displayGroup = (new XiboDisplayGroup($this->getEntityProvider()))->create($name, 'phpunit description', 0, '');
# Create new layouts
$layout = $this->createLayout();
$layout2 = $this->createLayout();
# Assign both layouts to display group then unassign the second layout from it
$response = $this->sendRequest('POST','/displaygroup/' . $displayGroup->displayGroupId . '/layout/assign', [
'layoutId' => [$layout->layoutId, $layout2->layoutId],
'unassignLayoutsId' => [$layout2->layoutId]
]);
# Check if call was successful
$this->assertSame(200, $response->getStatusCode());
$this->assertNotEmpty($response->getBody());
$object = json_decode($response->getBody());
$this->assertSame(204, $object->status, $response->getBody());
# Clean up
$displayGroup->delete();
$layout->delete();
$layout2->delete();
}
/**
* Unassign layouts from a group Test
*/
public function testUnassignLayout()
{
# Create new random name
$name = Random::generateString(8, 'phpunit');
# Create new display group
$displayGroup = (new XiboDisplayGroup($this->getEntityProvider()))->create($name, 'phpunit description', 0, '');
# Create new layout
$layout = $this->createLayout();
# assign layout to display group
$displayGroup->assignLayout([$layout->layoutId]);
# unassign layout from display group
$response = $this->sendRequest('POST','/displaygroup/' . $displayGroup->displayGroupId . '/layout/unassign', [
'layoutId' => [$layout->layoutId]
]);
$this->assertSame(200, $response->getStatusCode());
$object = json_decode($response->getBody());
$this->assertSame(204, $object->status, $response->getBody());
# Clean up
$displayGroup->delete();
$layout->delete();
}
/**
* Collect now action test
*/
public function testCollectNow()
{
# Generate random name
$name = Random::generateString(8, 'phpunit');
# Create new display group
$displayGroup = (new XiboDisplayGroup($this->getEntityProvider()))->create($name, 'phpunit description', 0, '');
# Call callectNow
$response = $this->sendRequest('POST','/displaygroup/' . $displayGroup->displayGroupId . '/action/collectNow');
# Check if call was successful
$this->assertSame(200, $response->getStatusCode(), $response->getBody());
$object = json_decode($response->getBody());
$this->assertSame(204, $object->status, $response->getBody());
# Clean up
$displayGroup->delete();
}
/**
* Change Layout action test
*/
public function testChangeLayout()
{
# Generate random name
$name = Random::generateString(8, 'phpunit');
# Create new display group
$displayGroup = (new XiboDisplayGroup($this->getEntityProvider()))->create($name, 'phpunit description', 0, '');
# Create new layout
$layout = $this->createLayout();
# Call changeLayout
$response = $this->sendRequest('POST','/displaygroup/' . $displayGroup->displayGroupId . '/action/changeLayout', [
'layoutId' => $layout->layoutId,
'duration' => 900,
'downloadRequired' => 1,
'changeMode' => 'queue'
]);
# Check if successful
$this->assertSame(200, $response->getStatusCode(), $response->getBody());
$object = json_decode($response->getBody());
$this->assertSame(204, $object->status, $response->getBody());
# Clean up
$displayGroup->delete();
$layout->delete();
}
/**
* Revert to Schedule action test
*/
public function testRevertToSchedule()
{
# Generate random name and create new display group
$name = Random::generateString(8, 'phpunit');
$displayGroup = (new XiboDisplayGroup($this->getEntityProvider()))->create($name, 'phpunit description', 0, '');
# Call RevertToSchedule
$response = $this->sendRequest('POST','/displaygroup/' . $displayGroup->displayGroupId . '/action/revertToSchedule');
# Check if successful
$this->assertSame(200, $response->getStatusCode(), $response->getBody());
$object = json_decode($response->getBody());
$this->assertSame(204, $object->status, $response->getBody());
# Clean up
$displayGroup->delete();
}
/**
* Send command action test
*/
public function testCommand()
{
# Generate random name and create new display group
$name = Random::generateString(8, 'phpunit');
$displayGroup = (new XiboDisplayGroup($this->getEntityProvider()))->create($name, 'phpunit description', 0, '');
# Create new command
$command = (new XiboCommand($this->getEntityProvider()))->create('phpunit command', 'phpunit description', 'phpunitcode');
# Send command to display group
$response = $this->sendRequest('POST','/displaygroup/' . $displayGroup->displayGroupId . '/action/command' , [
'commandId' => $command->commandId
]);
# Check if successful
$this->assertSame(200, $response->getStatusCode(), $response->getBody());
$object = json_decode($response->getBody());
$this->assertSame(204, $object->status, $response->getBody());
# Clean up
$displayGroup->delete();
$command->delete();
}
}