Skip to content

Commit 2644411

Browse files
cleanup imports of shared test utils
1 parent 3f8a7c8 commit 2644411

File tree

3 files changed

+99
-97
lines changed

3 files changed

+99
-97
lines changed

packages/web/tests/stream.test.ts

Lines changed: 3 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -1,101 +1,9 @@
1-
import { Schema, Table, column } from '@powersync/common';
2-
import { WebPowerSyncOpenFactoryOptions } from '@powersync/web';
31
import Logger from 'js-logger';
4-
import { v4 as uuid } from 'uuid';
52
import { afterEach, beforeAll, describe, expect, it, vi } from 'vitest';
6-
import { MockRemote, MockStreamOpenFactory, TestConnector } from './utils/MockStreamOpenFactory';
7-
8-
type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;
9-
10-
export type ConnectedDatabaseUtils = UnwrapPromise<ReturnType<typeof generateConnectedDatabase>>;
11-
export type GenerateConnectedDatabaseOptions = {
12-
powerSyncOptions: Partial<WebPowerSyncOpenFactoryOptions>;
13-
};
14-
15-
// const UPLOAD_TIMEOUT_MS = 3000;
16-
const UPLOAD_TIMEOUT_MS = 30_000;
17-
18-
export const DEFAULT_CONNECTED_POWERSYNC_OPTIONS = {
19-
powerSyncOptions: {
20-
dbFilename: 'test-stream-connection.db',
21-
flags: {
22-
enableMultiTabs: false,
23-
useWebWorker: true
24-
},
25-
// Makes tests faster
26-
crudUploadThrottleMs: 0,
27-
schema: new Schema({
28-
users: new Table({ name: column.text })
29-
})
30-
}
31-
};
32-
33-
export async function generateConnectedDatabase(
34-
options: GenerateConnectedDatabaseOptions = DEFAULT_CONNECTED_POWERSYNC_OPTIONS
35-
) {
36-
const { powerSyncOptions } = options;
37-
const { powerSyncOptions: defaultPowerSyncOptions } = DEFAULT_CONNECTED_POWERSYNC_OPTIONS;
38-
/**
39-
* Very basic implementation of a listener pattern.
40-
* Required since we cannot extend multiple classes.
41-
*/
42-
const callbacks: Map<string, () => void> = new Map();
43-
const connector = new TestConnector();
44-
const uploadSpy = vi.spyOn(connector, 'uploadData');
45-
const remote = new MockRemote(connector, () => callbacks.forEach((c) => c()));
46-
47-
const factory = new MockStreamOpenFactory(
48-
{
49-
...defaultPowerSyncOptions,
50-
...powerSyncOptions,
51-
flags: {
52-
...(defaultPowerSyncOptions.flags ?? {}),
53-
...(powerSyncOptions.flags ?? {})
54-
}
55-
},
56-
remote
57-
);
58-
const powersync = factory.getInstance();
59-
60-
const waitForStream = () =>
61-
new Promise<void>((resolve) => {
62-
const id = uuid();
63-
callbacks.set(id, () => {
64-
resolve();
65-
callbacks.delete(id);
66-
});
67-
});
68-
69-
const connect = async () => {
70-
const streamOpened = waitForStream();
71-
72-
const connectedPromise = powersync.connect(connector);
3+
import { TestConnector } from './utils/MockStreamOpenFactory';
4+
import { ConnectedDatabaseUtils, generateConnectedDatabase } from './utils/generateConnectedDatabase';
735

74-
await streamOpened;
75-
76-
remote.streamController?.enqueue(new TextEncoder().encode('{"token_expires_in":3426}\n'));
77-
78-
// Wait for connected to be true
79-
await connectedPromise;
80-
};
81-
82-
await connect();
83-
84-
return {
85-
connector,
86-
connect,
87-
factory,
88-
powersync,
89-
remote,
90-
uploadSpy,
91-
waitForStream,
92-
dispose: async () => {
93-
remote.streamController?.close();
94-
await powersync.disconnectAndClear();
95-
await powersync.close();
96-
}
97-
};
98-
}
6+
const UPLOAD_TIMEOUT_MS = 3000;
997

1008
describe(
1019
'Streaming',

packages/web/tests/uploads.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import Logger from 'js-logger';
22
import p from 'p-defer';
33
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from 'vitest';
4-
import { ConnectedDatabaseUtils, generateConnectedDatabase } from './stream.test';
4+
import { ConnectedDatabaseUtils, generateConnectedDatabase } from './utils/generateConnectedDatabase';
55

66
// Don't want to actually export the warning string from the package
77
const PARTIAL_WARNING = 'Potentially previously uploaded CRUD entries are still present';
88

9-
describe('CRUD Uploads', {sequential: true}, () => {
9+
describe('CRUD Uploads', { sequential: true }, () => {
1010
let connectedUtils: ConnectedDatabaseUtils;
1111
const logger = Logger.get('crud-logger');
1212

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
import { column, Schema, Table, WebPowerSyncOpenFactoryOptions } from '@powersync/web';
2+
import { v4 as uuid } from 'uuid';
3+
import { vi } from 'vitest';
4+
import { MockRemote, MockStreamOpenFactory, TestConnector } from './MockStreamOpenFactory';
5+
6+
type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;
7+
8+
export type ConnectedDatabaseUtils = UnwrapPromise<ReturnType<typeof generateConnectedDatabase>>;
9+
10+
export type GenerateConnectedDatabaseOptions = {
11+
powerSyncOptions: Partial<WebPowerSyncOpenFactoryOptions>;
12+
};
13+
14+
export const DEFAULT_CONNECTED_POWERSYNC_OPTIONS = {
15+
powerSyncOptions: {
16+
dbFilename: 'test-stream-connection.db',
17+
flags: {
18+
enableMultiTabs: false,
19+
useWebWorker: true
20+
},
21+
// Makes tests faster
22+
crudUploadThrottleMs: 0,
23+
schema: new Schema({
24+
users: new Table({ name: column.text })
25+
})
26+
}
27+
};
28+
29+
export async function generateConnectedDatabase(
30+
options: GenerateConnectedDatabaseOptions = DEFAULT_CONNECTED_POWERSYNC_OPTIONS
31+
) {
32+
const { powerSyncOptions } = options;
33+
const { powerSyncOptions: defaultPowerSyncOptions } = DEFAULT_CONNECTED_POWERSYNC_OPTIONS;
34+
/**
35+
* Very basic implementation of a listener pattern.
36+
* Required since we cannot extend multiple classes.
37+
*/
38+
const callbacks: Map<string, () => void> = new Map();
39+
const connector = new TestConnector();
40+
const uploadSpy = vi.spyOn(connector, 'uploadData');
41+
const remote = new MockRemote(connector, () => callbacks.forEach((c) => c()));
42+
43+
const factory = new MockStreamOpenFactory(
44+
{
45+
...defaultPowerSyncOptions,
46+
...powerSyncOptions,
47+
flags: {
48+
...(defaultPowerSyncOptions.flags ?? {}),
49+
...(powerSyncOptions.flags ?? {})
50+
}
51+
},
52+
remote
53+
);
54+
const powersync = factory.getInstance();
55+
56+
const waitForStream = () =>
57+
new Promise<void>((resolve) => {
58+
const id = uuid();
59+
callbacks.set(id, () => {
60+
resolve();
61+
callbacks.delete(id);
62+
});
63+
});
64+
65+
const connect = async () => {
66+
const streamOpened = waitForStream();
67+
68+
const connectedPromise = powersync.connect(connector);
69+
70+
await streamOpened;
71+
72+
remote.streamController?.enqueue(new TextEncoder().encode('{"token_expires_in":3426}\n'));
73+
74+
// Wait for connected to be true
75+
await connectedPromise;
76+
};
77+
78+
await connect();
79+
80+
return {
81+
connector,
82+
connect,
83+
factory,
84+
powersync,
85+
remote,
86+
uploadSpy,
87+
waitForStream,
88+
dispose: async () => {
89+
remote.streamController?.close();
90+
await powersync.disconnectAndClear();
91+
await powersync.close();
92+
}
93+
};
94+
}

0 commit comments

Comments
 (0)