@powersync/service-core-tests 0.0.0-dev-20260313100403 → 0.0.0-dev-20260601140105
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.
- package/CHANGELOG.md +91 -5
- package/dist/test-utils/AbstractStreamTestContext.d.ts +51 -0
- package/dist/test-utils/AbstractStreamTestContext.js +143 -0
- package/dist/test-utils/AbstractStreamTestContext.js.map +1 -0
- package/dist/test-utils/MetricsHelper.js +1 -1
- package/dist/test-utils/MetricsHelper.js.map +1 -1
- package/dist/test-utils/StorageDataHelpers.d.ts +8 -0
- package/dist/test-utils/StorageDataHelpers.js +33 -0
- package/dist/test-utils/StorageDataHelpers.js.map +1 -0
- package/dist/test-utils/general-utils.d.ts +3 -8
- package/dist/test-utils/general-utils.js +28 -26
- package/dist/test-utils/general-utils.js.map +1 -1
- package/dist/test-utils/stream_utils.js +2 -2
- package/dist/test-utils/stream_utils.js.map +1 -1
- package/dist/test-utils/test-utils-index.d.ts +2 -0
- package/dist/test-utils/test-utils-index.js +2 -0
- package/dist/test-utils/test-utils-index.js.map +1 -1
- package/dist/tests/register-compacting-tests.js +491 -627
- package/dist/tests/register-compacting-tests.js.map +1 -1
- package/dist/tests/register-data-storage-checkpoint-tests.js +192 -304
- package/dist/tests/register-data-storage-checkpoint-tests.js.map +1 -1
- package/dist/tests/register-data-storage-data-tests.js +1125 -1446
- package/dist/tests/register-data-storage-data-tests.js.map +1 -1
- package/dist/tests/register-data-storage-parameter-tests.js +816 -629
- package/dist/tests/register-data-storage-parameter-tests.js.map +1 -1
- package/dist/tests/register-migration-tests.js +63 -139
- package/dist/tests/register-migration-tests.js.map +1 -1
- package/dist/tests/register-parameter-compacting-tests.js +95 -171
- package/dist/tests/register-parameter-compacting-tests.js.map +1 -1
- package/dist/tests/register-report-tests.js +22 -22
- package/dist/tests/register-report-tests.js.map +1 -1
- package/dist/tests/register-sync-tests.js +965 -1155
- package/dist/tests/register-sync-tests.js.map +1 -1
- package/dist/tests/tests-index.d.ts +4 -4
- package/dist/tests/tests-index.js +4 -4
- package/dist/tests/tests-index.js.map +1 -1
- package/dist/tests/util.d.ts +1 -2
- package/dist/tests/util.js +8 -5
- package/dist/tests/util.js.map +1 -1
- package/package.json +7 -6
- package/src/test-utils/AbstractStreamTestContext.ts +179 -0
- package/src/test-utils/MetricsHelper.ts +1 -1
- package/src/test-utils/StorageDataHelpers.ts +44 -0
- package/src/test-utils/general-utils.ts +31 -31
- package/src/test-utils/stream_utils.ts +2 -2
- package/src/test-utils/test-utils-index.ts +2 -0
- package/src/tests/register-data-storage-data-tests.ts +24 -2
- package/src/tests/register-data-storage-parameter-tests.ts +519 -67
- package/src/tests/register-parameter-compacting-tests.ts +8 -9
- package/src/tests/register-report-tests.ts +22 -22
- package/src/tests/register-sync-tests.ts +74 -0
- package/src/tests/tests-index.ts +4 -4
- package/src/tests/util.ts +12 -9
- package/tsconfig.json +3 -0
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,55 +1,3 @@
|
|
|
1
|
-
var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
|
|
2
|
-
if (value !== null && value !== void 0) {
|
|
3
|
-
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
4
|
-
var dispose, inner;
|
|
5
|
-
if (async) {
|
|
6
|
-
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
7
|
-
dispose = value[Symbol.asyncDispose];
|
|
8
|
-
}
|
|
9
|
-
if (dispose === void 0) {
|
|
10
|
-
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
11
|
-
dispose = value[Symbol.dispose];
|
|
12
|
-
if (async) inner = dispose;
|
|
13
|
-
}
|
|
14
|
-
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
15
|
-
if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
|
|
16
|
-
env.stack.push({ value: value, dispose: dispose, async: async });
|
|
17
|
-
}
|
|
18
|
-
else if (async) {
|
|
19
|
-
env.stack.push({ async: true });
|
|
20
|
-
}
|
|
21
|
-
return value;
|
|
22
|
-
};
|
|
23
|
-
var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
|
|
24
|
-
return function (env) {
|
|
25
|
-
function fail(e) {
|
|
26
|
-
env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
27
|
-
env.hasError = true;
|
|
28
|
-
}
|
|
29
|
-
var r, s = 0;
|
|
30
|
-
function next() {
|
|
31
|
-
while (r = env.stack.pop()) {
|
|
32
|
-
try {
|
|
33
|
-
if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
|
|
34
|
-
if (r.dispose) {
|
|
35
|
-
var result = r.dispose.call(r.value);
|
|
36
|
-
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
|
|
37
|
-
}
|
|
38
|
-
else s |= 1;
|
|
39
|
-
}
|
|
40
|
-
catch (e) {
|
|
41
|
-
fail(e);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
|
|
45
|
-
if (env.hasError) throw env.error;
|
|
46
|
-
}
|
|
47
|
-
return next();
|
|
48
|
-
};
|
|
49
|
-
})(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
50
|
-
var e = new Error(message);
|
|
51
|
-
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
52
|
-
});
|
|
53
1
|
import { storage, updateSyncRulesFromYaml } from '@powersync/service-core';
|
|
54
2
|
import { ScopedParameterLookup } from '@powersync/service-sync-rules';
|
|
55
3
|
import { expect, test } from 'vitest';
|
|
@@ -57,162 +5,138 @@ import * as test_utils from '../test-utils/test-utils-index.js';
|
|
|
57
5
|
export function registerParameterCompactTests(config) {
|
|
58
6
|
const generateStorageFactory = config.factory;
|
|
59
7
|
test('compacting parameters', async () => {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const factory = __addDisposableResource(env_1, await generateStorageFactory(), true);
|
|
63
|
-
const syncRules = await factory.updateSyncRules(updateSyncRulesFromYaml(`
|
|
8
|
+
await using factory = await generateStorageFactory();
|
|
9
|
+
const syncRules = await factory.updateSyncRules(updateSyncRulesFromYaml(`
|
|
64
10
|
bucket_definitions:
|
|
65
11
|
test:
|
|
66
12
|
parameters: select id from test where id = request.user_id()
|
|
67
13
|
data: []
|
|
14
|
+
`));
|
|
15
|
+
const bucketStorage = factory.getInstance(syncRules);
|
|
16
|
+
await using writer = await bucketStorage.createWriter(test_utils.BATCH_OPTIONS);
|
|
17
|
+
const testTable = await test_utils.resolveTestTable(writer, 'test', ['id'], config);
|
|
18
|
+
await writer.markAllSnapshotDone('1/1');
|
|
19
|
+
await writer.save({
|
|
20
|
+
sourceTable: testTable,
|
|
21
|
+
tag: storage.SaveOperationTag.INSERT,
|
|
22
|
+
after: {
|
|
23
|
+
id: 't1'
|
|
24
|
+
},
|
|
25
|
+
afterReplicaId: 't1'
|
|
26
|
+
});
|
|
27
|
+
await writer.save({
|
|
28
|
+
sourceTable: testTable,
|
|
29
|
+
tag: storage.SaveOperationTag.INSERT,
|
|
30
|
+
after: {
|
|
31
|
+
id: 't2'
|
|
32
|
+
},
|
|
33
|
+
afterReplicaId: 't2'
|
|
34
|
+
});
|
|
35
|
+
await writer.commit('1/1');
|
|
36
|
+
const lookup = ScopedParameterLookup.direct({ lookupName: 'test', queryId: '1', source: null }, ['t1']);
|
|
37
|
+
const checkpoint1 = await bucketStorage.getCheckpoint();
|
|
38
|
+
const parameters1 = await checkpoint1.getParameterSets([lookup], 1000);
|
|
39
|
+
expect(parameters1).toEqual([{ lookup, rows: [{ id: 't1' }] }]);
|
|
40
|
+
await writer.save({
|
|
41
|
+
sourceTable: testTable,
|
|
42
|
+
tag: storage.SaveOperationTag.UPDATE,
|
|
43
|
+
before: {
|
|
44
|
+
id: 't1'
|
|
45
|
+
},
|
|
46
|
+
beforeReplicaId: 't1',
|
|
47
|
+
after: {
|
|
48
|
+
id: 't1'
|
|
49
|
+
},
|
|
50
|
+
afterReplicaId: 't1'
|
|
51
|
+
});
|
|
52
|
+
await writer.save({
|
|
53
|
+
sourceTable: testTable,
|
|
54
|
+
tag: storage.SaveOperationTag.DELETE,
|
|
55
|
+
before: {
|
|
56
|
+
id: 't1'
|
|
57
|
+
},
|
|
58
|
+
beforeReplicaId: 't1'
|
|
59
|
+
});
|
|
60
|
+
await writer.commit('1/2');
|
|
61
|
+
const checkpoint2 = await bucketStorage.getCheckpoint();
|
|
62
|
+
const parameters2 = await checkpoint2.getParameterSets([lookup], 1000);
|
|
63
|
+
expect(parameters2).toEqual([]);
|
|
64
|
+
const statsBefore = await bucketStorage.factory.getStorageMetrics();
|
|
65
|
+
await bucketStorage.compact({ compactParameterData: true });
|
|
66
|
+
// Check consistency
|
|
67
|
+
const parameters1b = await checkpoint1.getParameterSets([lookup], 1000);
|
|
68
|
+
const parameters2b = await checkpoint2.getParameterSets([lookup], 1000);
|
|
69
|
+
expect(parameters1b).toEqual([{ lookup, rows: [{ id: 't1' }] }]);
|
|
70
|
+
expect(parameters2b).toEqual([]);
|
|
71
|
+
// Check storage size
|
|
72
|
+
const statsAfter = await bucketStorage.factory.getStorageMetrics();
|
|
73
|
+
expect(statsAfter.parameters_size_bytes).toBeLessThan(statsBefore.parameters_size_bytes);
|
|
74
|
+
});
|
|
75
|
+
for (let cacheLimit of [1, 10]) {
|
|
76
|
+
test(`compacting deleted parameters with cache size ${cacheLimit}`, async () => {
|
|
77
|
+
await using factory = await generateStorageFactory();
|
|
78
|
+
const syncRules = await factory.updateSyncRules(updateSyncRulesFromYaml(`
|
|
79
|
+
bucket_definitions:
|
|
80
|
+
test:
|
|
81
|
+
parameters: select id from test where uid = request.user_id()
|
|
82
|
+
data: []
|
|
68
83
|
`));
|
|
69
84
|
const bucketStorage = factory.getInstance(syncRules);
|
|
70
|
-
|
|
85
|
+
await using writer = await bucketStorage.createWriter(test_utils.BATCH_OPTIONS);
|
|
71
86
|
const testTable = await test_utils.resolveTestTable(writer, 'test', ['id'], config);
|
|
72
87
|
await writer.markAllSnapshotDone('1/1');
|
|
73
88
|
await writer.save({
|
|
74
89
|
sourceTable: testTable,
|
|
75
90
|
tag: storage.SaveOperationTag.INSERT,
|
|
76
91
|
after: {
|
|
77
|
-
id: 't1'
|
|
92
|
+
id: 't1',
|
|
93
|
+
uid: 'u1'
|
|
78
94
|
},
|
|
79
95
|
afterReplicaId: 't1'
|
|
80
96
|
});
|
|
97
|
+
// Interleave with another operation, to evict the other cache entry when compacting.
|
|
81
98
|
await writer.save({
|
|
82
99
|
sourceTable: testTable,
|
|
83
100
|
tag: storage.SaveOperationTag.INSERT,
|
|
84
101
|
after: {
|
|
85
|
-
id: 't2'
|
|
102
|
+
id: 't2',
|
|
103
|
+
uid: 'u1'
|
|
86
104
|
},
|
|
87
105
|
afterReplicaId: 't2'
|
|
88
106
|
});
|
|
89
107
|
await writer.commit('1/1');
|
|
90
|
-
const lookup = ScopedParameterLookup.direct({ lookupName: 'test', queryId: '1', source: null }, ['t1']);
|
|
91
|
-
const checkpoint1 = await bucketStorage.getCheckpoint();
|
|
92
|
-
const parameters1 = await checkpoint1.getParameterSets([lookup]);
|
|
93
|
-
expect(parameters1).toEqual([{ id: 't1' }]);
|
|
94
108
|
await writer.save({
|
|
95
109
|
sourceTable: testTable,
|
|
96
|
-
tag: storage.SaveOperationTag.
|
|
110
|
+
tag: storage.SaveOperationTag.DELETE,
|
|
97
111
|
before: {
|
|
98
|
-
id: 't1'
|
|
112
|
+
id: 't1',
|
|
113
|
+
uid: 'u1'
|
|
99
114
|
},
|
|
100
|
-
beforeReplicaId: 't1'
|
|
101
|
-
after: {
|
|
102
|
-
id: 't1'
|
|
103
|
-
},
|
|
104
|
-
afterReplicaId: 't1'
|
|
115
|
+
beforeReplicaId: 't1'
|
|
105
116
|
});
|
|
117
|
+
await writer.commit('2/1');
|
|
106
118
|
await writer.save({
|
|
107
119
|
sourceTable: testTable,
|
|
108
|
-
tag: storage.SaveOperationTag.
|
|
109
|
-
|
|
110
|
-
id: '
|
|
120
|
+
tag: storage.SaveOperationTag.UPDATE,
|
|
121
|
+
after: {
|
|
122
|
+
id: 't2',
|
|
123
|
+
uid: 'u2'
|
|
111
124
|
},
|
|
112
|
-
|
|
125
|
+
afterReplicaId: 't2'
|
|
113
126
|
});
|
|
114
|
-
await writer.commit('1
|
|
115
|
-
const
|
|
116
|
-
const
|
|
117
|
-
|
|
127
|
+
await writer.commit('3/1');
|
|
128
|
+
const lookup = ScopedParameterLookup.direct({ lookupName: 'test', queryId: '1', source: null }, ['u1']);
|
|
129
|
+
const checkpoint1 = await bucketStorage.getCheckpoint();
|
|
130
|
+
const parameters1 = await checkpoint1.getParameterSets([lookup], 1000);
|
|
131
|
+
expect(parameters1).toEqual([]);
|
|
118
132
|
const statsBefore = await bucketStorage.factory.getStorageMetrics();
|
|
119
|
-
await bucketStorage.compact({ compactParameterData: true });
|
|
133
|
+
await bucketStorage.compact({ compactParameterData: true, compactParameterCacheLimit: cacheLimit });
|
|
120
134
|
// Check consistency
|
|
121
|
-
const parameters1b = await checkpoint1.getParameterSets([lookup]);
|
|
122
|
-
|
|
123
|
-
expect(parameters1b).toEqual([{ id: 't1' }]);
|
|
124
|
-
expect(parameters2b).toEqual([]);
|
|
135
|
+
const parameters1b = await checkpoint1.getParameterSets([lookup], 1000);
|
|
136
|
+
expect(parameters1b).toEqual([]);
|
|
125
137
|
// Check storage size
|
|
126
138
|
const statsAfter = await bucketStorage.factory.getStorageMetrics();
|
|
127
139
|
expect(statsAfter.parameters_size_bytes).toBeLessThan(statsBefore.parameters_size_bytes);
|
|
128
|
-
}
|
|
129
|
-
catch (e_1) {
|
|
130
|
-
env_1.error = e_1;
|
|
131
|
-
env_1.hasError = true;
|
|
132
|
-
}
|
|
133
|
-
finally {
|
|
134
|
-
const result_1 = __disposeResources(env_1);
|
|
135
|
-
if (result_1)
|
|
136
|
-
await result_1;
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
for (let cacheLimit of [1, 10]) {
|
|
140
|
-
test(`compacting deleted parameters with cache size ${cacheLimit}`, async () => {
|
|
141
|
-
const env_2 = { stack: [], error: void 0, hasError: false };
|
|
142
|
-
try {
|
|
143
|
-
const factory = __addDisposableResource(env_2, await generateStorageFactory(), true);
|
|
144
|
-
const syncRules = await factory.updateSyncRules(updateSyncRulesFromYaml(`
|
|
145
|
-
bucket_definitions:
|
|
146
|
-
test:
|
|
147
|
-
parameters: select id from test where uid = request.user_id()
|
|
148
|
-
data: []
|
|
149
|
-
`));
|
|
150
|
-
const bucketStorage = factory.getInstance(syncRules);
|
|
151
|
-
const writer = __addDisposableResource(env_2, await bucketStorage.createWriter(test_utils.BATCH_OPTIONS), true);
|
|
152
|
-
const testTable = await test_utils.resolveTestTable(writer, 'test', ['id'], config);
|
|
153
|
-
await writer.markAllSnapshotDone('1/1');
|
|
154
|
-
await writer.save({
|
|
155
|
-
sourceTable: testTable,
|
|
156
|
-
tag: storage.SaveOperationTag.INSERT,
|
|
157
|
-
after: {
|
|
158
|
-
id: 't1',
|
|
159
|
-
uid: 'u1'
|
|
160
|
-
},
|
|
161
|
-
afterReplicaId: 't1'
|
|
162
|
-
});
|
|
163
|
-
// Interleave with another operation, to evict the other cache entry when compacting.
|
|
164
|
-
await writer.save({
|
|
165
|
-
sourceTable: testTable,
|
|
166
|
-
tag: storage.SaveOperationTag.INSERT,
|
|
167
|
-
after: {
|
|
168
|
-
id: 't2',
|
|
169
|
-
uid: 'u1'
|
|
170
|
-
},
|
|
171
|
-
afterReplicaId: 't2'
|
|
172
|
-
});
|
|
173
|
-
await writer.commit('1/1');
|
|
174
|
-
await writer.save({
|
|
175
|
-
sourceTable: testTable,
|
|
176
|
-
tag: storage.SaveOperationTag.DELETE,
|
|
177
|
-
before: {
|
|
178
|
-
id: 't1',
|
|
179
|
-
uid: 'u1'
|
|
180
|
-
},
|
|
181
|
-
beforeReplicaId: 't1'
|
|
182
|
-
});
|
|
183
|
-
await writer.commit('2/1');
|
|
184
|
-
await writer.save({
|
|
185
|
-
sourceTable: testTable,
|
|
186
|
-
tag: storage.SaveOperationTag.UPDATE,
|
|
187
|
-
after: {
|
|
188
|
-
id: 't2',
|
|
189
|
-
uid: 'u2'
|
|
190
|
-
},
|
|
191
|
-
afterReplicaId: 't2'
|
|
192
|
-
});
|
|
193
|
-
await writer.commit('3/1');
|
|
194
|
-
const lookup = ScopedParameterLookup.direct({ lookupName: 'test', queryId: '1', source: null }, ['u1']);
|
|
195
|
-
const checkpoint1 = await bucketStorage.getCheckpoint();
|
|
196
|
-
const parameters1 = await checkpoint1.getParameterSets([lookup]);
|
|
197
|
-
expect(parameters1).toEqual([]);
|
|
198
|
-
const statsBefore = await bucketStorage.factory.getStorageMetrics();
|
|
199
|
-
await bucketStorage.compact({ compactParameterData: true, compactParameterCacheLimit: cacheLimit });
|
|
200
|
-
// Check consistency
|
|
201
|
-
const parameters1b = await checkpoint1.getParameterSets([lookup]);
|
|
202
|
-
expect(parameters1b).toEqual([]);
|
|
203
|
-
// Check storage size
|
|
204
|
-
const statsAfter = await bucketStorage.factory.getStorageMetrics();
|
|
205
|
-
expect(statsAfter.parameters_size_bytes).toBeLessThan(statsBefore.parameters_size_bytes);
|
|
206
|
-
}
|
|
207
|
-
catch (e_2) {
|
|
208
|
-
env_2.error = e_2;
|
|
209
|
-
env_2.hasError = true;
|
|
210
|
-
}
|
|
211
|
-
finally {
|
|
212
|
-
const result_2 = __disposeResources(env_2);
|
|
213
|
-
if (result_2)
|
|
214
|
-
await result_2;
|
|
215
|
-
}
|
|
216
140
|
});
|
|
217
141
|
}
|
|
218
142
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-parameter-compacting-tests.js","sourceRoot":"","sources":["../../src/tests/register-parameter-compacting-tests.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"register-parameter-compacting-tests.js","sourceRoot":"","sources":["../../src/tests/register-parameter-compacting-tests.ts"],"names":[],"mappings":"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"}
|
|
@@ -98,33 +98,33 @@ const removeVolatileFields = (connections) => {
|
|
|
98
98
|
});
|
|
99
99
|
};
|
|
100
100
|
export async function registerReportTests(factory) {
|
|
101
|
-
it('
|
|
102
|
-
const current = await factory.
|
|
101
|
+
it('Should show currently connected users', async () => {
|
|
102
|
+
const current = await factory.getConnectedClients();
|
|
103
103
|
expect(current).toMatchSnapshot();
|
|
104
104
|
});
|
|
105
|
-
it('
|
|
106
|
-
const sdk = await factory.
|
|
105
|
+
it('Should show connection report data for user over the past month', async () => {
|
|
106
|
+
const sdk = await factory.getClientConnectionReports({
|
|
107
107
|
start: monthAgo,
|
|
108
108
|
end: now
|
|
109
109
|
});
|
|
110
110
|
expect(sdk).toMatchSnapshot();
|
|
111
111
|
});
|
|
112
|
-
it('
|
|
113
|
-
const sdk = await factory.
|
|
112
|
+
it('Should show connection report data for user over the past week', async () => {
|
|
113
|
+
const sdk = await factory.getClientConnectionReports({
|
|
114
114
|
start: weekAgo,
|
|
115
115
|
end: now
|
|
116
116
|
});
|
|
117
117
|
expect(sdk).toMatchSnapshot();
|
|
118
118
|
});
|
|
119
|
-
it('
|
|
120
|
-
const sdk = await factory.
|
|
119
|
+
it('Should show connection report data for user over the past day', async () => {
|
|
120
|
+
const sdk = await factory.getClientConnectionReports({
|
|
121
121
|
start: dayAgo,
|
|
122
122
|
end: now
|
|
123
123
|
});
|
|
124
124
|
expect(sdk).toMatchSnapshot();
|
|
125
125
|
});
|
|
126
|
-
it('
|
|
127
|
-
const connections = await factory.
|
|
126
|
+
it('Should show paginated response of all connections of specified client_id', async () => {
|
|
127
|
+
const connections = await factory.getGeneralClientConnectionAnalytics({
|
|
128
128
|
client_id: user_two.client_id
|
|
129
129
|
});
|
|
130
130
|
const cleaned = {
|
|
@@ -133,8 +133,8 @@ export async function registerReportTests(factory) {
|
|
|
133
133
|
};
|
|
134
134
|
expect(cleaned).toMatchSnapshot();
|
|
135
135
|
});
|
|
136
|
-
it('
|
|
137
|
-
const connections = await factory.
|
|
136
|
+
it('Should show paginated response of connections of specified user_id', async () => {
|
|
137
|
+
const connections = await factory.getGeneralClientConnectionAnalytics({
|
|
138
138
|
user_id: user_one.user_id
|
|
139
139
|
});
|
|
140
140
|
const cleaned = {
|
|
@@ -143,8 +143,8 @@ export async function registerReportTests(factory) {
|
|
|
143
143
|
};
|
|
144
144
|
expect(cleaned).toMatchSnapshot();
|
|
145
145
|
});
|
|
146
|
-
it('
|
|
147
|
-
const connections = await factory.
|
|
146
|
+
it('Should show paginated response of connections over a date range', async () => {
|
|
147
|
+
const connections = await factory.getGeneralClientConnectionAnalytics({
|
|
148
148
|
date_range: {
|
|
149
149
|
start: weekAgo,
|
|
150
150
|
end: now
|
|
@@ -156,8 +156,8 @@ export async function registerReportTests(factory) {
|
|
|
156
156
|
};
|
|
157
157
|
expect(cleaned).toMatchSnapshot();
|
|
158
158
|
});
|
|
159
|
-
it('
|
|
160
|
-
const connections = await factory.
|
|
159
|
+
it('Should show paginated response of connections over a date range of specified client_id and user_id', async () => {
|
|
160
|
+
const connections = await factory.getGeneralClientConnectionAnalytics({
|
|
161
161
|
client_id: user_one.client_id,
|
|
162
162
|
user_id: user_one.user_id,
|
|
163
163
|
date_range: {
|
|
@@ -171,8 +171,8 @@ export async function registerReportTests(factory) {
|
|
|
171
171
|
};
|
|
172
172
|
expect(cleaned).toMatchSnapshot();
|
|
173
173
|
});
|
|
174
|
-
it('
|
|
175
|
-
const initial = await factory.
|
|
174
|
+
it('Should show paginated response of all connections with a limit', async () => {
|
|
175
|
+
const initial = await factory.getGeneralClientConnectionAnalytics({
|
|
176
176
|
limit: 4
|
|
177
177
|
});
|
|
178
178
|
const cursor = initial.cursor;
|
|
@@ -183,7 +183,7 @@ export async function registerReportTests(factory) {
|
|
|
183
183
|
items: removeVolatileFields(initial.items)
|
|
184
184
|
};
|
|
185
185
|
expect(cleanedInitial).toMatchSnapshot();
|
|
186
|
-
const connections = await factory.
|
|
186
|
+
const connections = await factory.getGeneralClientConnectionAnalytics({
|
|
187
187
|
cursor
|
|
188
188
|
});
|
|
189
189
|
const cleaned = {
|
|
@@ -192,12 +192,12 @@ export async function registerReportTests(factory) {
|
|
|
192
192
|
};
|
|
193
193
|
expect(cleaned).toMatchSnapshot();
|
|
194
194
|
});
|
|
195
|
-
it('
|
|
195
|
+
it('Should show paginated response of all connections with a limit with date range', async () => {
|
|
196
196
|
const date_range = {
|
|
197
197
|
start: monthAgo,
|
|
198
198
|
end: nowLess5minutes
|
|
199
199
|
};
|
|
200
|
-
const initial = await factory.
|
|
200
|
+
const initial = await factory.getGeneralClientConnectionAnalytics({
|
|
201
201
|
limit: 4,
|
|
202
202
|
date_range
|
|
203
203
|
});
|
|
@@ -209,7 +209,7 @@ export async function registerReportTests(factory) {
|
|
|
209
209
|
items: removeVolatileFields(initial.items)
|
|
210
210
|
};
|
|
211
211
|
expect(cleanedInitial).toMatchSnapshot();
|
|
212
|
-
const connections = await factory.
|
|
212
|
+
const connections = await factory.getGeneralClientConnectionAnalytics({
|
|
213
213
|
cursor,
|
|
214
214
|
date_range
|
|
215
215
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-report-tests.js","sourceRoot":"","sources":["../../src/tests/register-report-tests.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"register-report-tests.js","sourceRoot":"","sources":["../../src/tests/register-report-tests.ts"],"names":[],"mappings":"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"}
|