]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - tests/data/Relationships/Bug56904Test.php
Release 6.5.8
[Github/sugarcrm.git] / tests / data / Relationships / Bug56904Test.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('data/Link2.php');
39
40 /**
41  * @ticket 56904
42  */
43 class Bug56904Test extends Sugar_PHPUnit_Framework_TestCase
44 {
45     /**
46      * Ensures that relationships for all related beans are removed and return
47      * value is calculated based on the related beans remove results
48      *
49      * @param array $results
50      * @param bool $expected
51      * @dataProvider getRemoveResults
52      */
53     public function testAllRelationsAreRemoved(array $results, $expected)
54     {
55         $relationship = $this->getRelationshipMock($results);
56         $link         = $this->getLinkMock(count($results));
57
58         $result = $relationship->removeAll($link);
59         if ($expected)
60         {
61             $this->assertTrue($result);
62         }
63         else
64         {
65             $this->assertFalse($result);
66         }
67     }
68
69     /**
70      * Creates mock of SugarRelationship object which will return specified
71      * results on on consecutive SugarRelationship::remove() calls
72      *
73      * @param array $results
74      * @return SugarRelationship
75      */
76     protected function getRelationshipMock(array $results)
77     {
78         $mock = $this->getMockForAbstractClass('SugarRelationship');
79         $mock->expects($this->exactly(count($results)))
80             ->method('remove')
81             ->will(
82                 call_user_func_array(array($this, 'onConsecutiveCalls'), $results)
83             );
84         return $mock;
85     }
86
87     /**
88      * Creates mock of Link2 object with specified number of related beans
89      *
90      * @param int $count
91      * @return Link2
92      */
93     protected function getLinkMock($count)
94     {
95         if ($count > 0)
96         {
97             $bean  = new SugarBean();
98             $bean->id = 'Bug56904Test';
99             $beans = array_fill(0, $count, $bean);
100         }
101         else
102         {
103             $beans = array();
104         }
105
106         $mock = $this->getMock('Link2', array('getSide', 'getFocus', 'getBeans'), array(), '', false);
107         $mock->expects($this->any())
108             ->method('getSide')
109             ->will($this->returnValue(REL_LHS));
110         $mock->expects($this->any())
111             ->method('getFocus')
112             ->will($this->returnValue(new SugarBean()));
113         $mock->expects($this->any())
114             ->method('getBeans')
115             ->will($this->returnValue($beans));
116         return $mock;
117     }
118
119     /**
120      * Provides results that should be returned by SugarRelationship::remove()
121      * calls and expected result of SugarRelationship::removeAll()
122      *
123      * @return array
124      */
125     public static function getRemoveResults()
126     {
127         return array(
128             array(
129                 array(), true,
130             ),
131             array(
132                 array(true), true,
133             ),
134             array(
135                 array(false), false,
136             ),
137             array(
138                 array(true, false), false,
139             ),
140             array(
141                 array(false, true), false,
142             ),
143             array(
144                 array(false, false), false,
145             ),
146             array(
147                 array(true, true), true,
148             ),
149         );
150     }
151 }