Skip to content

Commit 0885c45

Browse files
committed
Refactor import statements in select-builder tests for improved readability and consistency. Update DELETE SQL query formatting in DeleteQueryBuilder to use double quotes for table names and added console logging for SQL and values.
1 parent f27720e commit 0885c45

File tree

3 files changed

+164
-4
lines changed

3 files changed

+164
-4
lines changed

__tests__/delete-builder.test.ts

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
import { DeleteQueryBuilder, SqlExecutor } from "../src";
2+
import { SimpleWhere, CompositeWhere } from "../src/types/query";
3+
4+
// Mock SqlExecutor
5+
const mockExecutor: SqlExecutor = {
6+
executeSQL: jest.fn(),
7+
};
8+
9+
interface User {
10+
id: string;
11+
name: string;
12+
email: string;
13+
age?: number;
14+
roleId?: string;
15+
}
16+
17+
describe("DeleteQueryBuilder", () => {
18+
let builder: DeleteQueryBuilder<User>;
19+
20+
beforeEach(() => {
21+
builder = new DeleteQueryBuilder("users", mockExecutor);
22+
jest.clearAllMocks();
23+
});
24+
25+
describe("Basic Delete", () => {
26+
it("should build correct SQL for basic delete", () => {
27+
const result = builder.build();
28+
29+
expect(result.sql).toContain("DELETE FROM users");
30+
expect(result.sql).toContain("RETURNING *");
31+
expect(result.values).toEqual([]);
32+
});
33+
34+
it("should build correct SQL for delete with specific returning columns", () => {
35+
const result = builder.returning(["id", "name"]).build();
36+
37+
expect(result.sql).toContain("DELETE FROM users");
38+
expect(result.sql).toContain("RETURNING id, name");
39+
expect(result.values).toEqual([]);
40+
});
41+
});
42+
43+
describe("Where Conditions", () => {
44+
it("should build correct SQL for simple where condition", () => {
45+
const where: SimpleWhere<User> = {
46+
key: "age",
47+
operator: ">",
48+
value: 18,
49+
};
50+
51+
const result = builder.where(where).build();
52+
53+
expect(result.sql).toContain("DELETE FROM users");
54+
expect(result.sql).toContain(`WHERE "users"."age" > $1`);
55+
expect(result.sql).toContain("RETURNING *");
56+
expect(result.values).toEqual([18]);
57+
});
58+
59+
it("should build correct SQL for composite AND condition", () => {
60+
const where: CompositeWhere<User> = {
61+
AND: [
62+
{ key: "age", operator: ">", value: 18 } as SimpleWhere<User>,
63+
{ key: "name", operator: "=", value: "John" } as SimpleWhere<User>,
64+
],
65+
};
66+
67+
const result = builder.where(where).build();
68+
69+
expect(result.sql).toContain(`DELETE FROM "users"`);
70+
expect(result.sql).toContain(
71+
`WHERE ("users"."age" > $1 AND "users"."name" = $2)`
72+
);
73+
expect(result.sql).toContain("RETURNING *");
74+
expect(result.values).toEqual([18, "John"]);
75+
});
76+
77+
it("should build correct SQL for composite OR condition", () => {
78+
const where: CompositeWhere<User> = {
79+
OR: [
80+
{ key: "age", operator: ">", value: 18 } as SimpleWhere<User>,
81+
{ key: "name", operator: "=", value: "John" } as SimpleWhere<User>,
82+
],
83+
};
84+
85+
const result = builder.where(where).build();
86+
87+
expect(result.sql).toContain("DELETE FROM users");
88+
expect(result.sql).toContain("WHERE (users.age > $1 OR users.name = $2)");
89+
expect(result.sql).toContain("RETURNING *");
90+
expect(result.values).toEqual([18, "John"]);
91+
});
92+
93+
it("should build correct SQL for complex nested conditions", () => {
94+
const where: CompositeWhere<User> = {
95+
AND: [
96+
{ key: "age", operator: ">", value: 18 } as SimpleWhere<User>,
97+
{
98+
OR: [
99+
{
100+
key: "name",
101+
operator: "=",
102+
value: "John",
103+
} as SimpleWhere<User>,
104+
{
105+
key: "name",
106+
operator: "=",
107+
value: "Jane",
108+
} as SimpleWhere<User>,
109+
],
110+
} as CompositeWhere<User>,
111+
],
112+
};
113+
114+
const result = builder.where(where).build();
115+
116+
expect(result.sql).toContain("DELETE FROM users");
117+
expect(result.sql).toContain(
118+
"WHERE (users.age > $1 AND (users.name = $2 OR users.name = $3))"
119+
);
120+
expect(result.sql).toContain("RETURNING *");
121+
expect(result.values).toEqual([18, "John", "Jane"]);
122+
});
123+
});
124+
125+
describe("Complex Delete", () => {
126+
it("should build correct SQL for complex delete with all clauses", () => {
127+
const where: CompositeWhere<User> = {
128+
AND: [
129+
{ key: "age", operator: ">", value: 18 } as SimpleWhere<User>,
130+
{
131+
OR: [
132+
{
133+
key: "name",
134+
operator: "=",
135+
value: "John",
136+
} as SimpleWhere<User>,
137+
{
138+
key: "name",
139+
operator: "=",
140+
value: "Jane",
141+
} as SimpleWhere<User>,
142+
],
143+
} as CompositeWhere<User>,
144+
],
145+
};
146+
147+
const result = builder
148+
.where(where)
149+
.returning(["id", "name", "email"])
150+
.build();
151+
152+
expect(result.sql).toContain("DELETE FROM users");
153+
expect(result.sql).toContain(
154+
"WHERE (users.age > $1 AND (users.name = $2 OR users.name = $3))"
155+
);
156+
expect(result.sql).toContain("RETURNING id, name, email");
157+
expect(result.values).toEqual([18, "John", "Jane"]);
158+
});
159+
});
160+
});

__tests__/select-builder.test.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { SelectQueryBuilder, SqlExecutor } from "../src";
2-
import { Join, OrderBy, SimpleWhere, CompositeWhere } from "../src/types/query";
1+
import {CompositeWhere, Join, OrderBy, SelectQueryBuilder, SimpleWhere, SqlExecutor} from "../src";
32

43
// Mock SqlExecutor
54
const mockExecutor: SqlExecutor = {

src/query-builder/delete.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,12 @@ export class DeleteQueryBuilder<T> extends BaseQueryBuilder<T> {
3232
const returning = this.returningColumns.join(", ");
3333

3434
const sql = `
35-
DELETE FROM ${this.tableName}
35+
DELETE FROM "${this.tableName}"
3636
${whereClause ? `WHERE ${whereClause}` : ""}
3737
RETURNING ${returning};
3838
`;
39-
39+
console.log(sql);
40+
console.log(values);
4041
return { sql, values };
4142
}
4243
}

0 commit comments

Comments
 (0)