Skip to content

Commit bb72dce

Browse files
committed
fix snaps
1 parent 061957f commit bb72dce

File tree

14 files changed

+145
-136
lines changed

14 files changed

+145
-136
lines changed

__fixtures__/generated/generated.json

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,6 @@
1414
"pretty/selects-13.sql": "SELECT\n id,\n name\nFROM users\nWHERE\n id IN (SELECT\n user_id\nFROM orders\nWHERE\n total > 100)",
1515
"pretty/selects-14.sql": "SELECT\n id,\n name,\n email\nFROM users\nWHERE\n active = true",
1616
"pretty/selects-15.sql": "SELECT\n u.id,\n u.name,\n u.email,\n p.title\nFROM users AS u\nJOIN profiles AS p ON u.id = p.user_id\nWHERE\n u.active = true\n AND u.created_at > '2023-01-01'\nGROUP BY\n u.id,\n u.name,\n u.email,\n p.title\nHAVING\n count(*) > 1\nORDER BY\n u.created_at DESC,\n u.name ASC\nLIMIT 10\nOFFSET 5",
17-
"pretty/select_statements-1.sql": "SELECT id, name, email FROM users WHERE active = true",
18-
"pretty/select_statements-2.sql": "SELECT \n u.id,\n u.name,\n u.email,\n p.title as profile_title\nFROM users u\nJOIN profiles p ON u.id = p.user_id\nWHERE u.active = true\n AND u.created_at > '2023-01-01'\nGROUP BY u.id, u.name, u.email, p.title\nHAVING COUNT(*) > 1\nORDER BY u.created_at DESC, u.name ASC\nLIMIT 10\nOFFSET 5",
19-
"pretty/select_statements-3.sql": "SELECT id, name FROM users WHERE id IN (\n SELECT user_id FROM orders WHERE total > 100\n)",
20-
"pretty/select_statements-4.sql": "SELECT name FROM customers\nUNION ALL\nSELECT name FROM suppliers\nORDER BY name",
21-
"pretty/select_statements-5.sql": "SELECT name, email FROM users WHERE status = 'active'",
22-
"pretty/select_statements-6.sql": "SELECT u.name, o.total FROM users u, orders o WHERE u.id = o.user_id",
2317
"pretty/misc-1.sql": "WITH recent_orders AS (\n SELECT o.id, o.user_id, o.created_at\n FROM orders o\n WHERE o.created_at > NOW() - INTERVAL '30 days'\n), high_value_orders AS (\n SELECT r.user_id, COUNT(*) AS order_count, SUM(oi.price * oi.quantity) AS total_spent\n FROM recent_orders r\n JOIN order_items oi ON r.id = oi.order_id\n GROUP BY r.user_id\n)\nSELECT u.id, u.name, h.total_spent\nFROM users u\nJOIN high_value_orders h ON u.id = h.user_id\nWHERE h.total_spent > 1000\nORDER BY h.total_spent DESC",
2418
"pretty/misc-2.sql": "SELECT\n department,\n employee_id,\n COUNT(*) FILTER (WHERE status = 'active') OVER (PARTITION BY department) AS active_count,\n RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS salary_rank\nFROM employee_status\nGROUP BY GROUPING SETS ((department), (department, employee_id))",
2519
"pretty/misc-3.sql": "SELECT u.id, u.name, j.key, j.value\nFROM users u,\nLATERAL jsonb_each_text(u.preferences) AS j(key, value)\nWHERE j.key LIKE 'notif_%' AND j.value::boolean = true",
@@ -45,6 +39,9 @@
4539
"pretty/create_policy-2.sql": "CREATE POLICY admin_policy ON sensitive_data \n AS RESTRICTIVE \n FOR SELECT \n TO admin_role \n USING (department = current_user_department()) \n WITH CHECK (approved = true)",
4640
"pretty/create_policy-3.sql": "CREATE POLICY complex_policy ON documents \n FOR UPDATE \n TO document_editors \n USING (\n owner_id = current_user_id() OR \n (shared = true AND permissions @> '{\"edit\": true}')\n ) \n WITH CHECK (\n status != 'archived' AND \n last_modified > now() - interval '1 day'\n )",
4741
"pretty/create_policy-4.sql": "CREATE POLICY simple_policy ON posts FOR SELECT TO public USING (published = true)",
42+
"pretty/create_policy-5.sql": "CREATE POLICY \"simple_policy\" ON posts FOR SELECT TO public USING (published = true)",
43+
"pretty/create_policy-6.sql": "CREATE POLICY \"Simple Policy\" ON posts FOR SELECT TO public USING (published = true)",
44+
"pretty/create_policy-7.sql": "CREATE POLICY SimplePolicy ON posts FOR SELECT TO public USING (published = true)",
4845
"pretty/constraints-1.sql": "CREATE TABLE orders (\n id SERIAL PRIMARY KEY,\n user_id INTEGER NOT NULL,\n total DECIMAL(10,2) CHECK (total > 0),\n status VARCHAR(20) DEFAULT 'pending',\n created_at TIMESTAMP DEFAULT now(),\n CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,\n CONSTRAINT unique_user_date UNIQUE (user_id, created_at),\n CONSTRAINT check_status CHECK (status IN ('pending', 'completed', 'cancelled'))\n)",
4946
"pretty/constraints-2.sql": "ALTER TABLE products ADD CONSTRAINT fk_category \n FOREIGN KEY (category_id) \n REFERENCES categories(id) \n ON UPDATE CASCADE \n ON DELETE SET NULL \n DEFERRABLE INITIALLY DEFERRED",
5047
"pretty/constraints-3.sql": "ALTER TABLE products ADD CONSTRAINT check_price CHECK (price > 0)",

__fixtures__/kitchen-sink/pretty/create_policy.sql

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,9 @@ CREATE POLICY complex_policy ON documents
2020
);
2121

2222
CREATE POLICY simple_policy ON posts FOR SELECT TO public USING (published = true);
23+
24+
CREATE POLICY "simple_policy" ON posts FOR SELECT TO public USING (published = true);
25+
26+
CREATE POLICY "Simple Policy" ON posts FOR SELECT TO public USING (published = true);
27+
28+
CREATE POLICY SimplePolicy ON posts FOR SELECT TO public USING (published = true);

__fixtures__/kitchen-sink/pretty/select_statements.sql

Lines changed: 0 additions & 29 deletions
This file was deleted.

packages/deparser/__tests__/kitchen-sink/pretty-create_policy.test.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ it('pretty-create_policy', async () => {
77
"pretty/create_policy-1.sql",
88
"pretty/create_policy-2.sql",
99
"pretty/create_policy-3.sql",
10-
"pretty/create_policy-4.sql"
10+
"pretty/create_policy-4.sql",
11+
"pretty/create_policy-5.sql",
12+
"pretty/create_policy-6.sql",
13+
"pretty/create_policy-7.sql"
1114
]);
1215
});
Lines changed: 62 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
// Jest Snapshot v1, https://goo.gl/fbAQLP
22

3-
exports[`Pretty CREATE POLICY formatting should format basic CREATE POLICY with pretty option enabled 1`] = `
3+
exports[`Pretty Misc SQL formatting should format pretty/create_policy-1.sql: (non-pretty) 1`] = `"CREATE POLICY "user_policy" ON users AS PERMISSIVE FOR ALL TO authenticated_users USING (user_id = current_user_id())"`;
4+
5+
exports[`Pretty Misc SQL formatting should format pretty/create_policy-1.sql: (pretty) 1`] = `
46
"CREATE POLICY "user_policy"
57
ON users
68
AS PERMISSIVE
79
FOR ALL
810
TO authenticated_users
911
USING (
1012
user_id = current_user_id()
11-
);"
13+
)"
1214
`;
1315

14-
exports[`Pretty CREATE POLICY formatting should format complex CREATE POLICY with pretty option enabled 1`] = `
16+
exports[`Pretty Misc SQL formatting should format pretty/create_policy-2.sql: (non-pretty) 1`] = `"CREATE POLICY "admin_policy" ON sensitive_data AS RESTRICTIVE FOR SELECT TO admin_role USING (department = current_user_department()) WITH CHECK (approved = true)"`;
17+
18+
exports[`Pretty Misc SQL formatting should format pretty/create_policy-2.sql: (pretty) 1`] = `
1519
"CREATE POLICY "admin_policy"
1620
ON sensitive_data
1721
AS RESTRICTIVE
@@ -22,51 +26,76 @@ exports[`Pretty CREATE POLICY formatting should format complex CREATE POLICY wit
2226
)
2327
WITH CHECK (
2428
approved = true
25-
);"
29+
)"
30+
`;
31+
32+
exports[`Pretty Misc SQL formatting should format pretty/create_policy-3.sql: (non-pretty) 1`] = `"CREATE POLICY "complex_policy" ON documents AS PERMISSIVE FOR UPDATE TO document_editors USING (owner_id = current_user_id() OR (shared = true AND permissions @> '{"edit": true}')) WITH CHECK (status <> 'archived' AND last_modified > (now() - '1 day'::interval))"`;
33+
34+
exports[`Pretty Misc SQL formatting should format pretty/create_policy-3.sql: (pretty) 1`] = `
35+
"CREATE POLICY "complex_policy"
36+
ON documents
37+
AS PERMISSIVE
38+
FOR UPDATE
39+
TO document_editors
40+
USING (
41+
owner_id = current_user_id()
42+
OR (shared = true
43+
AND permissions @> '{"edit": true}')
44+
)
45+
WITH CHECK (
46+
status <> 'archived'
47+
AND last_modified > (now() - '1 day'::interval)
48+
)"
2649
`;
2750

28-
exports[`Pretty CREATE POLICY formatting should format simple CREATE POLICY with pretty option enabled 1`] = `
51+
exports[`Pretty Misc SQL formatting should format pretty/create_policy-4.sql: (non-pretty) 1`] = `"CREATE POLICY "simple_policy" ON posts AS PERMISSIVE FOR SELECT TO PUBLIC USING (published = true)"`;
52+
53+
exports[`Pretty Misc SQL formatting should format pretty/create_policy-4.sql: (pretty) 1`] = `
2954
"CREATE POLICY "simple_policy"
3055
ON posts
3156
AS PERMISSIVE
3257
FOR SELECT
3358
TO PUBLIC
3459
USING (
3560
published = true
36-
);"
61+
)"
3762
`;
3863

39-
exports[`Pretty CREATE POLICY formatting should format very complex CREATE POLICY with pretty option enabled 1`] = `
40-
"CREATE POLICY "complex_policy"
41-
ON sensitive_data
42-
AS RESTRICTIVE
64+
exports[`Pretty Misc SQL formatting should format pretty/create_policy-5.sql: (non-pretty) 1`] = `"CREATE POLICY "simple_policy" ON posts AS PERMISSIVE FOR SELECT TO PUBLIC USING (published = true)"`;
65+
66+
exports[`Pretty Misc SQL formatting should format pretty/create_policy-5.sql: (pretty) 1`] = `
67+
"CREATE POLICY "simple_policy"
68+
ON posts
69+
AS PERMISSIVE
4370
FOR SELECT
44-
TO admin_role
71+
TO PUBLIC
4572
USING (
46-
department = current_user_department()
47-
AND EXISTS (SELECT 1
48-
FROM user_permissions
49-
WHERE
50-
(user_id = current_user_id()
51-
AND permission = 'read_sensitive'))
52-
)
53-
WITH CHECK (
54-
approved = true
55-
AND created_by = current_user_id()
56-
);"
73+
published = true
74+
)"
5775
`;
5876

59-
exports[`Pretty CREATE POLICY formatting should maintain single-line format for complex policy when pretty disabled 1`] = `"CREATE POLICY "admin_policy" ON sensitive_data AS RESTRICTIVE FOR SELECT TO admin_role USING (department = current_user_department()) WITH CHECK (approved = true);"`;
77+
exports[`Pretty Misc SQL formatting should format pretty/create_policy-6.sql: (non-pretty) 1`] = `"CREATE POLICY "Simple Policy" ON posts AS PERMISSIVE FOR SELECT TO PUBLIC USING (published = true)"`;
78+
79+
exports[`Pretty Misc SQL formatting should format pretty/create_policy-6.sql: (pretty) 1`] = `
80+
"CREATE POLICY "Simple Policy"
81+
ON posts
82+
AS PERMISSIVE
83+
FOR SELECT
84+
TO PUBLIC
85+
USING (
86+
published = true
87+
)"
88+
`;
6089

61-
exports[`Pretty CREATE POLICY formatting should maintain single-line format when pretty option disabled 1`] = `"CREATE POLICY "user_policy" ON users AS PERMISSIVE FOR ALL TO authenticated_users USING (user_id = current_user_id());"`;
90+
exports[`Pretty Misc SQL formatting should format pretty/create_policy-7.sql: (non-pretty) 1`] = `"CREATE POLICY "simplepolicy" ON posts AS PERMISSIVE FOR SELECT TO PUBLIC USING (published = true)"`;
6291

63-
exports[`Pretty CREATE POLICY formatting should use custom newline and tab characters in pretty mode 1`] = `
64-
"CREATE POLICY "user_policy"
65-
ON users
66-
AS PERMISSIVE
67-
FOR ALL
68-
TO authenticated_users
69-
USING (
70-
user_id = current_user_id()
71-
);"
92+
exports[`Pretty Misc SQL formatting should format pretty/create_policy-7.sql: (pretty) 1`] = `
93+
"CREATE POLICY "simplepolicy"
94+
ON posts
95+
AS PERMISSIVE
96+
FOR SELECT
97+
TO PUBLIC
98+
USING (
99+
published = true
100+
)"
72101
`;

packages/deparser/__tests__/pretty/__snapshots__/misc-pretty.test.ts.snap

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,8 @@ ORDER BY
154154
exports[`Pretty Misc SQL formatting should format 7.sql: pretty/misc-7.sql (non-pretty) 1`] = `"SELECT CASE WHEN n = 2 THEN ARRAY['month'] WHEN n = 4 THEN ARRAY['year'] WHEN n = 6 THEN ARRAY['year', 'month'] WHEN n = 8 THEN ARRAY['day'] WHEN n = 1024 THEN ARRAY['hour'] WHEN n = 1032 THEN ARRAY['day', 'hour'] WHEN n = 2048 THEN ARRAY['minute'] WHEN n = 3072 THEN ARRAY['hour', 'minute'] WHEN n = 3080 THEN ARRAY['day', 'minute'] WHEN n = 4096 THEN ARRAY['second'] WHEN n = 6144 THEN ARRAY['minute', 'second'] WHEN n = 7168 THEN ARRAY['hour', 'second'] WHEN n = 7176 THEN ARRAY['day', 'second'] WHEN n = 32767 THEN CAST(ARRAY[] AS text[]) END"`;
155155

156156
exports[`Pretty Misc SQL formatting should format 7.sql: pretty/misc-7.sql (pretty) 1`] = `
157-
"SELECT CASE
157+
"SELECT
158+
CASE
158159
WHEN n = 2 THEN ARRAY['month']
159160
WHEN n = 4 THEN ARRAY['year']
160161
WHEN n = 6 THEN ARRAY['year', 'month']
@@ -175,7 +176,8 @@ END"
175176
exports[`Pretty Misc SQL formatting should format 8.sql: pretty/misc-8.sql (non-pretty) 1`] = `"SELECT CASE WHEN n = 2 OR n = 3 THEN ARRAY['month', COALESCE(extra_label, 'unknown')] WHEN n IN (4, 5) THEN CASE WHEN is_leap_year THEN ARRAY['year', 'leap'] ELSE ARRAY['year'] END WHEN n = 6 THEN ARRAY['year', 'month', 'quarter'] WHEN n = 8 THEN ARRAY['day', 'week', compute_label(n)] WHEN n = 1024 THEN ARRAY['hour', format('%s-hour', extra_label)] WHEN n = 1032 AND flag = true THEN ARRAY['day', 'hour', 'flagged'] WHEN n BETWEEN 2048 AND 2049 THEN ARRAY['minute', 'tick'] WHEN n = 3072 THEN ARRAY['hour', 'minute', current_setting('timezone')] WHEN n = 3080 THEN ARRAY['day', 'minute', to_char(now(), 'HH24:MI')] WHEN n IN (4096, 4097, 4098) THEN ARRAY['second', 'millisecond'] WHEN n = 6144 THEN ARRAY['minute', 'second', CASE WHEN use_micro = true THEN 'microsecond' ELSE 'none' END] WHEN n = 7168 OR (n > 7170 AND n < 7180) THEN ARRAY['hour', 'second', 'buffered'] WHEN n = 7176 THEN ARRAY['day', 'second', extra_info::text] WHEN n = 32767 THEN CAST(ARRAY[] AS text[]) ELSE ARRAY['undefined', 'unknown', 'fallback'] END"`;
176177

177178
exports[`Pretty Misc SQL formatting should format 8.sql: pretty/misc-8.sql (pretty) 1`] = `
178-
"SELECT CASE
179+
"SELECT
180+
CASE
179181
WHEN n = 2
180182
OR n = 3 THEN ARRAY['month', COALESCE(extra_label, 'unknown')]
181183
WHEN n IN (4, 5) THEN CASE
@@ -237,7 +239,8 @@ exports[`Pretty Misc SQL formatting should format 11.sql: pretty/misc-11.sql (no
237239

238240
exports[`Pretty Misc SQL formatting should format 11.sql: pretty/misc-11.sql (pretty) 1`] = `
239241
"SELECT *
240-
FROM users AS u, LATERAL ( SELECT CASE
242+
FROM users AS u, LATERAL ( SELECT
243+
CASE
241244
WHEN u.is_admin THEN 'admin_dashboard'
242245
ELSE 'user_dashboard'
243246
END AS dashboard_view ) AS derived"
@@ -248,7 +251,8 @@ exports[`Pretty Misc SQL formatting should format 12.sql: pretty/misc-12.sql (no
248251
exports[`Pretty Misc SQL formatting should format 12.sql: pretty/misc-12.sql (pretty) 1`] = `
249252
"SELECT
250253
id,
251-
(SELECT CASE
254+
(SELECT
255+
CASE
252256
WHEN count(*) > 5 THEN 'frequent'
253257
ELSE 'occasional'
254258
END

packages/deparser/__tests__/pretty/__snapshots__/select-pretty.test.ts.snap

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,9 @@ FROM accounts"
5959
exports[`Pretty Misc SQL formatting should format misc-9: pretty/selects-9.sql (non-pretty) 1`] = `"SELECT (SELECT max(score) FROM results)"`;
6060

6161
exports[`Pretty Misc SQL formatting should format misc-9: pretty/selects-9.sql (pretty) 1`] = `
62-
"SELECT (SELECT max(score)
63-
FROM results)"
62+
"SELECT
63+
(SELECT max(score)
64+
FROM results)"
6465
`;
6566

6667
exports[`Pretty Misc SQL formatting should format misc-10: pretty/selects-10.sql (non-pretty) 1`] = `"SELECT count(*) OVER (), u.id FROM users AS u"`;
Lines changed: 25 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,31 @@
11
import { expectParseDeparse } from '../../test-utils';
22

3-
describe('Pretty CREATE POLICY formatting', () => {
4-
const basicPolicySql = `CREATE POLICY user_policy ON users FOR ALL TO authenticated_users USING (user_id = current_user_id());`;
5-
6-
const complexPolicySql = `CREATE POLICY admin_policy ON sensitive_data AS RESTRICTIVE FOR SELECT TO admin_role USING (department = current_user_department()) WITH CHECK (approved = true);`;
7-
8-
const veryComplexPolicySql = `CREATE POLICY complex_policy ON sensitive_data AS RESTRICTIVE FOR SELECT TO admin_role USING (department = current_user_department() AND EXISTS (SELECT 1 FROM user_permissions WHERE user_id = current_user_id() AND permission = 'read_sensitive')) WITH CHECK (approved = true AND created_by = current_user_id());`;
9-
10-
const simplePolicySql = `CREATE POLICY simple_policy ON posts FOR SELECT TO public USING (published = true);`;
11-
12-
it('should format basic CREATE POLICY with pretty option enabled', async () => {
13-
const result = await expectParseDeparse(basicPolicySql, { pretty: true });
14-
expect(result).toMatchSnapshot();
15-
});
16-
17-
it('should maintain single-line format when pretty option disabled', async () => {
18-
const result = await expectParseDeparse(basicPolicySql, { pretty: false });
19-
expect(result).toMatchSnapshot();
20-
});
21-
22-
it('should format complex CREATE POLICY with pretty option enabled', async () => {
23-
const result = await expectParseDeparse(complexPolicySql, { pretty: true });
24-
expect(result).toMatchSnapshot();
25-
});
26-
27-
it('should maintain single-line format for complex policy when pretty disabled', async () => {
28-
const result = await expectParseDeparse(complexPolicySql, { pretty: false });
29-
expect(result).toMatchSnapshot();
30-
});
31-
32-
it('should format simple CREATE POLICY with pretty option enabled', async () => {
33-
const result = await expectParseDeparse(simplePolicySql, { pretty: true });
34-
expect(result).toMatchSnapshot();
35-
});
36-
37-
it('should format very complex CREATE POLICY with pretty option enabled', async () => {
38-
const result = await expectParseDeparse(veryComplexPolicySql, { pretty: true });
39-
expect(result).toMatchSnapshot();
40-
});
3+
const generateCoded = require('../../../../__fixtures__/generated/generated.json');
4+
5+
describe('Pretty Misc SQL formatting', () => {
6+
const testCases = [
7+
'pretty/create_policy-1.sql',
8+
'pretty/create_policy-2.sql',
9+
'pretty/create_policy-3.sql',
10+
'pretty/create_policy-4.sql',
11+
'pretty/create_policy-5.sql',
12+
'pretty/create_policy-6.sql',
13+
'pretty/create_policy-7.sql',
14+
];
15+
16+
// Generate individual tests for each case and format type
17+
testCases.forEach((testName, index) => {
18+
const sql = generateCoded[testName];
19+
20+
it(`should format ${testName}: (pretty)`, async () => {
21+
const result = await expectParseDeparse(sql, { pretty: true });
22+
expect(result).toMatchSnapshot();
23+
});
4124

42-
it('should use custom newline and tab characters in pretty mode', async () => {
43-
const result = await expectParseDeparse(basicPolicySql, {
44-
pretty: true,
45-
newline: '\r\n',
46-
tab: ' '
25+
it(`should format ${testName}: (non-pretty)`, async () => {
26+
const result = await expectParseDeparse(sql, { pretty: false });
27+
expect(result).toMatchSnapshot();
4728
});
48-
expect(result).toMatchSnapshot();
4929
});
30+
5031
});

packages/deparser/__tests__/pretty/misc-pretty.test.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,4 @@ describe('Pretty Misc SQL formatting', () => {
4040
});
4141
});
4242

43-
it('should validate AST equivalence for all misc cases', async () => {
44-
const allSql = testCases.map((key) => generateCoded[key]);
45-
46-
for (const sql of allSql) {
47-
await expectParseDeparse(sql, { pretty: false });
48-
await expectParseDeparse(sql, { pretty: true });
49-
}
50-
});
5143
});

packages/deparser/__tests__/pretty/select-pretty.test.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,4 @@ describe('Pretty Misc SQL formatting', () => {
3737
});
3838
});
3939

40-
it('should validate AST equivalence for all misc cases', async () => {
41-
const allSql = testCases.map((key) => generateCoded[key]);
42-
43-
for (const sql of allSql) {
44-
await expectParseDeparse(sql, { pretty: false });
45-
await expectParseDeparse(sql, { pretty: true });
46-
}
47-
});
4840
});

0 commit comments

Comments
 (0)