Files
espocrm/tests/unit/Espo/Core/SelectManagers/BaseTest.php
2017-05-05 11:53:08 +03:00

296 lines
11 KiB
PHP

<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014-2017 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU General Public License version 3.
*
* In accordance with Section 7(b) of the GNU General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace tests\unit\Espo\Core\SelectManagers;
use \tests\unit\testData\Entities\Test2;
class BaseTest extends \PHPUnit_Framework_TestCase
{
protected function setUp()
{
$entity = $this->entity = new Test2();
$this->config = $this->getMockBuilder('\\Espo\\Core\\Utils\\Config')->disableOriginalConstructor()->getMock();
$this->acl = $this->getMockBuilder('\\Espo\\Core\\Acl')->disableOriginalConstructor()->getMock();
$this->aclManager = $this->getMockBuilder('\\Espo\\Core\\AclManager')->disableOriginalConstructor()->getMock();
$this->metadata = $this->getMockBuilder('\\Espo\\Core\\Utils\\Metadata')->disableOriginalConstructor()->getMock();
$this->entityManager = $this->getMockBuilder('\\Espo\\Core\\ORM\\EntityManager')->disableOriginalConstructor()->getMock();
$this->user = $this->getMockBuilder('\\Espo\\Entities\\User')->disableOriginalConstructor()->getMock();
$this->entityManager
->expects($this->any())
->method('getEntity')
->with($this->equalTo('Test2'))
->will($this->returnValue($this->entity));
$preferences = $this->preferences = $this->getMockBuilder('\\Espo\\Entities\\Preferences')->disableOriginalConstructor()->getMock();
$preferences
->expects($this->any())
->method('get')
->with($this->equalTo('timeZone'))
->will($this->returnValue('UTC'));
$this->entityManager
->expects($this->any())
->method('getEntity')
->will($this->returnCallback(function ($entityType, $id) use ($preferences, $entity) {
if ($entityType === 'Preferences') {
return $preferences;
}
if ($entityType === 'Test2') {
return $entity;
}
}));
$this->user->id = 'test_id';
}
protected function tearDown()
{
unset($this->entity);
unset($this->acl);
unset($this->aclManager);
unset($this->metadata);
unset($this->entityManager);
unset($this->user);
unset($this->preferences);
}
function testTestEmptySelectParams()
{
$selectManager = new \Espo\Core\SelectManagers\Base($this->entityManager, $this->user, $this->acl, $this->aclManager, $this->metadata, $this->config);
$selectManager->setEntityType('Test2');
$selectParams = $selectManager->getEmptySelectParams();
$this->assertArrayHasKey('joins', $selectParams);
$this->assertArrayHasKey('leftJoins', $selectParams);
$this->assertArrayHasKey('whereClause', $selectParams);
$this->assertArrayHasKey('customJoin', $selectParams);
}
function testGetEmptySelectParams()
{
$selectManager = new \Espo\Core\SelectManagers\Base($this->entityManager, $this->user, $this->acl, $this->aclManager, $this->metadata, $this->config);
$selectManager->setEntityType('Test2');
$selectParams = $selectManager->getEmptySelectParams();
$this->assertArrayHasKey('joins', $selectParams);
$this->assertArrayHasKey('leftJoins', $selectParams);
$this->assertArrayHasKey('whereClause', $selectParams);
$this->assertArrayHasKey('customJoin', $selectParams);
}
function testAccessOnlyOwn()
{
$selectManager = new \Espo\Core\SelectManagers\Base($this->entityManager, $this->user, $this->acl, $this->aclManager, $this->metadata, $this->config);
$selectManager->setEntityType('Test2');
$this->user
->expects($this->any())
->method('get')
->will($this->returnCallback(function ($name) {
if ($name === 'portalId') {
return null;
}
}));
$this->user
->expects($this->any())
->method('isAdmin')
->will($this->returnValue(false));
$this->acl
->expects($this->any())
->method('checkReadOnlyOwn')
->will($this->returnValue(true));
$selectParams = $selectManager->getEmptySelectParams();
$selectManager->applyAccess($selectParams);
$this->assertArrayHasKey('whereClause', $selectParams);
$this->assertArrayHasKey(0, $selectParams['whereClause']);
$this->assertArrayHasKey('assignedUserId', $selectParams['whereClause'][0]);
$this->assertEquals('test_id', $selectParams['whereClause'][0]['assignedUserId']);
}
function testAccessOnlyTeam()
{
$selectManager = new \Espo\Core\SelectManagers\Base($this->entityManager, $this->user, $this->acl, $this->aclManager, $this->metadata, $this->config);
$selectManager->setEntityType('Test2');
$this->user
->expects($this->any())
->method('get')
->will($this->returnCallback(function ($name) {
if ($name === 'portalId') {
return null;
}
}));
$this->user
->expects($this->any())
->method('getLinkMultipleIdList')
->with('teams')
->will($this->returnValue(['test_team_id']));
$this->user
->expects($this->any())
->method('isAdmin')
->will($this->returnValue(false));
$this->acl
->expects($this->any())
->method('checkReadOnlyTeam')
->will($this->returnValue(true));
$selectParams = $selectManager->getEmptySelectParams();
$selectManager->applyAccess($selectParams);
$this->assertArrayHasKey('whereClause', $selectParams);
$this->assertTrue($selectManager->hasLeftJoin('teamsAccess', $selectParams));
}
function testTextFilter()
{
$selectManager = new \Espo\Core\SelectManagers\Base($this->entityManager, $this->user, $this->acl, $this->aclManager, $this->metadata, $this->config);
$selectManager->setEntityType('Test2');
$this->metadata
->expects($this->once())
->method('get')
->with($this->equalTo('entityDefs.Test2.collection.textFilterFields'))
->will($this->returnValue(['name', 'text']));
$selectParams = $selectManager->getEmptySelectParams();
$selectManager->applyTextFilter('test', $selectParams);
$this->assertEquals('test%', $selectParams['whereClause'][0]['OR']['name*']);
$this->assertEquals('%test%', $selectParams['whereClause'][0]['OR']['text*']);
}
function testBuildSelectParams()
{
$selectManager = new \Espo\Core\SelectManagers\Base($this->entityManager, $this->user, $this->acl, $this->aclManager, $this->metadata, $this->config);
$selectManager->setEntityType('Test2');
$params = array(
'where' => array(
array(
'type' => 'equals',
'field'=> 'int',
'value' => 2
),
array(
'type' => 'or',
'value' => array(
array(
'type' => 'equals',
'field'=> 'date',
'value' => '2016-10-10'
),
array(
'type' => 'after',
'field'=> 'dateTime',
'value' => '2016-10-10 10:10:00'
)
)
)
),
'offset' => 5,
'maxSize' => 10,
'sortBy' => 'name',
'asc' => true
);
$selectParams = $selectManager->buildSelectParams($params);
$this->assertEquals(2, $selectParams['whereClause'][0]['int=']);
$this->assertEquals(5, $selectParams['offset']);
$this->assertEquals(10, $selectParams['limit']);
$this->assertEquals('name', $selectParams['orderBy']);
$this->assertEquals('2016-10-10', $selectParams['whereClause'][1]['OR'][0]['date=']);
$this->assertEquals('2016-10-10 10:10:00', $selectParams['whereClause'][1]['OR'][1]['dateTime>']);
}
function testBuildSelectParamsNot()
{
$selectManager = new \Espo\Core\SelectManagers\Base($this->entityManager, $this->user, $this->acl, $this->aclManager, $this->metadata, $this->config);
$selectManager->setEntityType('Test2');
$params = array(
'where' => array(
array(
'type' => 'not',
'value' => array(
array(
'type' => 'equals',
'attribute'=> 'date',
'value' => '2016-10-10'
),
array(
'type' => 'after',
'attribute'=> 'dateTime',
'value' => '2016-10-10 10:10:00'
)
)
)
)
);
$selectParams = $selectManager->buildSelectParams($params);
$this->assertEquals('2016-10-10', $selectParams['whereClause'][0]['NOT'][0]['date=']);
}
function testBuildSelectParamsComplex()
{
$selectManager = new \Espo\Core\SelectManagers\Base($this->entityManager, $this->user, $this->acl, $this->aclManager, $this->metadata, $this->config);
$selectManager->setEntityType('Test2');
$params = array(
'where' => array(
array(
'type' => 'equals',
'attribute'=> 'MONTH_NUMBER:dateTime',
'value' => 2
)
)
);
$selectParams = $selectManager->buildSelectParams($params);
$this->assertEquals(2, $selectParams['whereClause'][0]['MONTH_NUMBER:dateTime=']);
}
}