Skip to content

Commit 40c6f9b

Browse files
committed
Also test trigger in sync client
1 parent d099911 commit 40c6f9b

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

dart/test/sync_test.dart

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1170,6 +1170,76 @@ CREATE TRIGGER users_delete
11701170
expect(db.select('SELECT * FROM users'), isEmpty);
11711171
});
11721172

1173+
syncTest('default trigger smoke test', (_) {
1174+
db.execute(
1175+
'CREATE TABLE local_users (id TEXT NOT NULL PRIMARY KEY, name TEXT NOT NULL) STRICT;');
1176+
final table = {
1177+
'name': 'users',
1178+
'table_name': 'local_users',
1179+
// This also tests that the trigger preventing updates and deletes on
1180+
// insert-only tables is inert during sync_local.
1181+
'insert_only': true,
1182+
'put': {
1183+
'sql': 'INSERT OR REPLACE INTO local_users (id, name) VALUES (?, ?);',
1184+
'params': [
1185+
'Id',
1186+
{'Column': 'name'}
1187+
],
1188+
},
1189+
'delete': {
1190+
'sql': 'DELETE FROM local_users WHERE id = ?',
1191+
'params': ['Id'],
1192+
},
1193+
'clear': 'DELETE FROM local_users;',
1194+
};
1195+
db.execute('''
1196+
SELECT
1197+
powersync_create_raw_table_crud_trigger(?1, 'test_insert', 'INSERT'),
1198+
powersync_create_raw_table_crud_trigger(?1, 'test_update', 'UPDATE'),
1199+
powersync_create_raw_table_crud_trigger(?1, 'test_delete', 'DELETE')
1200+
''', [json.encode(table)]);
1201+
1202+
invokeControl(
1203+
'start',
1204+
json.encode({
1205+
'schema': {
1206+
'raw_tables': [table],
1207+
'tables': [],
1208+
}
1209+
}));
1210+
1211+
// Insert
1212+
pushCheckpoint(buckets: [bucketDescription('a')]);
1213+
pushSyncData(
1214+
'a',
1215+
'1',
1216+
'my_user',
1217+
'PUT',
1218+
{'name': 'First user'},
1219+
objectType: 'users',
1220+
);
1221+
pushCheckpointComplete();
1222+
1223+
final users = db.select('SELECT * FROM local_users;');
1224+
expect(users, [
1225+
{'id': 'my_user', 'name': 'First user'}
1226+
]);
1227+
1228+
// Delete
1229+
pushCheckpoint(buckets: [bucketDescription('a')]);
1230+
pushSyncData(
1231+
'a',
1232+
'1',
1233+
'my_user',
1234+
'REMOVE',
1235+
null,
1236+
objectType: 'users',
1237+
);
1238+
pushCheckpointComplete();
1239+
1240+
expect(db.select('SELECT * FROM local_users'), isEmpty);
1241+
});
1242+
11731243
test('reports errors from underlying statements', () {
11741244
setupRawTables();
11751245
invokeControl('start', json.encode({'schema': schema}));

0 commit comments

Comments
 (0)