Skip to content

Commit 442592c

Browse files
committed
chore: update tests
1 parent 4afef1d commit 442592c

1 file changed

Lines changed: 144 additions & 114 deletions

File tree

tests/index.test.ts

Lines changed: 144 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -26,53 +26,53 @@ describe("MicroSQL - Edge Cases", () => {
2626
it("handles commas in INSERT values", () => {
2727
db.query(`INSERT INTO users (id, name, bio) VALUES (1, "Smith, John", "Likes: coding, reading")`);
2828

29-
const result = db.query(`SELECT * FROM users WHERE id = 1`);
30-
expect(result[0].name).toBe("Smith, John");
31-
expect(result[0].bio).toBe("Likes: coding, reading");
29+
const result = db.query(`SELECT * FROM users WHERE id = 1`) as { rows: any[] };
30+
expect(result.rows[0].name).toBe("Smith, John");
31+
expect(result.rows[0].bio).toBe("Likes: coding, reading");
3232
});
3333

3434
it("handles commas in UPDATE values", () => {
3535
db.query(`INSERT INTO users (id, name) VALUES (1, "John")`);
3636
db.query(`UPDATE users SET name = "Smith, John", bio = "Likes: coding, reading" WHERE id = 1`);
3737

38-
const result = db.query(`SELECT * FROM users WHERE id = 1`);
39-
expect(result[0].name).toBe("Smith, John");
40-
expect(result[0].bio).toBe("Likes: coding, reading");
38+
const result = db.query(`SELECT * FROM users WHERE id = 1`) as { rows: any[] };
39+
expect(result.rows[0].name).toBe("Smith, John");
40+
expect(result.rows[0].bio).toBe("Likes: coding, reading");
4141
});
4242

4343
it("handles commas in IN operator", () => {
4444
db.query(`INSERT INTO users (id, name) VALUES (1, "Smith, John")`);
4545
db.query(`INSERT INTO users (id, name) VALUES (2, "Doe, Jane")`);
4646
db.query(`INSERT INTO users (id, name) VALUES (3, "Bob")`);
4747

48-
const result = db.query(`SELECT name FROM users WHERE name IN ("Smith, John", "Doe, Jane")`);
49-
expect(result.map(r => r.name).sort()).toEqual(["Doe, Jane", "Smith, John"]);
48+
const result = db.query(`SELECT name FROM users WHERE name IN ("Smith, John", "Doe, Jane")`) as { rows: any[] };
49+
expect(result.rows.map(r => r.name).sort()).toEqual(["Doe, Jane", "Smith, John"]);
5050
});
5151

5252
it("handles special regex characters in LIKE", () => {
5353
db.query(`INSERT INTO users (id, email) VALUES (1, "user@test.com")`);
5454
db.query(`INSERT INTO users (id, email) VALUES (2, "admin@example.org")`);
5555

56-
const result = db.query(`SELECT email FROM users WHERE email LIKE "%@test.%"`);
57-
expect(result).toEqual([{ email: "user@test.com" }]);
56+
const result = db.query(`SELECT email FROM users WHERE email LIKE "%@test.%"`) as { rows: any[] };
57+
expect(result.rows).toEqual([{ email: "user@test.com" }]);
5858
});
5959

6060
it("handles numeric ORDER BY correctly", () => {
6161
db.query(`INSERT INTO products (id, price) VALUES (1, "100")`);
6262
db.query(`INSERT INTO products (id, price) VALUES (2, "20")`);
6363
db.query(`INSERT INTO products (id, price) VALUES (3, "5")`);
6464

65-
const result = db.query(`SELECT price FROM products ORDER BY price DESC`);
66-
expect(result.map(r => r.price)).toEqual(["100", "20", "5"]);
65+
const result = db.query(`SELECT price FROM products ORDER BY price DESC`) as { rows: any[] };
66+
expect(result.rows.map(r => r.price)).toEqual(["100", "20", "5"]);
6767
});
6868

6969
it("handles string ORDER BY correctly", () => {
7070
db.query(`INSERT INTO users (id, name) VALUES (1, "Zara")`);
7171
db.query(`INSERT INTO users (id, name) VALUES (2, "Alice")`);
7272
db.query(`INSERT INTO users (id, name) VALUES (3, "Bob")`);
7373

74-
const result = db.query(`SELECT name FROM users ORDER BY name ASC`);
75-
expect(result.map(r => r.name)).toEqual(["Alice", "Bob", "Zara"]);
74+
const result = db.query(`SELECT name FROM users ORDER BY name ASC`) as { rows: any[] };
75+
expect(result.rows.map(r => r.name)).toEqual(["Alice", "Bob", "Zara"]);
7676
});
7777

7878
it("handles complex WHERE with mixed AND/OR", () => {
@@ -83,165 +83,195 @@ describe("MicroSQL - Edge Cases", () => {
8383

8484
const result = db.query(
8585
`SELECT name FROM users WHERE (city = "Berlin" AND age > 30) OR city = "Paris"`
86-
);
87-
expect(result.map(r => r.name).sort()).toEqual(["Bob", "Carol"]);
86+
) as { rows: any[] };
87+
expect(result.rows.map(r => r.name).sort()).toEqual(["Bob", "Carol"]);
8888
});
8989

9090
it("handles UPDATE with multiple SET clauses", () => {
9191
db.query(`INSERT INTO users (id, name, age) VALUES (1, "Alice", 25)`);
9292
db.query(`UPDATE users SET name = "Alice Smith", age = 26 WHERE id = 1`);
9393

94-
const result = db.query(`SELECT * FROM users WHERE id = 1`);
95-
expect(result[0].name).toBe("Alice Smith");
96-
expect(result[0].age).toBe("26");
94+
const result = db.query(`SELECT * FROM users WHERE id = 1`) as { rows: any[] };
95+
expect(result.rows[0].name).toBe("Alice Smith");
96+
expect(result.rows[0].age).toBe("26");
9797
});
9898

9999
it("handles DELETE without WHERE clause", () => {
100100
db.query(`INSERT INTO users (id, name) VALUES (1, "Alice")`);
101101
db.query(`INSERT INTO users (id, name) VALUES (2, "Bob")`);
102-
db.query(`DELETE FROM users`);
102+
const deleteResult = db.query(`DELETE FROM users`) as { rowCount: number };
103+
expect(deleteResult.rowCount).toBe(2);
103104

104-
const result = db.query(`SELECT * FROM users`);
105-
expect(result).toHaveLength(0);
105+
const result = db.query(`SELECT * FROM users`) as { rows: any[] };
106+
expect(result.rows).toHaveLength(0);
106107
});
107108

108109
it("handles empty table SELECT", () => {
109-
const result = db.query(`SELECT * FROM nonexistent`);
110-
expect(result).toEqual([]);
110+
const result = db.query(`SELECT * FROM nonexistent`) as { rows: any[] };
111+
expect(result.rows).toEqual([]);
111112
});
112113

113114
it("handles LIMIT without ORDER BY", () => {
114115
db.query(`INSERT INTO users (id, name) VALUES (1, "Alice")`);
115116
db.query(`INSERT INTO users (id, name) VALUES (2, "Bob")`);
116117
db.query(`INSERT INTO users (id, name) VALUES (3, "Carol")`);
117118

118-
const result = db.query(`SELECT name FROM users LIMIT 2`);
119-
expect(result).toHaveLength(2);
119+
const result = db.query(`SELECT name FROM users LIMIT 2`) as { rows: any[] };
120+
expect(result.rows).toHaveLength(2);
120121
});
121122

122123
it("handles WHERE with comparison operators", () => {
123124
db.query(`INSERT INTO products (id, price) VALUES (1, "10")`);
124125
db.query(`INSERT INTO products (id, price) VALUES (2, "20")`);
125126
db.query(`INSERT INTO products (id, price) VALUES (3, "30")`);
126127

127-
const result1 = db.query(`SELECT id FROM products WHERE price >= 20`);
128-
expect(result1.map(r => r.id).sort()).toEqual(["2", "3"]);
128+
const result1 = db.query(`SELECT id FROM products WHERE price >= 20`) as { rows: any[] };
129+
expect(result1.rows.map(r => r.id).sort()).toEqual(["2", "3"]);
129130

130-
const result2 = db.query(`SELECT id FROM products WHERE price <= 20`);
131-
expect(result2.map(r => r.id).sort()).toEqual(["1", "2"]);
131+
const result2 = db.query(`SELECT id FROM products WHERE price <= 20`) as { rows: any[] };
132+
expect(result2.rows.map(r => r.id).sort()).toEqual(["1", "2"]);
132133
});
133134

134135
it("handles LIKE with underscore wildcard", () => {
135136
db.query(`INSERT INTO users (id, code) VALUES (1, "A1")`);
136137
db.query(`INSERT INTO users (id, code) VALUES (2, "A2")`);
137138
db.query(`INSERT INTO users (id, code) VALUES (3, "B1")`);
138139

139-
const result = db.query(`SELECT code FROM users WHERE code LIKE "A_"`);
140-
expect(result.map(r => r.code).sort()).toEqual(["A1", "A2"]);
140+
const result = db.query(`SELECT code FROM users WHERE code LIKE "A_"`) as { rows: any[] };
141+
expect(result.rows.map(r => r.code).sort()).toEqual(["A1", "A2"]);
141142
});
142143

143144
it("handles UPDATE that matches no rows", () => {
144145
db.query(`INSERT INTO users (id, name) VALUES (1, "Alice")`);
145-
const result = db.query(`UPDATE users SET name = "Bob" WHERE id = 999`);
146+
const result = db.query(`UPDATE users SET name = "Bob" WHERE id = 999`) as { rowCount: number };
146147

147-
expect(result.updated).toBe(0);
148+
expect(result.rowCount).toBe(0);
148149

149-
const check = db.query(`SELECT name FROM users WHERE id = 1`);
150-
expect(check[0].name).toBe("Alice");
150+
const check = db.query(`SELECT name FROM users WHERE id = 1`) as { rows: any[] };
151+
expect(check.rows[0].name).toBe("Alice");
151152
});
152153

153154
it("handles SELECT with specific columns in different order", () => {
154155
db.query(`INSERT INTO users (id, name, age, city) VALUES (1, "Alice", 25, "Berlin")`);
155156

156-
const result = db.query(`SELECT city, name FROM users WHERE id = 1`);
157-
expect(result[0]).toEqual({ city: "Berlin", name: "Alice" });
158-
expect(Object.keys(result[0])).toEqual(["city", "name"]);
157+
const result = db.query(`SELECT city, name FROM users WHERE id = 1`) as { rows: any[] };
158+
expect(result.rows[0]).toEqual({ city: "Berlin", name: "Alice" });
159+
expect(Object.keys(result.rows[0])).toEqual(["city", "name"]);
159160
});
160161

161162
it("handles case-insensitive LIKE matching", () => {
162163
db.query(`INSERT INTO users (id, name) VALUES (1, "alice")`);
163164
db.query(`INSERT INTO users (id, name) VALUES (2, "ALICE")`);
164165
db.query(`INSERT INTO users (id, name) VALUES (3, "Alice")`);
165166

166-
const result = db.query(`SELECT name FROM users WHERE name LIKE "alice"`);
167-
expect(result).toHaveLength(3);
167+
const result = db.query(`SELECT name FROM users WHERE name LIKE "alice"`) as { rows: any[] };
168+
expect(result.rows).toHaveLength(3);
168169
});
170+
169171
it("handles INNER JOIN", () => {
170-
db.query(`INSERT INTO users (id, name) VALUES (1, "Alice")`);
171-
db.query(`INSERT INTO users (id, name) VALUES (2, "Bob")`);
172-
db.query(`INSERT INTO orders (id, user_id, product) VALUES (1, 1, "Laptop")`);
173-
db.query(`INSERT INTO orders (id, user_id, product) VALUES (2, 1, "Mouse")`);
174-
db.query(`INSERT INTO orders (id, user_id, product) VALUES (3, 2, "Keyboard")`);
175-
176-
const result = db.query(
177-
`SELECT users.name, orders.product FROM users JOIN orders ON users.id = orders.user_id`
178-
);
179-
180-
expect(result).toHaveLength(3);
181-
expect(result).toEqual([
182-
{ "users.name": "Alice", "orders.product": "Laptop" },
183-
{ "users.name": "Alice", "orders.product": "Mouse" },
184-
{ "users.name": "Bob", "orders.product": "Keyboard" }
185-
]);
186-
});
172+
db.query(`INSERT INTO users (id, name) VALUES (1, "Alice")`);
173+
db.query(`INSERT INTO users (id, name) VALUES (2, "Bob")`);
174+
db.query(`INSERT INTO orders (id, user_id, product) VALUES (1, 1, "Laptop")`);
175+
db.query(`INSERT INTO orders (id, user_id, product) VALUES (2, 1, "Mouse")`);
176+
db.query(`INSERT INTO orders (id, user_id, product) VALUES (3, 2, "Keyboard")`);
187177

188-
it("handles INNER JOIN with INNER keyword", () => {
189-
db.query(`INSERT INTO users (id, name) VALUES (1, "Alice")`);
190-
db.query(`INSERT INTO orders (id, user_id, product) VALUES (1, 1, "Laptop")`);
178+
const result = db.query(
179+
`SELECT users.name, orders.product FROM users JOIN orders ON users.id = orders.user_id`
180+
) as { rows: any[] };
181+
182+
expect(result.rows).toHaveLength(3);
183+
expect(result.rows).toEqual([
184+
{ "users.name": "Alice", "orders.product": "Laptop" },
185+
{ "users.name": "Alice", "orders.product": "Mouse" },
186+
{ "users.name": "Bob", "orders.product": "Keyboard" }
187+
]);
188+
});
191189

192-
const result = db.query(
193-
`SELECT users.name, orders.product FROM users INNER JOIN orders ON users.id = orders.user_id`
194-
);
195-
196-
expect(result).toHaveLength(1);
197-
expect(result[0]).toEqual({ "users.name": "Alice", "orders.product": "Laptop" });
198-
});
190+
it("handles INNER JOIN with INNER keyword", () => {
191+
db.query(`INSERT INTO users (id, name) VALUES (1, "Alice")`);
192+
db.query(`INSERT INTO orders (id, user_id, product) VALUES (1, 1, "Laptop")`);
199193

200-
it("handles LEFT JOIN", () => {
201-
db.query(`INSERT INTO users (id, name) VALUES (1, "Alice")`);
202-
db.query(`INSERT INTO users (id, name) VALUES (2, "Bob")`);
203-
db.query(`INSERT INTO users (id, name) VALUES (3, "Carol")`);
204-
db.query(`INSERT INTO orders (id, user_id, product) VALUES (1, 1, "Laptop")`);
205-
db.query(`INSERT INTO orders (id, user_id, product) VALUES (2, 1, "Mouse")`);
206-
207-
const result = db.query(
208-
`SELECT users.name, orders.product FROM users LEFT JOIN orders ON users.id = orders.user_id`
209-
);
210-
211-
expect(result).toHaveLength(4);
212-
expect(result.map(r => r["users.name"]).sort()).toEqual(["Alice", "Alice", "Bob", "Carol"]);
213-
214-
const bobOrder = result.find(r => r["users.name"] === "Bob");
215-
expect(bobOrder["orders.product"]).toBeUndefined();
216-
});
194+
const result = db.query(
195+
`SELECT users.name, orders.product FROM users INNER JOIN orders ON users.id = orders.user_id`
196+
) as { rows: any[] };
197+
198+
expect(result.rows).toHaveLength(1);
199+
expect(result.rows[0]).toEqual({ "users.name": "Alice", "orders.product": "Laptop" });
200+
});
217201

218-
it("handles JOIN with WHERE clause", () => {
219-
db.query(`INSERT INTO users (id, name, age) VALUES (1, "Alice", 25)`);
220-
db.query(`INSERT INTO users (id, name, age) VALUES (2, "Bob", 30)`);
221-
db.query(`INSERT INTO orders (id, user_id, product) VALUES (1, 1, "Laptop")`);
222-
db.query(`INSERT INTO orders (id, user_id, product) VALUES (2, 2, "Mouse")`);
223-
224-
const result = db.query(
225-
`SELECT users.name, orders.product FROM users JOIN orders ON users.id = orders.user_id WHERE users.age > 25`
226-
);
227-
228-
expect(result).toHaveLength(1);
229-
expect(result[0]).toEqual({ "users.name": "Bob", "orders.product": "Mouse" });
230-
});
202+
it("handles LEFT JOIN", () => {
203+
db.query(`INSERT INTO users (id, name) VALUES (1, "Alice")`);
204+
db.query(`INSERT INTO users (id, name) VALUES (2, "Bob")`);
205+
db.query(`INSERT INTO users (id, name) VALUES (3, "Carol")`);
206+
db.query(`INSERT INTO orders (id, user_id, product) VALUES (1, 1, "Laptop")`);
207+
db.query(`INSERT INTO orders (id, user_id, product) VALUES (2, 1, "Mouse")`);
231208

232-
it("handles JOIN with ORDER BY and LIMIT", () => {
233-
db.query(`INSERT INTO users (id, name) VALUES (1, "Alice")`);
234-
db.query(`INSERT INTO users (id, name) VALUES (2, "Bob")`);
235-
db.query(`INSERT INTO orders (id, user_id, product, price) VALUES (1, 1, "Laptop", 1000)`);
236-
db.query(`INSERT INTO orders (id, user_id, product, price) VALUES (2, 1, "Mouse", 20)`);
237-
db.query(`INSERT INTO orders (id, user_id, product, price) VALUES (3, 2, "Keyboard", 50)`);
238-
239-
const result = db.query(
240-
`SELECT users.name, orders.product, orders.price FROM users JOIN orders ON users.id = orders.user_id ORDER BY orders.price DESC LIMIT 2`
241-
);
242-
243-
expect(result).toHaveLength(2);
244-
expect(result[0]["orders.product"]).toBe("Laptop");
245-
expect(result[1]["orders.product"]).toBe("Keyboard");
246-
});
247-
})
209+
const result = db.query(
210+
`SELECT users.name, orders.product FROM users LEFT JOIN orders ON users.id = orders.user_id`
211+
) as { rows: any[] };
212+
213+
expect(result.rows).toHaveLength(4);
214+
expect(result.rows.map(r => r["users.name"]).sort()).toEqual(["Alice", "Alice", "Bob", "Carol"]);
215+
216+
const bobOrder = result.rows.find(r => r["users.name"] === "Bob");
217+
expect(bobOrder!["orders.product"]).toBeUndefined();
218+
});
219+
220+
it("handles JOIN with WHERE clause", () => {
221+
db.query(`INSERT INTO users (id, name, age) VALUES (1, "Alice", 25)`);
222+
db.query(`INSERT INTO users (id, name, age) VALUES (2, "Bob", 30)`);
223+
db.query(`INSERT INTO orders (id, user_id, product) VALUES (1, 1, "Laptop")`);
224+
db.query(`INSERT INTO orders (id, user_id, product) VALUES (2, 2, "Mouse")`);
225+
226+
const result = db.query(
227+
`SELECT users.name, orders.product FROM users JOIN orders ON users.id = orders.user_id WHERE users.age > 25`
228+
) as { rows: any[] };
229+
230+
expect(result.rows).toHaveLength(1);
231+
expect(result.rows[0]).toEqual({ "users.name": "Bob", "orders.product": "Mouse" });
232+
});
233+
234+
it("handles JOIN with ORDER BY and LIMIT", () => {
235+
db.query(`INSERT INTO users (id, name) VALUES (1, "Alice")`);
236+
db.query(`INSERT INTO users (id, name) VALUES (2, "Bob")`);
237+
db.query(`INSERT INTO orders (id, user_id, product, price) VALUES (1, 1, "Laptop", 1000)`);
238+
db.query(`INSERT INTO orders (id, user_id, product, price) VALUES (2, 1, "Mouse", 20)`);
239+
db.query(`INSERT INTO orders (id, user_id, product, price) VALUES (3, 2, "Keyboard", 50)`);
240+
241+
const result = db.query(
242+
`SELECT users.name, orders.product, orders.price FROM users JOIN orders ON users.id = orders.user_id ORDER BY orders.price DESC LIMIT 2`
243+
) as { rows: any[] };
244+
245+
expect(result.rows).toHaveLength(2);
246+
expect(result.rows[0]["orders.product"]).toBe("Laptop");
247+
expect(result.rows[1]["orders.product"]).toBe("Keyboard");
248+
});
249+
250+
it("returns correct INSERT result format", () => {
251+
const result = db.query(`INSERT INTO users (id, name) VALUES (1, "Alice")`) as { rows: any[]; rowCount: number };
252+
253+
expect(result.rows).toHaveLength(1);
254+
expect(result.rows[0]).toEqual({ id: "1", name: "Alice" });
255+
expect(result.rowCount).toBe(1);
256+
});
257+
258+
it("returns correct UPDATE result format", () => {
259+
db.query(`INSERT INTO users (id, name) VALUES (1, "Alice")`);
260+
db.query(`INSERT INTO users (id, name) VALUES (2, "Bob")`);
261+
262+
const result = db.query(`UPDATE users SET name = "Updated" WHERE id = 1`) as { rows: any[]; rowCount: number };
263+
264+
expect(result.rows).toEqual([]);
265+
expect(result.rowCount).toBe(1);
266+
});
267+
268+
it("returns correct DELETE result format", () => {
269+
db.query(`INSERT INTO users (id, name) VALUES (1, "Alice")`);
270+
db.query(`INSERT INTO users (id, name) VALUES (2, "Bob")`);
271+
272+
const result = db.query(`DELETE FROM users WHERE id = 1`) as { rows: any[]; rowCount: number };
273+
274+
expect(result.rows).toEqual([]);
275+
expect(result.rowCount).toBe(1);
276+
});
277+
});

0 commit comments

Comments
 (0)