Skip to content

Commit bf5180b

Browse files
explicitly use drizzle as a test
1 parent 63cd1b6 commit bf5180b

File tree

3 files changed

+928
-533
lines changed

3 files changed

+928
-533
lines changed

packages/react/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
"jsdom": "^24.0.0",
4242
"react": "18.3.1",
4343
"react-dom": "18.3.1",
44-
"react-error-boundary": "^4.1.0"
44+
"react-error-boundary": "^4.1.0",
45+
"@powersync/drizzle-driver": "workspace:*"
4546
}
4647
}

packages/react/tests/useQuery.test.tsx

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import * as commonSdk from '@powersync/common';
2+
import { toCompilableQuery, wrapPowerSyncWithDrizzle } from '@powersync/drizzle-driver';
23
import { PowerSyncDatabase } from '@powersync/web';
34
import { act, cleanup, renderHook, waitFor } from '@testing-library/react';
5+
import { eq } from 'drizzle-orm';
6+
import { sqliteTable, text } from 'drizzle-orm/sqlite-core';
47
import pDefer from 'p-defer';
58
import React, { useEffect } from 'react';
69
import { beforeEach, describe, expect, it, onTestFinished, vi } from 'vitest';
@@ -168,6 +171,69 @@ describe('useQuery', () => {
168171
);
169172
});
170173

174+
it('should react to updated queries (Explicit Drizzle DB)', async () => {
175+
const db = openPowerSync();
176+
177+
const lists = sqliteTable('lists', {
178+
id: text('id'),
179+
name: text('name')
180+
});
181+
182+
const drizzleDb = wrapPowerSyncWithDrizzle(db, {
183+
schema: {
184+
lists
185+
}
186+
});
187+
188+
const wrapper = ({ children }) => <PowerSyncContext.Provider value={db}>{children}</PowerSyncContext.Provider>;
189+
190+
let updateParameters = (params: string): void => {};
191+
const newParametersPromise = new Promise<string>((resolve) => {
192+
updateParameters = resolve;
193+
});
194+
195+
await db.execute(/* sql */ `
196+
INSERT INTO
197+
lists (id, name)
198+
VALUES
199+
(uuid (), 'first'),
200+
(uuid (), 'second')
201+
`);
202+
203+
const query = () => {
204+
const [name, setName] = React.useState<string>('first');
205+
const drizzleQuery = drizzleDb.select().from(lists).where(eq(lists.name, name));
206+
207+
useEffect(() => {
208+
// allow updating the parameters externally
209+
newParametersPromise.then((params) => setName(params));
210+
}, []);
211+
212+
return useQuery(toCompilableQuery(drizzleQuery));
213+
};
214+
215+
const { result } = renderHook(query, { wrapper });
216+
217+
// We should only receive the first list due to the WHERE clause
218+
await vi.waitFor(
219+
() => {
220+
expect(result.current.data[0]?.name).toEqual('first');
221+
},
222+
{ timeout: 500, interval: 100 }
223+
);
224+
225+
// Now update the parameter
226+
updateParameters('second');
227+
228+
// We should now only receive the second list due to the WHERE clause and updated parameter
229+
await vi.waitFor(
230+
() => {
231+
expect(result.current.data[0]?.name).toEqual('second');
232+
},
233+
{ timeout: 500, interval: 100 }
234+
);
235+
});
236+
171237
it('should react to updated queries', async () => {
172238
const db = openPowerSync();
173239

0 commit comments

Comments
 (0)