]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - tests/data/Bug56652Test.php
Release 6.5.8
[Github/sugarcrm.git] / tests / data / Bug56652Test.php
1 <?php
2 /*********************************************************************************
3  * SugarCRM Community Edition is a customer relationship management program developed by
4  * SugarCRM, Inc. Copyright (C) 2004-2012 SugarCRM Inc.
5  * 
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.
12  * 
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
16  * details.
17  * 
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
21  * 02110-1301 USA.
22  * 
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.
25  * 
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.
29  * 
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  ********************************************************************************/
36
37
38 require_once 'include/SubPanel/SubPanelDefinitions.php';
39
40 class Bug56652Test extends Sugar_PHPUnit_Framework_TestCase
41 {
42     /** @var Contact */
43     protected $contact;
44
45     /**
46      * Account names are randomly sorted in order to make sure that the data is
47      * properly sorted by the application
48      *
49      * @var array
50      */
51     protected $account_names = array(
52         'E', 'G', 'A', 'D', 'B', 'H', 'F', 'C'
53     );
54
55     /**
56      * Sets up the fixture, for example, open a network connection.
57      * This method is called before a test is executed.
58      */
59     public function setUp()
60     {
61         SugarTestHelper::setUp('beanFiles');
62         SugarTestHelper::setUp('beanList');
63         SugarTestHelper::setUp('current_user');
64
65         parent::setUp();
66         $this->contact = SugarTestContactUtilities::createContact();
67         $this->contact->load_relationship('opportunities');
68         foreach ($this->account_names as $account_name)
69         {
70             $account = SugarTestAccountUtilities::createAccount();
71             $account->name = $account_name;
72             $account->save(false);
73
74             $opportunity = SugarTestOpportunityUtilities::createOpportunity(null, $account);
75             $this->contact->opportunities->add($opportunity);
76         }
77     }
78
79     /**
80      * Tears down the fixture, for example, close a network connection.
81      * This method is called after a test is executed.
82      */
83     public function tearDown()
84     {
85         SugarTestAccountUtilities::removeAllCreatedAccounts();
86         SugarTestOpportunityUtilities::removeAllCreatedOpportunities();
87         SugarTestContactUtilities::removeAllCreatedContacts();
88         parent::tearDown();
89
90         SugarTestHelper::tearDown();
91     }
92
93     /**
94      * @param string $order
95      * @param string $function
96      * @dataProvider getOrders
97      */
98     public function testSubPanelDataIsSorted($order, $function)
99     {
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',
105         ), $this->contact);
106
107         // fetch subpanel data
108         $response = SugarBean::get_union_related_list(
109             $this->contact, 'account_name', $order, '', 0, -1, -1, 0, $subPanel
110         );
111
112         $this->assertArrayHasKey('list', $response);
113
114         $account_names = array();
115
116         /** @var Opportunity $opportunity */
117         foreach ($response['list'] as $opportunity)
118         {
119             $account_names[] = $opportunity->account_name;
120         }
121
122         $sorted = $account_names;
123         $function($sorted);
124
125         // ensure that opportunities are sorted by account name in the needed order
126         $this->assertSame($sorted, $account_names);
127     }
128
129     /**
130      * @return array
131      */
132     public static function getOrders()
133     {
134         return array(
135             array('asc',  'sort'),
136             array('desc', 'rsort'),
137         );
138     }
139 }