2 /*********************************************************************************
3 * SugarCRM Community Edition is a customer relationship management program developed by
4 * SugarCRM, Inc. Copyright (C) 2004-2012 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 'include/SubPanel/SubPanelDefinitions.php';
40 class Bug56652Test extends Sugar_PHPUnit_Framework_TestCase
46 * Account names are randomly sorted in order to make sure that the data is
47 * properly sorted by the application
51 protected $account_names = array(
52 'E', 'G', 'A', 'D', 'B', 'H', 'F', 'C'
56 * Sets up the fixture, for example, open a network connection.
57 * This method is called before a test is executed.
59 public function setUp()
61 SugarTestHelper::setUp('beanFiles');
62 SugarTestHelper::setUp('beanList');
63 SugarTestHelper::setUp('current_user');
66 $this->contact = SugarTestContactUtilities::createContact();
67 $this->contact->load_relationship('opportunities');
68 foreach ($this->account_names as $account_name)
70 $account = SugarTestAccountUtilities::createAccount();
71 $account->name = $account_name;
72 $account->save(false);
74 $opportunity = SugarTestOpportunityUtilities::createOpportunity(null, $account);
75 $this->contact->opportunities->add($opportunity);
80 * Tears down the fixture, for example, close a network connection.
81 * This method is called after a test is executed.
83 public function tearDown()
85 SugarTestAccountUtilities::removeAllCreatedAccounts();
86 SugarTestOpportunityUtilities::removeAllCreatedOpportunities();
87 SugarTestContactUtilities::removeAllCreatedContacts();
90 SugarTestHelper::tearDown();
94 * @param string $order
95 * @param string $function
96 * @dataProvider getOrders
98 public function testSubPanelDataIsSorted($order, $function)
100 // create a minimum required subpanel definition
101 $subPanel = new aSubPanel(null, array(
102 'module' => 'Opportunities',
103 'subpanel_name' => null,
104 'get_subpanel_data' => 'opportunities',
107 // fetch subpanel data
108 $response = SugarBean::get_union_related_list(
109 $this->contact, 'account_name', $order, '', 0, -1, -1, 0, $subPanel
112 $this->assertArrayHasKey('list', $response);
114 $account_names = array();
116 /** @var Opportunity $opportunity */
117 foreach ($response['list'] as $opportunity)
119 $account_names[] = $opportunity->account_name;
122 $sorted = $account_names;
125 // ensure that opportunities are sorted by account name in the needed order
126 $this->assertSame($sorted, $account_names);
132 public static function getOrders()
135 array('asc', 'sort'),
136 array('desc', 'rsort'),