Afform - Provide `base_module` calculated field to APIv4 Afform.get
[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 'field3' => NULL,
80 ],
81 [
82 'field1' => 4,
83 'field3' => 1,
84 ],
85 ], (array) $result);
86 }
87
88 public function testArrayGetWithWhere() {
89 $result = MockArrayEntity::get()
90 ->addWhere('field2', '=', 'yack')
91 ->execute();
92 $this->assertEquals([2], array_column((array) $result, 'field1'));
93
94 $result = MockArrayEntity::get()
95 ->addWhere('field5', '!=', 'banana')
96 ->addWhere('field3', 'IS NOT NULL')
97 ->execute();
98 $this->assertEquals([4, 5], array_column((array) $result, 'field1'));
99
100 $result = MockArrayEntity::get()
101 ->addWhere('field1', '>=', '4')
102 ->execute();
103 $this->assertEquals([4, 5], array_column((array) $result, 'field1'));
104
105 $result = MockArrayEntity::get()
106 ->addWhere('field1', '<', '2')
107 ->execute();
108 $this->assertEquals([1], array_column((array) $result, 'field1'));
109
110 $result = MockArrayEntity::get()
111 ->addWhere('field2', 'LIKE', '%ra%')
112 ->execute();
113 $this->assertEquals([1, 3], array_column((array) $result, 'field1'));
114
115 $result = MockArrayEntity::get()
116 ->addWhere('field2', 'REGEXP', '(zebra|yac[a-z]|something/else)')
117 ->execute();
118 $this->assertEquals([1, 2], array_column((array) $result, 'field1'));
119
120 $result = MockArrayEntity::get()
121 ->addWhere('field2', 'NOT REGEXP', '^[x|y|z]')
122 ->execute();
123 $this->assertEquals([4, 5], array_column((array) $result, 'field1'));
124
125 $result = MockArrayEntity::get()
126 ->addWhere('field3', 'IS NULL')
127 ->execute();
128 $this->assertEquals([1, 3], array_column((array) $result, 'field1'));
129
130 $result = MockArrayEntity::get()
131 ->addWhere('field3', '=', '0')
132 ->execute();
133 $this->assertEquals([2], array_column((array) $result, 'field1'));
134
135 $result = MockArrayEntity::get()
136 ->addWhere('field2', 'LIKE', '%ra')
137 ->execute();
138 $this->assertEquals([1], array_column((array) $result, 'field1'));
139
140 $result = MockArrayEntity::get()
141 ->addWhere('field2', 'LIKE', 'ra')
142 ->execute();
143 $this->assertEquals(0, count($result));
144
145 $result = MockArrayEntity::get()
146 ->addWhere('field2', 'NOT LIKE', '%ra%')
147 ->execute();
148 $this->assertEquals([2, 4, 5], array_column((array) $result, 'field1'));
149
150 $result = MockArrayEntity::get()
151 ->addWhere('field6', '=', '0')
152 ->execute();
153 $this->assertEquals([3, 4, 5], array_column((array) $result, 'field1'));
154
155 $result = MockArrayEntity::get()
156 ->addWhere('field6', '=', 0)
157 ->execute();
158 $this->assertEquals([3, 4, 5], array_column((array) $result, 'field1'));
159
160 $result = MockArrayEntity::get()
161 ->addWhere('field1', 'BETWEEN', [3, 5])
162 ->execute();
163 $this->assertEquals([3, 4, 5], array_column((array) $result, 'field1'));
164
165 $result = MockArrayEntity::get()
166 ->addWhere('field1', 'NOT BETWEEN', [3, 4])
167 ->execute();
168 $this->assertEquals([1, 2, 5], array_column((array) $result, 'field1'));
169 }
170
171 public function testArrayGetWithNestedWhereClauses() {
172 $result = MockArrayEntity::get()
173 ->addClause('OR', ['field2', 'LIKE', '%ra'], ['field2', 'LIKE', 'x ray'])
174 ->execute();
175 $this->assertEquals([1, 3], array_column((array) $result, 'field1'));
176
177 $result = MockArrayEntity::get()
178 ->addClause('OR', ['field2', '=', 'zebra'], ['field2', '=', 'yack'])
179 ->addClause('OR', ['field5', '!=', 'apple'], ['field3', 'IS NULL'])
180 ->execute();
181 $this->assertEquals([1, 2], array_column((array) $result, 'field1'));
182
183 $result = MockArrayEntity::get()
184 ->addClause('NOT', ['field2', '!=', 'yack'])
185 ->execute();
186 $this->assertEquals([2], array_column((array) $result, 'field1'));
187
188 $result = MockArrayEntity::get()
189 ->addClause('OR', ['field1', '=', 2], ['AND', [['field5', '=', 'apple'], ['field3', '=', 1]]])
190 ->execute();
191 $this->assertEquals([2, 4, 5], array_column((array) $result, 'field1'));
192 }
193
194 }