1- import { Repository } from "../../src/repository/repository" ;
2- import {
3- and ,
4- asc ,
5- between ,
6- desc ,
7- eq ,
8- gt ,
9- gte ,
10- ilike ,
11- inArray ,
12- iregexp ,
13- isNotNull ,
14- isNull ,
15- like ,
16- lt ,
17- lte ,
18- neq ,
19- not ,
20- notInArray ,
21- nullsFirst ,
22- nullsLast ,
23- or ,
24- regexp ,
25- xor ,
26- } from "../../src" ;
27- import {
28- cleanupTestData ,
29- DomainUser ,
30- executor ,
31- setupTestTables ,
32- } from "../../test-setup" ;
33- import { faker } from "@faker-js/faker" ;
1+ import { Repository } from "../../src/repository/repository" ;
2+ import { between , eq , gt , gte , ilike , iregexp , isNotNull , isNull , like , lt , lte , neq , regexp , } from "../../src" ;
3+ import { cleanupTestData , DomainUser , executor , setupTestTables , } from "../../test-setup" ;
4+ import { faker } from "@faker-js/faker" ;
345
356describe ( "Repository findRows" , ( ) => {
367 let repository : Repository < DomainUser > ;
@@ -76,7 +47,7 @@ describe("Repository findRows", () => {
7647
7748 describe ( "Comparison Operators" , ( ) => {
7849 it ( "should find rows with eq operator" , async ( ) => {
79- const users = await createTestUsers ( 10 ) ;
50+ const users = await createTestUsers ( 5 ) ;
8051 const targetUser = users [ 0 ] ;
8152
8253 const result = await repository . findRows ( {
@@ -87,173 +58,150 @@ describe("Repository findRows", () => {
8758 expect ( result [ 0 ] . email ) . toBe ( targetUser . email ) ;
8859 } ) ;
8960
90- // it("should find rows with neq operator", async () => {
91- // const users = await createTestUsers(3);
92- // const targetUser = users[0];
93- //
94- // const result = await repository.findRows({
95- // where: neq("email", targetUser.email),
96- // });
97- //
98- // expect(result).toHaveLength(2);
99- // expect(result.every((user) => user.email !== targetUser.email)).toBe(
100- // true
101- // );
102- // });
103- //
104- // it("should find rows with gt operator", async () => {
105- // const users = await createTestUsers(3);
106- // const minAge = 30;
107- //
108- // const result = await repository.findRows({
109- // where: gt("age", minAge),
110- // });
111- //
112- // expect(result.every((user) => user.age! > minAge)).toBe(true);
113- // });
114- //
115- // it("should find rows with gte operator", async () => {
116- // const users = await createTestUsers(3);
117- // const minAge = 30;
118- //
119- // const result = await repository.findRows({
120- // where: gte("age", minAge),
121- // });
122- //
123- // expect(result.every((user) => user.age! >= minAge)).toBe(true);
124- // });
125- //
126- // it("should find rows with lt operator", async () => {
127- // const users = await createTestUsers(3);
128- // const maxAge = 40;
129- //
130- // const result = await repository.findRows({
131- // where: lt("age", maxAge),
132- // });
133- //
134- // expect(result.every((user) => user.age! < maxAge)).toBe(true);
135- // });
136- //
137- // it("should find rows with lte operator", async () => {
138- // const users = await createTestUsers(3);
139- // const maxAge = 40;
140- //
141- // const result = await repository.findRows({
142- // where: lte("age", maxAge),
143- // });
144- //
145- // expect(result.every((user) => user.age! <= maxAge)).toBe(true);
146- // });
147- //
148- // it("should find rows with like operator", async () => {
149- // const users = await createTestUsers(3);
150- // const searchTerm = "john";
151- //
152- // const result = await repository.findRows({
153- // where: like("name", `%${searchTerm}%`),
154- // });
155- //
156- // expect(
157- // result.every((user) => user.name.toLowerCase().includes(searchTerm))
158- // ).toBe(true);
159- // });
160- //
161- // it("should find rows with ilike operator", async () => {
162- // const users = await createTestUsers(3);
163- // const searchTerm = "JOHN";
164- //
165- // const result = await repository.findRows({
166- // where: ilike("name", `%${searchTerm}%`),
167- // });
168- //
169- // expect(
170- // result.every((user) =>
171- // user.name.toLowerCase().includes(searchTerm.toLowerCase())
172- // )
173- // ).toBe(true);
174- // });
175- //
176- // it("should find rows with inArray operator", async () => {
177- // const users = await createTestUsers(3);
178- // const targetRoles = ["admin", "user"];
179- //
180- // const result = await repository.findRows({
181- // where: inArray("role", targetRoles),
182- // });
183- //
184- // expect(result.every((user) => targetRoles.includes(user.role!))).toBe(
185- // true
186- // );
187- // });
188- //
189- // it("should find rows with notInArray operator", async () => {
190- // const users = await createTestUsers(3);
191- // const excludedRoles = ["admin"];
192- //
193- // const result = await repository.findRows({
194- // where: notInArray("role", excludedRoles),
195- // });
196- //
197- // expect(result.every((user) => !excludedRoles.includes(user.role!))).toBe(
198- // true
199- // );
200- // });
201- //
202- // it("should find rows with isNull operator", async () => {
203- // const users = await createTestUsers(3);
204- //
205- // const result = await repository.findRows({
206- // where: isNull("bio"),
207- // });
208- //
209- // expect(result.every((user) => user.bio === null)).toBe(true);
210- // });
211- //
212- // it("should find rows with isNotNull operator", async () => {
213- // const users = await createTestUsers(3);
214- //
215- // const result = await repository.findRows({
216- // where: isNotNull("bio"),
217- // });
218- //
219- // expect(result.every((user) => user.bio !== null)).toBe(true);
220- // });
221- //
222- // it("should find rows with between operator", async () => {
223- // const users = await createTestUsers(3);
224- // const minAge = 25;
225- // const maxAge = 35;
226- //
227- // const result = await repository.findRows({
228- // where: between("age", minAge, maxAge),
229- // });
230- //
231- // expect(
232- // result.every((user) => user.age! >= minAge && user.age! <= maxAge)
233- // ).toBe(true);
234- // });
235- //
236- // it("should find rows with regexp operator", async () => {
237- // const users = await createTestUsers(3);
238- // const pattern = "^[A-Z]"; // Names starting with uppercase letter
239- //
240- // const result = await repository.findRows({
241- // where: regexp("name", pattern),
242- // });
243- //
244- // expect(result.every((user) => /^[A-Z]/.test(user.name))).toBe(true);
245- // });
246- //
247- // it("should find rows with iregexp operator", async () => {
248- // const users = await createTestUsers(3);
249- // const pattern = "^[a-z]"; // Names starting with any letter (case insensitive)
250- //
251- // const result = await repository.findRows({
252- // where: iregexp("name", pattern),
253- // });
254- //
255- // expect(result.every((user) => /^[a-z]/i.test(user.name))).toBe(true);
256- // });
61+ it ( "should find rows with neq operator" , async ( ) => {
62+ const users = await createTestUsers ( 5 ) ;
63+ const targetUser = users [ 0 ] ;
64+
65+ const result = await repository . findRows ( {
66+ where : neq ( "email" , targetUser . email ) ,
67+ } ) ;
68+
69+ expect ( result ) . toHaveLength ( 4 ) ;
70+ expect ( result . every ( ( user ) => user . email !== targetUser . email ) ) . toBe (
71+ true
72+ ) ;
73+ } ) ;
74+
75+ it ( "should find rows with gt operator" , async ( ) => {
76+ await createTestUsers ( 3 ) ;
77+ const minAge = 30 ;
78+
79+ const result = await repository . findRows ( {
80+ where : gt ( "age" , minAge ) ,
81+ } ) ;
82+
83+ expect ( result . every ( ( user ) => user . age ! > minAge ) ) . toBe ( true ) ;
84+ } ) ;
85+
86+ it ( "should find rows with gte operator" , async ( ) => {
87+ await createTestUsers ( 3 ) ;
88+ const minAge = 30 ;
89+
90+ const result = await repository . findRows ( {
91+ where : gte ( "age" , minAge ) ,
92+ } ) ;
93+
94+ expect ( result . every ( ( user ) => user . age ! >= minAge ) ) . toBe ( true ) ;
95+ } ) ;
96+
97+ it ( "should find rows with lt operator" , async ( ) => {
98+ await createTestUsers ( 3 ) ;
99+ const maxAge = 40 ;
100+
101+ const result = await repository . findRows ( {
102+ where : lt ( "age" , maxAge ) ,
103+ } ) ;
104+
105+ expect ( result . every ( ( user ) => user . age ! < maxAge ) ) . toBe ( true ) ;
106+ } ) ;
107+
108+ it ( "should find rows with lte operator" , async ( ) => {
109+ const users = await createTestUsers ( 3 ) ;
110+ const maxAge = 40 ;
111+
112+ const result = await repository . findRows ( {
113+ where : lte ( "age" , maxAge ) ,
114+ } ) ;
115+
116+ expect ( result . every ( ( user ) => user . age ! <= maxAge ) ) . toBe ( true ) ;
117+ } ) ;
118+
119+ it ( "should find rows with like operator" , async ( ) => {
120+ const users = await createTestUsers ( 3 ) ;
121+ const searchTerm = "john" ;
122+
123+ const result = await repository . findRows ( {
124+ where : like ( "name" , `%${ searchTerm } %` ) ,
125+ } ) ;
126+
127+ expect (
128+ result . every ( ( user ) => user . name . toLowerCase ( ) . includes ( searchTerm ) )
129+ ) . toBe ( true ) ;
130+ } ) ;
131+
132+ it ( "should find rows with ilike operator" , async ( ) => {
133+ const users = await createTestUsers ( 3 ) ;
134+ const searchTerm = "JOHN" ;
135+
136+ const result = await repository . findRows ( {
137+ where : ilike ( "name" , `%${ searchTerm } %` ) ,
138+ } ) ;
139+
140+ expect (
141+ result . every ( ( user ) =>
142+ user . name . toLowerCase ( ) . includes ( searchTerm . toLowerCase ( ) )
143+ )
144+ ) . toBe ( true ) ;
145+ } ) ;
146+
147+ // TODO: write test for inArray operator
148+ // TODO: write test for notInArray operator
149+
150+ it ( "should find rows with isNull operator" , async ( ) => {
151+ await createTestUsers ( 3 ) ;
152+
153+ const result = await repository . findRows ( {
154+ where : isNull ( "bio" ) ,
155+ } ) ;
156+
157+ expect ( result . every ( ( user ) => user . bio === null ) ) . toBe ( true ) ;
158+ } ) ;
159+
160+ it ( "should find rows with isNotNull operator" , async ( ) => {
161+ await createTestUsers ( 3 ) ;
162+
163+ const result = await repository . findRows ( {
164+ where : isNotNull ( "bio" ) ,
165+ } ) ;
166+
167+ expect ( result . every ( ( user ) => user . bio !== null ) ) . toBe ( true ) ;
168+ } ) ;
169+
170+ it ( "should find rows with between operator" , async ( ) => {
171+ await createTestUsers ( 3 ) ;
172+ const minAge = 25 ;
173+ const maxAge = 35 ;
174+
175+ const result = await repository . findRows ( {
176+ where : between ( "age" , minAge , maxAge ) ,
177+ } ) ;
178+
179+ expect (
180+ result . every ( ( user ) => user . age ! >= minAge && user . age ! <= maxAge )
181+ ) . toBe ( true ) ;
182+ } ) ;
183+
184+ it ( "should find rows with regexp operator" , async ( ) => {
185+ const users = await createTestUsers ( 3 ) ;
186+ const pattern = "^[A-Z]" ; // Names starting with uppercase letter
187+
188+ const result = await repository . findRows ( {
189+ where : regexp ( "name" , pattern ) ,
190+ } ) ;
191+
192+ expect ( result . every ( ( user ) => / ^ [ A - Z ] / . test ( user . name ) ) ) . toBe ( true ) ;
193+ } ) ;
194+
195+ it ( "should find rows with iregexp operator" , async ( ) => {
196+ const users = await createTestUsers ( 3 ) ;
197+ const pattern = "^[a-z]" ; // Names starting with any letter (case insensitive)
198+
199+ const result = await repository . findRows ( {
200+ where : iregexp ( "name" , pattern ) ,
201+ } ) ;
202+
203+ expect ( result . every ( ( user ) => / ^ [ a - z ] / i. test ( user . name ) ) ) . toBe ( true ) ;
204+ } ) ;
257205 } ) ;
258206
259207 // describe("Logical Operators", () => {
0 commit comments