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