Skip to content

Commit c3a21f1

Browse files
committed
Add smoke test
1 parent 37fbd95 commit c3a21f1

File tree

1 file changed

+99
-1
lines changed

1 file changed

+99
-1
lines changed

packages/powersync_core/test/in_memory_sync_test.dart

Lines changed: 99 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ void _declareTests(String name, SyncOptions options) {
4848
var credentialsCallbackCount = 0;
4949
Future<void> Function(PowerSyncDatabase) uploadData = (db) async {};
5050

51-
void createSyncClient() {
51+
void createSyncClient({Schema? schema}) {
5252
final (client, server) = inMemoryServer();
5353
server.mount(syncService.router.call);
5454

@@ -63,6 +63,7 @@ void _declareTests(String name, SyncOptions options) {
6363
);
6464
}, uploadData: (db) => uploadData(db)),
6565
options: options,
66+
customSchema: schema,
6667
);
6768

6869
addTearDown(() async {
@@ -207,6 +208,103 @@ void _declareTests(String name, SyncOptions options) {
207208
// because the messages were received in quick succession.
208209
expect(commits, 1);
209210
});
211+
} else {
212+
// raw tables are only supported by the rust sync client
213+
test('raw tabkes', () async {
214+
final schema = Schema(const [], rawTables: [
215+
RawTable(
216+
name: 'lists',
217+
put: PendingStatement(
218+
sql: 'INSERT OR REPLACE INTO lists (id, name) VALUES (?, ?)',
219+
params: [
220+
PendingStatementValue.id(),
221+
PendingStatementValue.column('name'),
222+
],
223+
),
224+
delete: PendingStatement(
225+
sql: 'DELETE FROM lists WHERE id = ?',
226+
params: [
227+
PendingStatementValue.id(),
228+
],
229+
),
230+
),
231+
]);
232+
233+
await database.execute(
234+
'CREATE TABLE lists (id TEXT NOT NULL PRIMARY KEY, name TEXT);');
235+
final query = StreamQueue(
236+
database.watch('SELECT * FROM lists', throttle: Duration.zero));
237+
await expectLater(query, emits(isEmpty));
238+
239+
createSyncClient(schema: schema);
240+
await waitForConnection();
241+
242+
syncService
243+
..addLine({
244+
'checkpoint': Checkpoint(
245+
lastOpId: '1',
246+
writeCheckpoint: null,
247+
checksums: [
248+
BucketChecksum(bucket: 'a', priority: 3, checksum: 0)
249+
],
250+
)
251+
})
252+
..addLine({
253+
'data': {
254+
'bucket': 'a',
255+
'data': [
256+
{
257+
'checksum': 0,
258+
'data': json.encode({'name': 'custom list'}),
259+
'op': 'PUT',
260+
'op_id': '1',
261+
'object_id': 'my_list',
262+
'object_type': 'lists'
263+
}
264+
]
265+
}
266+
})
267+
..addLine({
268+
'checkpoint_complete': {'last_op_id': '1'}
269+
});
270+
271+
await expectLater(
272+
query,
273+
emits([
274+
{'id': 'my_list', 'name': 'custom list'}
275+
]),
276+
);
277+
278+
syncService
279+
..addLine({
280+
'checkpoint': Checkpoint(
281+
lastOpId: '2',
282+
writeCheckpoint: null,
283+
checksums: [
284+
BucketChecksum(bucket: 'a', priority: 3, checksum: 0)
285+
],
286+
)
287+
})
288+
..addLine({
289+
'data': {
290+
'bucket': 'a',
291+
'data': [
292+
{
293+
'checksum': 0,
294+
'op': 'REMOVE',
295+
'op_id': '2',
296+
'object_id': 'my_list',
297+
'object_type': 'lists'
298+
}
299+
]
300+
}
301+
})
302+
..addLine({
303+
'checkpoint_complete': {'last_op_id': '2'}
304+
});
305+
306+
await expectLater(query, emits(isEmpty));
307+
});
210308
}
211309

212310
group('partial sync', () {

0 commit comments

Comments
 (0)