mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-13 15:34:12 +01:00
"Return type declaration must be compatible with parent"
See https://phpunit.de/announcements/phpunit-8.html "Return Type of Template Methods"
Was done in support/2.7 (ec143c43) but there is one new test in this branch...
200 lines
4.8 KiB
PHP
200 lines
4.8 KiB
PHP
<?php
|
|
/**
|
|
* Copyright (C) 2018 Dennis Lassiter
|
|
*
|
|
* This file is part of iTop.
|
|
*
|
|
* iTop 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
|
|
* (at your option) any later version.
|
|
*
|
|
* iTop 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 iTop. If not, see <http://www.gnu.org/licenses/>
|
|
*
|
|
*/
|
|
|
|
namespace Combodo\iTop\Test\UnitTest\Application\Search;
|
|
|
|
use Combodo\iTop\Test\UnitTest\ItopDataTestCase;
|
|
use MetaModel;
|
|
use Query;
|
|
use QueryOQL;
|
|
|
|
/**
|
|
* This test creates call export on requests and check request usage counter.
|
|
*
|
|
* Transaction are disabled to avoid data inconsistency between test and call to export (outside test scope)
|
|
* All objects created in this test will be deleted by the test.
|
|
*
|
|
* @group iTopQuery
|
|
* @runTestsInSeparateProcesses
|
|
* @preserveGlobalState disabled
|
|
* @backupGlobals disabled
|
|
*/
|
|
class QueryTest extends ItopDataTestCase
|
|
{
|
|
// disable transaction to avoid data inconsistency between test and call to export (outside test scope)
|
|
const USE_TRANSACTION = false;
|
|
|
|
// user for exportation process
|
|
const USER = 'dani2';
|
|
const PASSWORD = '1TopCombodo+';
|
|
private $oUser;
|
|
|
|
/** @inheritDoc */
|
|
public function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
|
|
// create export user
|
|
$this->CreateExportUser();
|
|
}
|
|
|
|
/**
|
|
* Create new user for export authentication purpose.
|
|
*/
|
|
private function CreateExportUser()
|
|
{
|
|
$oAdminProfile = MetaModel::GetObjectFromOQL("SELECT URP_Profiles WHERE name = :name", array('name' => 'Administrator'), true);
|
|
$this->oUser = $this->CreateUser(self::USER, $oAdminProfile->GetKey(), self::PASSWORD);
|
|
}
|
|
|
|
/**
|
|
* Create an OQL query to list Person objects.
|
|
*
|
|
* @param string $sName query name
|
|
* @param string $sDescription query description
|
|
* @param string $sOql query oql phrase
|
|
* @param string|null $sFields fields to export
|
|
*/
|
|
private function CreateQueryOQL(string $sName, string $sDescription, string $sOql, string $sFields = null) : QueryOQL
|
|
{
|
|
$oQuery = new QueryOQL();
|
|
$oQuery->Set('name', $sName);
|
|
$oQuery->Set('description', $sDescription);
|
|
$oQuery->Set('oql', $sOql);
|
|
|
|
if($sFields != null){
|
|
$oQuery->Set('fields', $sFields);
|
|
}
|
|
|
|
$oQuery->DBInsert();
|
|
|
|
return $oQuery;
|
|
}
|
|
|
|
/**
|
|
* Test query export V1 usage.
|
|
*
|
|
* @param string $sDescription query description
|
|
* @param string $sOql query oql phrase
|
|
*
|
|
* @dataProvider getQueryProvider
|
|
*/
|
|
public function testQueryExportV1Usage(string $sDescription, string $sOql)
|
|
{
|
|
// create query OQL
|
|
$oQuery = $this->CreateQueryOQL($this->dataName(), $sDescription, $sOql);
|
|
|
|
// call export service
|
|
$this->CallExportService($oQuery);
|
|
|
|
// reload to update counter (done by export process)
|
|
$oQuery->Reload();
|
|
|
|
// extract counter
|
|
$iResult = $oQuery->Get('export_count');
|
|
|
|
// delete the query
|
|
$oQuery->DBDelete();
|
|
|
|
// test
|
|
$this->assertEquals(1, $iResult);
|
|
}
|
|
|
|
/**
|
|
* Test query export V2 usage.
|
|
*
|
|
* @param string $sDescription query description
|
|
* @param string $sOql query oql phrase
|
|
*
|
|
* @dataProvider getQueryProvider
|
|
*/
|
|
public function testQueryExportV2Usage(string $sDescription, string $sOql)
|
|
{
|
|
// create query OQL
|
|
$oQuery = $this->CreateQueryOQL($this->dataName(), $sDescription, $sOql, 'first_name');
|
|
|
|
// call export service
|
|
$this->CallExportService($oQuery);
|
|
|
|
// reload to update counter (done by export process)
|
|
$oQuery->Reload();
|
|
|
|
// extract counter
|
|
$iResult = $oQuery->Get('export_count');
|
|
|
|
// delete the query
|
|
$oQuery->DBDelete();
|
|
|
|
// test
|
|
$this->assertEquals(1, $iResult);
|
|
}
|
|
|
|
/**
|
|
* Data provide for test.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getQueryProvider()
|
|
{
|
|
return array(
|
|
'Export #1' => array('query without params', 'SELECT Person'),
|
|
'Export #2' => array('query with params', "SELECT Person WHERE first_name LIKE 'B%'")
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Call export for given query object.
|
|
*
|
|
* @param \Query $oQuery
|
|
*
|
|
* @return bool|string
|
|
*/
|
|
private function CallExportService(Query $oQuery)
|
|
{
|
|
// compute request url
|
|
$url = $oQuery->GetExportUrl();
|
|
|
|
// open curl
|
|
$curl = curl_init();
|
|
|
|
// curl options
|
|
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
|
|
curl_setopt($curl, CURLOPT_USERPWD, self::USER . ':' . self::PASSWORD);
|
|
curl_setopt($curl, CURLOPT_URL, $url);
|
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
|
|
|
// execute curl
|
|
$result = curl_exec($curl);
|
|
|
|
// close curl
|
|
curl_close($curl);
|
|
|
|
return $result;
|
|
}
|
|
|
|
/** @inheritDoc */
|
|
protected function tearDown(): void
|
|
{
|
|
$this->oUser->DBDelete();
|
|
}
|
|
|
|
}
|