APIv4 - Move list of accepted query operators to CoreUtil
[civicrm-core.git] / tests / phpunit / api / v4 / Action / GetFromArrayTest.php
1 <?php
2
3 /*
4 +--------------------------------------------------------------------+
5 | Copyright CiviCRM LLC. All rights reserved. |
6 | |
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 +--------------------------------------------------------------------+
11 */
12
13 /**
14 *
15 * @package CRM
16 * @copyright CiviCRM LLC https://civicrm.org/licensing
17 */
18
19
20 namespace api\v4\Action;
21
22 use api\v4\UnitTestCase;
23 use Civi\Api4\MockArrayEntity;
24
25 /**
26 * @group headless
27 */
28 class GetFromArrayTest extends UnitTestCase {
29
30 public function testArrayGetWithLimit() {
31 $result = MockArrayEntity::get()
32 ->setOffset(2)
33 ->setLimit(2)
34 ->execute();
35 $this->assertEquals(3, $result[0]['field1']);
36 $this->assertEquals(4, $result[1]['field1']);
37
38 // The object's count() method will account for all results, ignoring limit, while the array results are limited
39 $this->assertCount(2, (array) $result);
40 $this->assertCount(5, $result);
41 }
42
43 public function testArrayGetWithSort() {
44 $result = MockArrayEntity::get()
45 ->addOrderBy('field1', 'DESC')
46 ->execute();
47 $this->assertEquals([5, 4, 3, 2, 1], array_column((array) $result, 'field1'));
48
49 $result = MockArrayEntity::get()
50 ->addOrderBy('field5', 'DESC')
51 ->addOrderBy('field2', 'ASC')
52 ->execute();
53 $this->assertEquals([3, 2, 5, 4, 1], array_column((array) $result, 'field1'));
54
55 $result = MockArrayEntity::get()
56 ->addOrderBy('field3', 'ASC')
57 ->addOrderBy('field2', 'ASC')
58 ->execute();
59 $this->assertEquals([3, 1, 2, 5, 4], array_column((array) $result, 'field1'));
60 }
61
62 public function testArrayGetWithSelect() {
63 $result = MockArrayEntity::get()
64 ->addSelect('field1')
65 ->addSelect('f*3')
66 ->setLimit(4)
67 ->execute();
68 $this->assertEquals([
69 [
70 'field1' => 1,
71 'field3' => NULL,
72 ],
73 [
74 'field1' => 2,
75 'field3' => 0,
76 ],
77 [
78 'field1' => 3,
79 ],
80 [
81 'field1' => 4,
82 'field3' => 1,
83 ],
84 ], (array) $result);
85 }
86
87 public function testArrayGetWithWhere() {
88 $result = MockArrayEntity::get()
89 ->addWhere('field2', '=', 'yack')
90 ->execute();
91 $this->assertEquals([2], array_column((array) $result, 'field1'));
92
93 $result = MockArrayEntity::get()
94 ->addWhere('field5', '!=', 'banana')
95 ->addWhere('field3', 'IS NOT NULL')
96 ->execute();
97 $this->assertEquals([4, 5], array_column((array) $result, 'field1'));
98
99 $result = MockArrayEntity::get()
100 ->addWhere('field1', '>=', '4')
101 ->execute();
102 $this->assertEquals([4, 5], array_column((array) $result, 'field1'));
103
104 $result = MockArrayEntity::get()
105 ->addWhere('field1', '<', '2')
106 ->execute();
107 $this->assertEquals([1], array_column((array) $result, 'field1'));
108
109 $result = MockArrayEntity::get()
110 ->addWhere('field2', 'LIKE', '%ra%')
111 ->execute();
112 $this->assertEquals([1, 3], array_column((array) $result, 'field1'));
113
114 $result = MockArrayEntity::get()
115 ->addWhere('field3', 'IS NULL')
116 ->execute();
117 $this->assertEquals([1, 3], array_column((array) $result, 'field1'));
118
119 $result = MockArrayEntity::get()
120 ->addWhere('field3', '=', '0')
121 ->execute();
122 $this->assertEquals([2], array_column((array) $result, 'field1'));
123
124 $result = MockArrayEntity::get()
125 ->addWhere('field2', 'LIKE', '%ra')
126 ->execute();
127 $this->assertEquals([1], array_column((array) $result, 'field1'));
128
129 $result = MockArrayEntity::get()
130 ->addWhere('field2', 'LIKE', 'ra')
131 ->execute();
132 $this->assertEquals(0, count($result));
133
134 $result = MockArrayEntity::get()
135 ->addWhere('field2', 'NOT LIKE', '%ra%')
136 ->execute();
137 $this->assertEquals([2, 4, 5], array_column((array) $result, 'field1'));
138
139 $result = MockArrayEntity::get()
140 ->addWhere('field6', '=', '0')
141 ->execute();
142 $this->assertEquals([3, 4, 5], array_column((array) $result, 'field1'));
143
144 $result = MockArrayEntity::get()
145 ->addWhere('field6', '=', 0)
146 ->execute();
147 $this->assertEquals([3, 4, 5], array_column((array) $result, 'field1'));
148
149 $result = MockArrayEntity::get()
150 ->addWhere('field1', 'BETWEEN', [3, 5])
151 ->execute();
152 $this->assertEquals([3, 4, 5], array_column((array) $result, 'field1'));
153
154 $result = MockArrayEntity::get()
155 ->addWhere('field1', 'NOT BETWEEN', [3, 4])
156 ->execute();
157 $this->assertEquals([1, 2, 5], array_column((array) $result, 'field1'));
158 }
159
160 public function testArrayGetWithNestedWhereClauses() {
161 $result = MockArrayEntity::get()
162 ->addClause('OR', ['field2', 'LIKE', '%ra'], ['field2', 'LIKE', 'x ray'])
163 ->execute();
164 $this->assertEquals([1, 3], array_column((array) $result, 'field1'));
165
166 $result = MockArrayEntity::get()
167 ->addClause('OR', ['field2', '=', 'zebra'], ['field2', '=', 'yack'])
168 ->addClause('OR', ['field5', '!=', 'apple'], ['field3', 'IS NULL'])
169 ->execute();
170 $this->assertEquals([1, 2], array_column((array) $result, 'field1'));
171
172 $result = MockArrayEntity::get()
173 ->addClause('NOT', ['field2', '!=', 'yack'])
174 ->execute();
175 $this->assertEquals([2], array_column((array) $result, 'field1'));
176
177 $result = MockArrayEntity::get()
178 ->addClause('OR', ['field1', '=', 2], ['AND', [['field5', '=', 'apple'], ['field3', '=', 1]]])
179 ->execute();
180 $this->assertEquals([2, 4, 5], array_column((array) $result, 'field1'));
181 }
182
183 }