Merge pull request #17163 from jitendrapurohit/core-1731
[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']);
39 $this->assertEquals(2, count($result));
40 }
41
42 public function testArrayGetWithSort() {
43 $result = MockArrayEntity::get()
44 ->addOrderBy('field1', 'DESC')
45 ->execute();
46 $this->assertEquals([5, 4, 3, 2, 1], array_column((array) $result, 'field1'));
47
48 $result = MockArrayEntity::get()
49 ->addOrderBy('field5', 'DESC')
50 ->addOrderBy('field2', 'ASC')
51 ->execute();
52 $this->assertEquals([3, 2, 5, 4, 1], array_column((array) $result, 'field1'));
53
54 $result = MockArrayEntity::get()
55 ->addOrderBy('field3', 'ASC')
56 ->addOrderBy('field2', 'ASC')
57 ->execute();
58 $this->assertEquals([3, 1, 2, 5, 4], array_column((array) $result, 'field1'));
59 }
60
61 public function testArrayGetWithSelect() {
62 $result = MockArrayEntity::get()
63 ->addSelect('field1')
39e0f675 64 ->addSelect('f*3')
19b53e5b
C
65 ->setLimit(4)
66 ->execute();
67 $this->assertEquals([
68 [
69 'field1' => 1,
70 'field3' => NULL,
71 ],
72 [
73 'field1' => 2,
74 'field3' => 0,
75 ],
76 [
77 'field1' => 3,
78 ],
79 [
80 'field1' => 4,
81 'field3' => 1,
82 ],
83 ], (array) $result);
84 }
85
86 public function testArrayGetWithWhere() {
87 $result = MockArrayEntity::get()
88 ->addWhere('field2', '=', 'yack')
89 ->execute();
90 $this->assertEquals([2], array_column((array) $result, 'field1'));
91
92 $result = MockArrayEntity::get()
93 ->addWhere('field5', '!=', 'banana')
94 ->addWhere('field3', 'IS NOT NULL')
95 ->execute();
96 $this->assertEquals([4, 5], array_column((array) $result, 'field1'));
97
98 $result = MockArrayEntity::get()
99 ->addWhere('field1', '>=', '4')
100 ->execute();
101 $this->assertEquals([4, 5], array_column((array) $result, 'field1'));
102
103 $result = MockArrayEntity::get()
104 ->addWhere('field1', '<', '2')
105 ->execute();
106 $this->assertEquals([1], array_column((array) $result, 'field1'));
107
108 $result = MockArrayEntity::get()
109 ->addWhere('field2', 'LIKE', '%ra%')
110 ->execute();
111 $this->assertEquals([1, 3], array_column((array) $result, 'field1'));
112
113 $result = MockArrayEntity::get()
114 ->addWhere('field3', 'IS NULL')
115 ->execute();
116 $this->assertEquals([1, 3], array_column((array) $result, 'field1'));
117
118 $result = MockArrayEntity::get()
119 ->addWhere('field3', '=', '0')
120 ->execute();
121 $this->assertEquals([2], array_column((array) $result, 'field1'));
122
123 $result = MockArrayEntity::get()
124 ->addWhere('field2', 'LIKE', '%ra')
125 ->execute();
126 $this->assertEquals([1], array_column((array) $result, 'field1'));
127
128 $result = MockArrayEntity::get()
129 ->addWhere('field2', 'LIKE', 'ra')
130 ->execute();
131 $this->assertEquals(0, count($result));
132
133 $result = MockArrayEntity::get()
134 ->addWhere('field2', 'NOT LIKE', '%ra%')
135 ->execute();
136 $this->assertEquals([2, 4, 5], array_column((array) $result, 'field1'));
137
138 $result = MockArrayEntity::get()
139 ->addWhere('field6', '=', '0')
140 ->execute();
141 $this->assertEquals([3, 4, 5], array_column((array) $result, 'field1'));
142
143 $result = MockArrayEntity::get()
144 ->addWhere('field6', '=', 0)
145 ->execute();
146 $this->assertEquals([3, 4, 5], array_column((array) $result, 'field1'));
147
148 $result = MockArrayEntity::get()
149 ->addWhere('field1', 'BETWEEN', [3, 5])
150 ->execute();
151 $this->assertEquals([3, 4, 5], array_column((array) $result, 'field1'));
152
153 $result = MockArrayEntity::get()
154 ->addWhere('field1', 'NOT BETWEEN', [3, 4])
155 ->execute();
156 $this->assertEquals([1, 2, 5], array_column((array) $result, 'field1'));
157 }
158
159 public function testArrayGetWithNestedWhereClauses() {
160 $result = MockArrayEntity::get()
161 ->addClause('OR', ['field2', 'LIKE', '%ra'], ['field2', 'LIKE', 'x ray'])
162 ->execute();
163 $this->assertEquals([1, 3], array_column((array) $result, 'field1'));
164
165 $result = MockArrayEntity::get()
166 ->addClause('OR', ['field2', '=', 'zebra'], ['field2', '=', 'yack'])
167 ->addClause('OR', ['field5', '!=', 'apple'], ['field3', 'IS NULL'])
168 ->execute();
169 $this->assertEquals([1, 2], array_column((array) $result, 'field1'));
170
171 $result = MockArrayEntity::get()
172 ->addClause('NOT', ['field2', '!=', 'yack'])
173 ->execute();
174 $this->assertEquals([2], array_column((array) $result, 'field1'));
175
176 $result = MockArrayEntity::get()
177 ->addClause('OR', ['field1', '=', 2], ['AND', [['field5', '=', 'apple'], ['field3', '=', 1]]])
178 ->execute();
179 $this->assertEquals([2, 4, 5], array_column((array) $result, 'field1'));
180 }
181
182}