Skip to content

Commit 9fce15f

Browse files
docs: add TESTS.md with current test status after async forEach fix
- Document 99.6% pass rate (263/264 tests passing) - Explain that misc-launchql-ext-types.test.ts failure is expected - Detail how test framework fix revealed previously hidden deparser bug - Include debugging features and error handling improvements - Provide testing commands and next steps for deparser bug fix The failing test demonstrates the async forEach fix is working correctly by now catching deparser issues that generate invalid SQL. Co-Authored-By: Dan Lynch <[email protected]>
1 parent 104a843 commit 9fce15f

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed

TESTS.md

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
# Test Status Report
2+
3+
**Last Updated:** June 21, 2025
4+
**Branch:** devin/1750543497-fix-async-foreach-test-framework
5+
**Test Framework:** Jest with custom FixtureTestUtils
6+
7+
## Current Test Results
8+
9+
After fixing the async forEach bug in the test framework:
10+
11+
```
12+
Test Suites: 1 failed, 250 passed, 251 total
13+
Tests: 1 failed, 263 passed, 264 total
14+
Time: 20.402 seconds
15+
```
16+
17+
**Pass Rate:** 99.6% (263/264 tests passing)
18+
19+
## Test Framework Fix Impact
20+
21+
The async forEach bug fix in `packages/deparser/test-utils/index.ts` has revealed a previously hidden deparser issue:
22+
23+
### Previously Hidden Failures Now Detected
24+
25+
- **`misc-launchql-ext-types.test.ts`** - Now properly fails due to deparser generating invalid SQL with missing closing quotes in regex patterns
26+
27+
### Root Cause of Test Framework Bug
28+
29+
The test framework was using `tree.stmts.forEach(async (stmt: any) => {` which doesn't properly await async operations. Errors thrown inside the async callback were "fire-and-forget" and never bubbled up to fail tests.
30+
31+
**Fixed by:** Converting to proper `for...of` loop to ensure async operations are awaited and errors are properly caught.
32+
33+
## Failing Tests
34+
35+
### 1. misc-launchql-ext-types.test.ts
36+
- **Status:** FAILING (Expected - reveals real deparser bug)
37+
- **Issue:** Deparser drops closing quotes from regex patterns in CREATE DOMAIN CHECK constraints
38+
- **Example:**
39+
```sql
40+
-- Input SQL:
41+
CREATE DOMAIN attachment AS jsonb CHECK (value ?& ARRAY['url', 'mime'] AND (value ->> 'url') ~ E'^(https?)://[^\\s/$.?#].[^\\s]*$')
42+
43+
-- Deparsed SQL (missing closing quote):
44+
CREATE DOMAIN attachment AS jsonb CHECK (value ?& ARRAY['url', 'mime'] AND (value ->> 'url') ~ '^(https?)://[^\s/$.?#].[^\s]*)
45+
```
46+
- **Error:** `PARSE ERROR: Unexpected token 'u', "unterminat"... is not valid JSON`
47+
48+
## Test Categories
49+
50+
- **Kitchen Sink Tests:** 251 test suites covering comprehensive SQL parsing scenarios
51+
- **Original Tests:** PostgreSQL upstream test cases
52+
- **Latest Tests:** Modern PostgreSQL feature tests
53+
- **Custom Tests:** LaunchQL-specific extensions and edge cases
54+
55+
## Test Framework Improvements
56+
57+
### Debugging Features Added
58+
- Detailed SQL comparison logging showing input vs deparsed output
59+
- Clear indication of exact vs different matches
60+
- Enhanced error reporting with parse failure details
61+
62+
### Error Handling Fixed
63+
- Async forEach converted to proper for-of loop
64+
- Proper error propagation from async operations
65+
- TypeScript error handling for diff function null cases
66+
67+
## Next Steps
68+
69+
1. **Fix Deparser Bug:** Address the missing quote issue in regex pattern handling
70+
2. **Verify Fix:** Ensure the deparser properly handles escaped string literals
71+
3. **Update Tests:** Confirm all tests pass after deparser fix
72+
4. **Monitor Regressions:** Run full test suite after each change
73+
74+
## Testing Commands
75+
76+
```bash
77+
# Run all tests
78+
cd packages/deparser
79+
yarn test
80+
81+
# Run specific test
82+
yarn test --testNamePattern="misc-launchql-ext-types"
83+
84+
# Watch mode for development
85+
yarn test:watch
86+
```
87+
88+
## Historical Context
89+
90+
This test status reflects the state after fixing a critical async forEach bug that was preventing the test framework from catching deparser failures. The one failing test now properly reveals a real issue that was previously hidden, demonstrating that the test framework fix is working as intended.

0 commit comments

Comments
 (0)