mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-12 23:14:18 +01:00
Add tests
This commit is contained in:
@@ -142,6 +142,158 @@ JSON;
|
||||
$this->assertJsonStringEqualsJsonString($sExpectedJsonOuput, $sJSONOutput);
|
||||
}
|
||||
|
||||
|
||||
public function testCoreApiGet_Select2SubClasses(){
|
||||
// Create ticket
|
||||
$description = date('dmY H:i:s');
|
||||
$iIdCaller = $this->CreatePerson(1)->GetKey();
|
||||
$oUserRequest = $this->CreateSampleTicket($description, 'UserRequest', $iIdCaller);
|
||||
$oChange = $this->CreateSampleTicket($description, 'Change', $iIdCaller);
|
||||
$iIdUserRequest = $oUserRequest->GetKey();
|
||||
$iIdChange = $oChange->GetKey();
|
||||
|
||||
$sJSONOutput = $this->CallCoreRestApi_Internally(<<<JSON
|
||||
{
|
||||
"operation": "core/get",
|
||||
"class": "UserRequest, Change",
|
||||
"key": "SELECT UserRequest WHERE id=$iIdUserRequest UNION SELECT Change WHERE id=$iIdChange",
|
||||
"output_fields": "id, description, outage"
|
||||
}
|
||||
JSON);
|
||||
|
||||
$sExpectedJsonOuput = <<<JSON
|
||||
{
|
||||
"code": 0,
|
||||
"message": "Found: 2",
|
||||
"objects": {
|
||||
"UserRequest::$iIdUserRequest": {
|
||||
"class": "UserRequest",
|
||||
"code": 0,
|
||||
"fields": {
|
||||
"description": "<p>$description</p>",
|
||||
"id": "$iIdUserRequest"
|
||||
},
|
||||
"key": "$iIdUserRequest",
|
||||
"message": ""
|
||||
},
|
||||
"Change::$iIdChange": {
|
||||
"class": "Change",
|
||||
"code": 0,
|
||||
"fields": {
|
||||
"description": "<p>$description</p>",
|
||||
"id": "$iIdChange",
|
||||
"outage": "no"
|
||||
},
|
||||
"key": "$iIdChange",
|
||||
"message": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
JSON;
|
||||
$this->assertJsonStringEqualsJsonString($sExpectedJsonOuput, $sJSONOutput);
|
||||
}
|
||||
|
||||
|
||||
public function testCoreApiGet_SelectTicketAndPerson(){
|
||||
// Create ticket
|
||||
$description = date('dmY H:i:s');
|
||||
$iIdCaller = $this->CreatePerson(1)->GetKey();
|
||||
$oUserRequest = $this->CreateSampleTicket($description, 'UserRequest', $iIdCaller);
|
||||
$iIdUserRequest = $oUserRequest->GetKey();
|
||||
|
||||
$sJSONOutput = $this->CallCoreRestApi_Internally(<<<JSON
|
||||
{
|
||||
"operation": "core/get",
|
||||
"class": "UserRequest, Change",
|
||||
"key": "SELECT UR, P FROM UserRequest AS UR JOIN Person AS P ON UR.caller_id = P.id WHERE UR.id=$iIdUserRequest ",
|
||||
"output_fields": "id, title, description, name, email"
|
||||
}
|
||||
JSON);
|
||||
|
||||
$sExpectedJsonOuput = <<<JSON
|
||||
{
|
||||
"code": 0,
|
||||
"message": "Found: 1",
|
||||
"objects": [{
|
||||
"UR": {
|
||||
"class": "UserRequest",
|
||||
"code": 0,
|
||||
"fields": {
|
||||
"description": "<p>$description</p>",
|
||||
"id": "$iIdUserRequest",
|
||||
"title": "Houston, got a problem"
|
||||
},
|
||||
"key": "$iIdUserRequest",
|
||||
"message": ""
|
||||
},
|
||||
"P": {
|
||||
"class": "Person",
|
||||
"code": 0,
|
||||
"fields": {
|
||||
"email": "",
|
||||
"id": "$iIdCaller",
|
||||
"name": "Person_1"
|
||||
},
|
||||
"key": "$iIdCaller",
|
||||
"message": ""
|
||||
}
|
||||
}]
|
||||
}
|
||||
JSON;
|
||||
$this->assertJsonStringEqualsJsonString($sExpectedJsonOuput, $sJSONOutput);
|
||||
}
|
||||
|
||||
public function testCoreApiGetWithUnionAndDifferentOutputFields(){
|
||||
// Create ticket
|
||||
$description = date('dmY H:i:s');
|
||||
$oUserRequest = $this->CreateSampleTicket($description);
|
||||
$oChange = $this->CreateSampleTicket($description, 'Change');
|
||||
$iUserRequestId = $oUserRequest->GetKey();
|
||||
$sUserRequestRef = $oUserRequest->Get('ref');
|
||||
$iChangeId = $oChange->GetKey();
|
||||
$sChangeRef = $oChange->Get('ref');
|
||||
|
||||
$sJSONOutput = $this->CallCoreRestApi_Internally(<<<JSON
|
||||
{
|
||||
"operation": "core/get",
|
||||
"class": "Ticket",
|
||||
"key": "SELECT UserRequest WHERE id=$iUserRequestId UNION SELECT Change WHERE id=$iChangeId",
|
||||
"output_fields": "Ticket:ref;UserRequest:ref,status,origin;Change:ref,status,outage"
|
||||
}
|
||||
JSON);
|
||||
|
||||
$sExpectedJsonOuput = <<<JSON
|
||||
{
|
||||
"code": 0,
|
||||
"message": "Found: 2",
|
||||
"objects": {
|
||||
"Change::$iChangeId": {
|
||||
"class": "Change",
|
||||
"code": 0,
|
||||
"fields": {
|
||||
"outage": "no",
|
||||
"ref": "$sChangeRef",
|
||||
"status": "new"
|
||||
},
|
||||
"key": "$iChangeId",
|
||||
"message": ""
|
||||
},
|
||||
"UserRequest::$iUserRequestId": {
|
||||
"class": "UserRequest",
|
||||
"code": 0,
|
||||
"fields": {
|
||||
"origin": "phone",
|
||||
"ref": "$sUserRequestRef",
|
||||
"status": "new"
|
||||
},
|
||||
"key": "$iUserRequestId",
|
||||
"message": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
JSON;
|
||||
$this->assertJsonStringEqualsJsonString($sExpectedJsonOuput, $sJSONOutput);
|
||||
}
|
||||
public function testCoreApiCreate()
|
||||
{
|
||||
// Create ticket
|
||||
@@ -253,12 +405,13 @@ JSON;
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
private function CreateSampleTicket($description)
|
||||
private function CreateSampleTicket($description, $sType = 'UserRequest', $iIdCaller = null)
|
||||
{
|
||||
$oTicket = $this->createObject('UserRequest', [
|
||||
$oTicket = $this->createObject($sType, [
|
||||
'org_id' => $this->getTestOrgId(),
|
||||
"title" => "Houston, got a problem",
|
||||
"description" => $description
|
||||
"description" => $description,
|
||||
"caller_id" => $iIdCaller,
|
||||
]);
|
||||
return $oTicket;
|
||||
}
|
||||
|
||||
110
tests/php-unit-tests/unitary-tests/webservices/RestUtilsTest.php
Normal file
110
tests/php-unit-tests/unitary-tests/webservices/RestUtilsTest.php
Normal file
@@ -0,0 +1,110 @@
|
||||
<?php
|
||||
|
||||
namespace Combodo\iTop\Test\UnitTest\Webservices;
|
||||
|
||||
use Combodo\iTop\Test\UnitTest\ItopDataTestCase;
|
||||
use MetaModel;
|
||||
use RestUtils;
|
||||
use Ticket;
|
||||
use UserRequest;
|
||||
|
||||
|
||||
class RestUtilsTest extends ItopDataTestCase
|
||||
{
|
||||
public function testGetFieldListForSingleClass(): void
|
||||
{
|
||||
$aList = RestUtils::GetFieldList(Ticket::class, (object) ['output_fields' => 'ref,start_date,end_date'], 'output_fields');
|
||||
$this->assertSame([Ticket::class => ['ref', 'start_date', 'end_date']], $aList);
|
||||
}
|
||||
|
||||
public function testGetFieldListForSingleClassWithInvalidFieldNameFails(): void
|
||||
{
|
||||
$this->expectException(\Exception::class);
|
||||
$this->expectExceptionMessage('output_fields: invalid attribute code \'something\' for class \'Ticket\'');
|
||||
$aList = RestUtils::GetFieldList(Ticket::class, (object) ['output_fields' => 'ref,something'], 'output_fields');
|
||||
$this->assertSame([Ticket::class => ['ref', 'start_date', 'end_date']], $aList);
|
||||
}
|
||||
|
||||
public function testGetFieldListWithAsteriskOnParentClass(): void
|
||||
{
|
||||
$aList = RestUtils::GetFieldList(Ticket::class, (object) ['output_fields' => '*'], 'output_fields');
|
||||
$this->assertArrayHasKey(Ticket::class, $aList);
|
||||
$this->assertContains('operational_status', $aList[Ticket::class]);
|
||||
$this->assertNotContains('status', $aList[Ticket::class], 'Representation of Class Ticket should not contain status, since it is defined by children');
|
||||
}
|
||||
|
||||
public function testGetFieldListWithAsteriskPlusOnParentClass(): void
|
||||
{
|
||||
$aList = RestUtils::GetFieldList(Ticket::class, (object) ['output_fields' => '*+'], 'output_fields');
|
||||
$this->assertArrayHasKey(Ticket::class, $aList);
|
||||
$this->assertArrayHasKey(UserRequest::class, $aList);
|
||||
$this->assertContains('operational_status', $aList[Ticket::class]);
|
||||
$this->assertContains('status', $aList[UserRequest::class]);
|
||||
}
|
||||
|
||||
public function testGetFieldListForMultipleClasses(): void
|
||||
{
|
||||
$aList = RestUtils::GetFieldList(Ticket::class, (object) ['output_fields' => 'Ticket:ref,start_date,end_date;UserRequest:ref,status'], 'output_fields');
|
||||
$this->assertArrayHasKey(Ticket::class, $aList);
|
||||
$this->assertArrayHasKey(UserRequest::class, $aList);
|
||||
$this->assertContains('ref', $aList[Ticket::class]);
|
||||
$this->assertContains('end_date', $aList[Ticket::class]);
|
||||
$this->assertNotContains('status', $aList[Ticket::class]);
|
||||
$this->assertContains('status', $aList[UserRequest::class]);
|
||||
$this->assertNotContains('end_date', $aList[UserRequest::class]);
|
||||
}
|
||||
|
||||
public function testGetFieldListForMultipleClassesWithInvalidFieldNameFails(): void
|
||||
{
|
||||
$this->expectException(\Exception::class);
|
||||
$this->expectExceptionMessage('output_fields: invalid attribute code \'something\'');
|
||||
RestUtils::GetFieldList(Ticket::class, (object) ['output_fields' => 'Ticket:ref;UserRequest:ref,something'], 'output_fields');
|
||||
}
|
||||
|
||||
|
||||
public function testGetFieldListForMultipleClassesWithInvalidFieldName(): void
|
||||
{
|
||||
$aList = RestUtils::GetFieldList(Ticket::class, (object) ['output_fields' => 'ref, something'], 'output_fields', false);
|
||||
$this->assertContains('ref', $aList[Ticket::class]);
|
||||
$this->assertNotContains('something', $aList[Ticket::class]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @dataProvider extendedOutputDataProvider
|
||||
*/
|
||||
public function testIsExtendedOutputRequest(bool $bExpected, string $sFields): void
|
||||
{
|
||||
$this->assertSame($bExpected, RestUtils::HasRequestedExtendedOutput($sFields));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider allFieldsOutputDataProvider
|
||||
*/
|
||||
public function testIsAllFieldsOutputRequest(bool $bExpected, string $sFields): void
|
||||
{
|
||||
$this->assertSame($bExpected, RestUtils::HasRequestedAllOutputFields($sFields));
|
||||
}
|
||||
|
||||
public function extendedOutputDataProvider(): array
|
||||
{
|
||||
return [
|
||||
[false, 'ref,start_date,end_date'],
|
||||
[false, '*'],
|
||||
[true, '*+'],
|
||||
[false, 'Ticket:ref'],
|
||||
[true, 'Ticket:ref;UserRequest:ref'],
|
||||
];
|
||||
}
|
||||
|
||||
public function allFieldsOutputDataProvider(): array
|
||||
{
|
||||
return [
|
||||
[false, 'ref,start_date,end_date'],
|
||||
[true, '*'],
|
||||
[true, '*+'],
|
||||
[false, 'Ticket:ref'],
|
||||
[false, 'Ticket:ref;UserRequest:ref'],
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user