@powersync/service-core-tests 0.15.3 → 0.15.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/test-utils/MetricsHelper.js +1 -1
  3. package/dist/test-utils/MetricsHelper.js.map +1 -1
  4. package/dist/test-utils/StorageDataHelpers.d.ts +8 -0
  5. package/dist/test-utils/StorageDataHelpers.js +33 -0
  6. package/dist/test-utils/StorageDataHelpers.js.map +1 -0
  7. package/dist/test-utils/general-utils.d.ts +1 -1
  8. package/dist/test-utils/general-utils.js +1 -1
  9. package/dist/test-utils/test-utils-index.d.ts +1 -0
  10. package/dist/test-utils/test-utils-index.js +1 -0
  11. package/dist/test-utils/test-utils-index.js.map +1 -1
  12. package/dist/tests/register-data-storage-data-tests.js +18 -0
  13. package/dist/tests/register-data-storage-data-tests.js.map +1 -1
  14. package/dist/tests/register-data-storage-parameter-tests.js +434 -62
  15. package/dist/tests/register-data-storage-parameter-tests.js.map +1 -1
  16. package/dist/tests/register-parameter-compacting-tests.js +8 -8
  17. package/dist/tests/register-parameter-compacting-tests.js.map +1 -1
  18. package/dist/tests/register-sync-tests.js +66 -0
  19. package/dist/tests/register-sync-tests.js.map +1 -1
  20. package/dist/tests/tests-index.d.ts +4 -4
  21. package/dist/tests/tests-index.js +4 -4
  22. package/dist/tests/tests-index.js.map +1 -1
  23. package/package.json +6 -6
  24. package/src/test-utils/MetricsHelper.ts +1 -1
  25. package/src/test-utils/StorageDataHelpers.ts +44 -0
  26. package/src/test-utils/general-utils.ts +1 -1
  27. package/src/test-utils/test-utils-index.ts +1 -0
  28. package/src/tests/register-data-storage-data-tests.ts +22 -0
  29. package/src/tests/register-data-storage-parameter-tests.ts +517 -64
  30. package/src/tests/register-parameter-compacting-tests.ts +8 -9
  31. package/src/tests/register-sync-tests.ts +74 -0
  32. package/src/tests/tests-index.ts +4 -4
  33. package/tsconfig.tsbuildinfo +1 -1
@@ -2,7 +2,6 @@ import { storage, updateSyncRulesFromYaml } from '@powersync/service-core';
2
2
  import { ScopedParameterLookup } from '@powersync/service-sync-rules';
3
3
  import { expect, test } from 'vitest';
4
4
  import * as test_utils from '../test-utils/test-utils-index.js';
5
- import { parameterLookupScope } from './util.js';
6
5
 
7
6
  export function registerParameterCompactTests(config: storage.TestStorageConfig) {
8
7
  const generateStorageFactory = config.factory;
@@ -45,8 +44,8 @@ bucket_definitions:
45
44
  const lookup = ScopedParameterLookup.direct({ lookupName: 'test', queryId: '1', source: null as any }, ['t1']);
46
45
 
47
46
  const checkpoint1 = await bucketStorage.getCheckpoint();
48
- const parameters1 = await checkpoint1.getParameterSets([lookup]);
49
- expect(parameters1).toEqual([{ id: 't1' }]);
47
+ const parameters1 = await checkpoint1.getParameterSets([lookup], 1000);
48
+ expect(parameters1).toEqual([{ lookup, rows: [{ id: 't1' }] }]);
50
49
 
51
50
  await writer.save({
52
51
  sourceTable: testTable,
@@ -71,16 +70,16 @@ bucket_definitions:
71
70
  });
72
71
  await writer.commit('1/2');
73
72
  const checkpoint2 = await bucketStorage.getCheckpoint();
74
- const parameters2 = await checkpoint2.getParameterSets([lookup]);
73
+ const parameters2 = await checkpoint2.getParameterSets([lookup], 1000);
75
74
  expect(parameters2).toEqual([]);
76
75
 
77
76
  const statsBefore = await bucketStorage.factory.getStorageMetrics();
78
77
  await bucketStorage.compact({ compactParameterData: true });
79
78
 
80
79
  // Check consistency
81
- const parameters1b = await checkpoint1.getParameterSets([lookup]);
82
- const parameters2b = await checkpoint2.getParameterSets([lookup]);
83
- expect(parameters1b).toEqual([{ id: 't1' }]);
80
+ const parameters1b = await checkpoint1.getParameterSets([lookup], 1000);
81
+ const parameters2b = await checkpoint2.getParameterSets([lookup], 1000);
82
+ expect(parameters1b).toEqual([{ lookup, rows: [{ id: 't1' }] }]);
84
83
  expect(parameters2b).toEqual([]);
85
84
 
86
85
  // Check storage size
@@ -151,14 +150,14 @@ bucket_definitions:
151
150
  const lookup = ScopedParameterLookup.direct({ lookupName: 'test', queryId: '1', source: null as any }, ['u1']);
152
151
 
153
152
  const checkpoint1 = await bucketStorage.getCheckpoint();
154
- const parameters1 = await checkpoint1.getParameterSets([lookup]);
153
+ const parameters1 = await checkpoint1.getParameterSets([lookup], 1000);
155
154
  expect(parameters1).toEqual([]);
156
155
 
157
156
  const statsBefore = await bucketStorage.factory.getStorageMetrics();
158
157
  await bucketStorage.compact({ compactParameterData: true, compactParameterCacheLimit: cacheLimit });
159
158
 
160
159
  // Check consistency
161
- const parameters1b = await checkpoint1.getParameterSets([lookup]);
160
+ const parameters1b = await checkpoint1.getParameterSets([lookup], 1000);
162
161
  expect(parameters1b).toEqual([]);
163
162
 
164
163
  // Check storage size
@@ -177,6 +177,80 @@ bucket_definitions:
177
177
  expect(lines).toMatchSnapshot();
178
178
  });
179
179
 
180
+ test('can override priority when subscribing to stream', async () => {
181
+ await using f = await factory();
182
+
183
+ const syncRules = await updateSyncRules(f, {
184
+ content: `
185
+ config:
186
+ edition: 3
187
+
188
+ streams:
189
+ todos:
190
+ query: SELECT * FROM test WHERE id IN subscription.parameter('test_ids')
191
+ `
192
+ });
193
+
194
+ const bucketStorage = f.getInstance(syncRules);
195
+ await using writer = await bucketStorage.createWriter(test_utils.BATCH_OPTIONS);
196
+ const testTable = await test_utils.resolveTestTable(writer, 'test', ['id'], config);
197
+
198
+ await writer.markAllSnapshotDone('0/1');
199
+ await writer.save({
200
+ sourceTable: testTable,
201
+ tag: storage.SaveOperationTag.INSERT,
202
+ after: {
203
+ id: 'a',
204
+ description: 'Test 1'
205
+ },
206
+ afterReplicaId: 't1'
207
+ });
208
+
209
+ await writer.save({
210
+ sourceTable: testTable,
211
+ tag: storage.SaveOperationTag.INSERT,
212
+ after: {
213
+ id: 'b',
214
+ description: 'Test 2'
215
+ },
216
+ afterReplicaId: 'earlier'
217
+ });
218
+
219
+ await writer.commit('0/1');
220
+
221
+ const stream = sync.streamResponse({
222
+ syncContext,
223
+ bucketStorage,
224
+ syncRules: bucketStorage.getParsedSyncRules(test_utils.PARSE_OPTIONS),
225
+ params: {
226
+ buckets: [],
227
+ include_checksum: true,
228
+ raw_data: true,
229
+ streams: {
230
+ include_defaults: true,
231
+ subscriptions: [
232
+ {
233
+ stream: 'todos',
234
+ parameters: { test_ids: ['a'] },
235
+ override_priority: 0
236
+ },
237
+ {
238
+ stream: 'todos',
239
+ parameters: { test_ids: ['a', 'b'] },
240
+ override_priority: null
241
+ }
242
+ ]
243
+ }
244
+ },
245
+ tracker,
246
+ token: new JwtPayload({ sub: '', exp: Date.now() / 1000 + 10 }),
247
+ isEncodingAsBson: false
248
+ });
249
+
250
+ const lines = await consumeCheckpointLines(stream);
251
+ expect(lines).toMatchSnapshot();
252
+ });
253
+
180
254
  test('sync interrupts low-priority buckets on new checkpoints', async () => {
181
255
  await using f = await factory();
182
256
 
@@ -1,10 +1,10 @@
1
1
  export * from './register-bucket-validation-tests.js';
2
2
  export * from './register-compacting-tests.js';
3
- export * from './register-parameter-compacting-tests.js';
4
- export * from './register-data-storage-parameter-tests.js';
5
- export * from './register-data-storage-data-tests.js';
6
3
  export * from './register-data-storage-checkpoint-tests.js';
4
+ export * from './register-data-storage-data-tests.js';
5
+ export * from './register-data-storage-parameter-tests.js';
7
6
  export * from './register-migration-tests.js';
8
- export * from './register-sync-tests.js';
7
+ export * from './register-parameter-compacting-tests.js';
9
8
  export * from './register-report-tests.js';
9
+ export * from './register-sync-tests.js';
10
10
  export * from './util.js';