4 +--------------------------------------------------------------------+
5 | Copyright CiviCRM LLC. All rights reserved. |
7 | This work is published under the GNU AGPLv3 license with some |
8 | permitted exceptions and without any warranty. For full license |
9 | and copyright information, see https://civicrm.org/licensing |
10 +--------------------------------------------------------------------+
16 * @copyright CiviCRM LLC https://civicrm.org/licensing
22 namespace api\v
4\Action
;
24 use api\v
4\UnitTestCase
;
25 use Civi\Api4\MockArrayEntity
;
30 class GetFromArrayTest
extends UnitTestCase
{
32 public function testArrayGetWithLimit() {
33 $result = MockArrayEntity
::get()
37 $this->assertEquals(3, $result[0]['field1']);
38 $this->assertEquals(4, $result[1]['field1']);
39 $this->assertEquals(2, count($result));
42 public function testArrayGetWithSort() {
43 $result = MockArrayEntity
::get()
44 ->addOrderBy('field1', 'DESC')
46 $this->assertEquals([5, 4, 3, 2, 1], array_column((array) $result, 'field1'));
48 $result = MockArrayEntity
::get()
49 ->addOrderBy('field5', 'DESC')
50 ->addOrderBy('field2', 'ASC')
52 $this->assertEquals([3, 2, 5, 4, 1], array_column((array) $result, 'field1'));
54 $result = MockArrayEntity
::get()
55 ->addOrderBy('field3', 'ASC')
56 ->addOrderBy('field2', 'ASC')
58 $this->assertEquals([3, 1, 2, 5, 4], array_column((array) $result, 'field1'));
61 public function testArrayGetWithSelect() {
62 $result = MockArrayEntity
::get()
86 public function testArrayGetWithWhere() {
87 $result = MockArrayEntity
::get()
88 ->addWhere('field2', '=', 'yack')
90 $this->assertEquals([2], array_column((array) $result, 'field1'));
92 $result = MockArrayEntity
::get()
93 ->addWhere('field5', '!=', 'banana')
94 ->addWhere('field3', 'IS NOT NULL')
96 $this->assertEquals([4, 5], array_column((array) $result, 'field1'));
98 $result = MockArrayEntity
::get()
99 ->addWhere('field1', '>=', '4')
101 $this->assertEquals([4, 5], array_column((array) $result, 'field1'));
103 $result = MockArrayEntity
::get()
104 ->addWhere('field1', '<', '2')
106 $this->assertEquals([1], array_column((array) $result, 'field1'));
108 $result = MockArrayEntity
::get()
109 ->addWhere('field2', 'LIKE', '%ra%')
111 $this->assertEquals([1, 3], array_column((array) $result, 'field1'));
113 $result = MockArrayEntity
::get()
114 ->addWhere('field3', 'IS NULL')
116 $this->assertEquals([1, 3], array_column((array) $result, 'field1'));
118 $result = MockArrayEntity
::get()
119 ->addWhere('field3', '=', '0')
121 $this->assertEquals([2], array_column((array) $result, 'field1'));
123 $result = MockArrayEntity
::get()
124 ->addWhere('field2', 'LIKE', '%ra')
126 $this->assertEquals([1], array_column((array) $result, 'field1'));
128 $result = MockArrayEntity
::get()
129 ->addWhere('field2', 'LIKE', 'ra')
131 $this->assertEquals(0, count($result));
133 $result = MockArrayEntity
::get()
134 ->addWhere('field2', 'NOT LIKE', '%ra%')
136 $this->assertEquals([2, 4, 5], array_column((array) $result, 'field1'));
138 $result = MockArrayEntity
::get()
139 ->addWhere('field6', '=', '0')
141 $this->assertEquals([3, 4, 5], array_column((array) $result, 'field1'));
143 $result = MockArrayEntity
::get()
144 ->addWhere('field6', '=', 0)
146 $this->assertEquals([3, 4, 5], array_column((array) $result, 'field1'));
148 $result = MockArrayEntity
::get()
149 ->addWhere('field1', 'BETWEEN', [3, 5])
151 $this->assertEquals([3, 4, 5], array_column((array) $result, 'field1'));
153 $result = MockArrayEntity
::get()
154 ->addWhere('field1', 'NOT BETWEEN', [3, 4])
156 $this->assertEquals([1, 2, 5], array_column((array) $result, 'field1'));
159 public function testArrayGetWithNestedWhereClauses() {
160 $result = MockArrayEntity
::get()
161 ->addClause('OR', ['field2', 'LIKE', '%ra'], ['field2', 'LIKE', 'x ray'])
163 $this->assertEquals([1, 3], array_column((array) $result, 'field1'));
165 $result = MockArrayEntity
::get()
166 ->addClause('OR', ['field2', '=', 'zebra'], ['field2', '=', 'yack'])
167 ->addClause('OR', ['field5', '!=', 'apple'], ['field3', 'IS NULL'])
169 $this->assertEquals([1, 2], array_column((array) $result, 'field1'));
171 $result = MockArrayEntity
::get()
172 ->addClause('NOT', ['field2', '!=', 'yack'])
174 $this->assertEquals([2], array_column((array) $result, 'field1'));
176 $result = MockArrayEntity
::get()
177 ->addClause('OR', ['field1', '=', 2], ['AND', [['field5', '=', 'apple'], ['field3', '=', 1]]])
179 $this->assertEquals([2, 4, 5], array_column((array) $result, 'field1'));