2 /*********************************************************************************
3 * SugarCRM Community Edition is a customer relationship management program developed by
4 * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc.
6 * This program is free software; you can redistribute it and/or modify it under
7 * the terms of the GNU Affero General Public License version 3 as published by the
8 * Free Software Foundation with the addition of the following permission added
9 * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
10 * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
11 * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
13 * This program is distributed in the hope that it will be useful, but WITHOUT
14 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15 * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
18 * You should have received a copy of the GNU Affero General Public License along with
19 * this program; if not, see http://www.gnu.org/licenses or write to the Free
20 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
23 * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
24 * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
26 * The interactive user interfaces in modified source and object code versions
27 * of this program must display Appropriate Legal Notices, as required under
28 * Section 5 of the GNU Affero General Public License version 3.
30 * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
31 * these Appropriate Legal Notices must retain the display of the "Powered by
32 * SugarCRM" logo. If the display of the logo is not reasonably feasible for
33 * technical reasons, the Appropriate Legal Notices must display the words
34 * "Powered by SugarCRM".
35 ********************************************************************************/
38 require_once("modules/ModuleBuilder/parsers/views/SearchViewMetaDataParser.php");
39 require_once("modules/ModuleBuilder/parsers/views/DeployedMetaDataImplementation.php");
41 class SearchViewMetaDataParserTest extends Sugar_PHPUnit_Framework_TestCase
45 public function setUp()
50 public function tearDown()
56 * Bug 40530 returned faulty search results when a assigned_to relate field was used on the basic search
57 * The fix is making the widgets consistent between Basic and Advanced search when there is no definition
58 * for basic search. This was implemented in getOriginalViewDefs and that is what is being tested here.
60 public function test_Bug40530_getOriginalViewDefs()
63 // NOTE This is sample data from the live application used for test verification purposes
84 'current_user_only' =>
86 'name' => 'current_user_only',
87 'label' => 'LBL_CURRENT_USER_FILTER',
94 'name' => 'favorites_only',
95 'label' => 'LBL_FAVORITES_FILTER',
116 'label' => 'LBL_ANY_PHONE',
124 'label' => 'LBL_ANY_EMAIL',
131 'name' => 'address_street',
132 'label' => 'LBL_ANY_ADDRESS',
139 'name' => 'address_city',
140 'label' => 'LBL_CITY',
147 'name' => 'address_state',
148 'label' => 'LBL_STATE',
153 'address_postalcode' =>
155 'name' => 'address_postalcode',
156 'label' => 'LBL_POSTAL_CODE',
161 'billing_address_country' =>
163 'name' => 'billing_address_country',
164 'label' => 'LBL_COUNTRY',
166 'options' => 'countries_dom',
172 'name' => 'account_type',
178 'name' => 'industry',
182 'assigned_user_id' =>
184 'name' => 'assigned_user_id',
186 'label' => 'LBL_ASSIGNED_TO',
189 'name' => 'get_user_array',
200 'name' => 'favorites_only',
201 'label' => 'LBL_FAVORITES_FILTER',
208 $expectedResult = array(
224 'label' => 'LBL_ANY_PHONE',
232 'label' => 'LBL_ANY_EMAIL',
239 'name' => 'address_street',
240 'label' => 'LBL_ANY_ADDRESS',
247 'name' => 'address_city',
248 'label' => 'LBL_CITY',
255 'name' => 'address_state',
256 'label' => 'LBL_STATE',
261 'address_postalcode' =>
263 'name' => 'address_postalcode',
264 'label' => 'LBL_POSTAL_CODE',
269 'billing_address_country' =>
271 'name' => 'billing_address_country',
272 'label' => 'LBL_COUNTRY',
274 'options' => 'countries_dom',
280 'name' => 'account_type',
286 'name' => 'industry',
290 'assigned_user_id' =>
292 'name' => 'assigned_user_id',
294 'label' => 'LBL_ASSIGNED_TO',
297 'name' => 'get_user_array',
308 'name' => 'favorites_only',
309 'label' => 'LBL_FAVORITES_FILTER',
312 'current_user_only' =>
314 'name' => 'current_user_only',
315 'label' => 'LBL_CURRENT_USER_FILTER',
322 // We use a derived class to aid in stubbing out test properties and functions
323 $parser = new SearchViewMetaDataParserTestDerivative("basic_search");
325 // Creating a mock object for the DeployedMetaDataImplementation
327 $impl = $this->getMock('DeployedMetaDataImplementation',
328 array('getOriginalViewdefs'),
330 'DeployedMetaDataImplementation_Mock',
333 // Making the getOriginalViewdefs function return the test viewdefs and verify that it is being called once
334 $impl->expects($this->once())
335 ->method('getOriginalViewdefs')
336 ->will($this->returnValue($orgViewDefs));
338 // Replace the protected implementation with our Mock object
339 $parser->setImpl($impl);
341 // Execute the method under test
342 $result = $parser->getOriginalViewDefs();
344 // Verify that the returned result matches our expectations
345 $this->assertEquals($result, $expectedResult);
353 * Using derived helper class from SearchViewMetaDataParser to avoid having to fully
354 * initialize the whole class and to give us the flexibility to replace the
355 * Deploy/Undeploy MetaDataImplementation
357 class SearchViewMetaDataParserTestDerivative extends SearchViewMetaDataParser
359 function __construct ($layout){
360 $this->_searchLayout = $layout;
363 function setImpl($impl) {
364 $this->implementation = $impl;