@reventlessdev/reventless-local 3.0.0-alpha.161 → 3.0.0-alpha.162
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 +14 -0
- package/package.json +10 -10
- package/src/Platform.res.mjs +8 -0
- package/src/adapter/CommandTopic/LocalCommandTopicChannel.res +1 -1
- package/src/adapter/CommandTopic/LocalCommandTopicChannel.res.mjs +1 -1
- package/src/adapter/DomainGraphQL_Server.res +17 -0
- package/src/adapter/DomainGraphQL_Server.res.mjs +5 -0
- package/src/adapter/EventCollector/LocalEventCollectorChannel.res +1 -1
- package/src/adapter/EventCollector/LocalEventCollectorChannel.res.mjs +2 -2
- package/src/adapter/EventLog/EventLogStorage_InMemory.res +1 -1
- package/src/adapter/EventLog/EventLogStorage_InMemory.res.mjs +1 -1
- package/src/adapter/EventLog/EventLogStorage_Sqlite.res +1 -1
- package/src/adapter/EventLog/EventLogStorage_Sqlite.res.mjs +1 -1
- package/src/adapter/EventLog/LocalEventLogStorage.res +1 -1
- package/src/adapter/EventLog/LocalEventLogStorage.res.mjs +1 -1
- package/src/adapter/EventTopic/LocalEventTopicPublisher.res +1 -1
- package/src/adapter/EventTopic/LocalEventTopicPublisher.res.mjs +1 -1
- package/src/adapter/QueryDb/LocalQueryDbStorage.res +2 -2
- package/src/adapter/QueryDb/LocalQueryDbStorage.res.mjs +2 -2
- package/src/adapter/QueryDb/QueryDbStorage_InMemory.res +1 -1
- package/src/adapter/QueryDb/QueryDbStorage_InMemory.res.mjs +1 -1
- package/src/adapter/QueryDb/QueryDbStorage_Sqlite.res +1 -1
- package/src/adapter/QueryDb/QueryDbStorage_Sqlite.res.mjs +1 -1
- package/src/adapter/Runtime/LocalAggregateRuntime_Builder.res +9 -1
- package/src/adapter/Runtime/LocalAggregateRuntime_Builder.res.mjs +5 -3
- package/src/adapter/Runtime/LocalEventCollectorRuntime_Builder.res +5 -1
- package/src/adapter/Runtime/LocalEventCollectorRuntime_Builder.res.mjs +3 -1
- package/src/adapter/Runtime/LocalPluginRuntime_Builder.res.mjs +2 -0
- package/src/adapter/Runtime/LocalRuntimeEnvironment.res +10 -0
- package/src/adapter/Runtime/LocalRuntimeEnvironment.res.mjs +10 -0
- package/src/components/Aggregate_Builder.res.mjs +4 -0
- package/src/components/AutomationSlice_Builder.res.mjs +2 -0
- package/src/components/ExtensionPoint_Builder.res.mjs +4 -0
- package/src/components/OutboundTranslationSlice_Builder.res.mjs +2 -0
- package/src/components/Plugin_Builder.res.mjs +2 -0
- package/src/components/ReadModel_Builder.res.mjs +4 -0
- package/src/components/StateViewSlice_Builder.res.mjs +2 -0
- package/src/components/Task_Builder.res.mjs +4 -0
- package/tests/adapter/BackendParityTest.res +5 -5
- package/tests/adapter/BackendParityTest.res.mjs +5 -5
- package/tests/adapter/CommandTopicChannelTest.res +4 -4
- package/tests/adapter/CommandTopicChannelTest.res.mjs +4 -4
- package/tests/adapter/EventCollectorChannelTest.res +11 -11
- package/tests/adapter/EventCollectorChannelTest.res.mjs +11 -11
- package/tests/adapter/EventLogSnapshotParityTest.res +2 -2
- package/tests/adapter/EventLogSnapshotParityTest.res.mjs +2 -2
- package/tests/adapter/EventLogStorageSqliteTest.res +11 -11
- package/tests/adapter/EventLogStorageSqliteTest.res.mjs +11 -11
- package/tests/adapter/EventTopicPublisherTest.res +4 -4
- package/tests/adapter/EventTopicPublisherTest.res.mjs +4 -4
- package/tests/adapter/LocalAuthHttpTest.res +5 -1
- package/tests/adapter/LocalAuthHttpTest.res.mjs +5 -5
- package/tests/adapter/LocalDispatchContextTest.res +83 -0
- package/tests/adapter/LocalDispatchContextTest.res.mjs +73 -0
- package/tests/adapter/ProjectionCheckpointTest.res +5 -5
- package/tests/adapter/ProjectionCheckpointTest.res.mjs +5 -5
- package/tests/adapter/QueryDbGsiTtlTest.res +12 -12
- package/tests/adapter/QueryDbGsiTtlTest.res.mjs +12 -12
- package/tests/adapter/QueryDbListPushdownParityTest.res +1 -1
- package/tests/adapter/QueryDbListPushdownParityTest.res.mjs +1 -1
- package/tests/adapter/QueryDbListResolverTest.res.mjs +1 -1
- package/tests/adapter/QueryDbStorageSqliteTest.res +6 -6
- package/tests/adapter/QueryDbStorageSqliteTest.res.mjs +6 -6
- package/tests/adapter/QueryDbStorageTest.res +10 -10
- package/tests/adapter/QueryDbStorageTest.res.mjs +10 -10
- package/tests/adapter/QueryEngineTest.res +8 -8
- package/tests/adapter/QueryEngineTest.res.mjs +8 -8
- package/tests/components/aggregate/AggregateTest.res +3 -3
- package/tests/components/aggregate/AggregateTest.res.mjs +3 -3
- package/tests/components/commandtopic/CommandTopicFixtures.res.mjs +1 -1
- package/tests/components/commandtopic/CommandTopicStreamFixtures.res.mjs +1 -1
- package/tests/components/eventcollector/EventCollectorFixtures.res.mjs +3 -1
- package/tests/components/eventlog/EventLogFixtures.res.mjs +1 -1
- package/tests/components/eventtopic/EventTopicFixtures.res.mjs +1 -1
- package/tests/components/eventtopic/EventTopicStreamFixtures.res.mjs +1 -1
- package/tests/components/querydb/QueryDbFixtures.res.mjs +1 -1
- package/tests/components/querydb/QueryDbSubIdFixtures.res.mjs +1 -1
- package/tests/components/sideeffecthandler/SideEffectHandlerFixtures.res.mjs +4 -0
|
@@ -17,7 +17,7 @@ function postJson(path, body) {
|
|
|
17
17
|
let bodyStr = JSON.stringify(body);
|
|
18
18
|
let req = Nodehttp.request({
|
|
19
19
|
hostname: "localhost",
|
|
20
|
-
port:
|
|
20
|
+
port: 49321,
|
|
21
21
|
path: path,
|
|
22
22
|
method: "POST",
|
|
23
23
|
headers: Object.fromEntries([
|
|
@@ -62,7 +62,7 @@ function postEmpty(path) {
|
|
|
62
62
|
return new Promise((resolve, reject) => {
|
|
63
63
|
let req = Nodehttp.request({
|
|
64
64
|
hostname: "localhost",
|
|
65
|
-
port:
|
|
65
|
+
port: 49321,
|
|
66
66
|
path: path,
|
|
67
67
|
method: "POST",
|
|
68
68
|
headers: {}
|
|
@@ -80,7 +80,7 @@ function postRaw(path, body) {
|
|
|
80
80
|
return new Promise((resolve, reject) => {
|
|
81
81
|
let req = Nodehttp.request({
|
|
82
82
|
hostname: "localhost",
|
|
83
|
-
port:
|
|
83
|
+
port: 49321,
|
|
84
84
|
path: path,
|
|
85
85
|
method: "POST",
|
|
86
86
|
headers: Object.fromEntries([
|
|
@@ -123,7 +123,7 @@ globalThis.beforeAll(async () => {
|
|
|
123
123
|
provider: "InMemory"
|
|
124
124
|
});
|
|
125
125
|
DomainGraphQL_Server$ReventlessLocal.reset();
|
|
126
|
-
DomainGraphQL_Server$ReventlessLocal.start(
|
|
126
|
+
DomainGraphQL_Server$ReventlessLocal.start(49321, undefined, undefined);
|
|
127
127
|
return await new Promise((resolve, param) => {
|
|
128
128
|
setTimeout(() => resolve(), 50);
|
|
129
129
|
});
|
|
@@ -224,7 +224,7 @@ globalThis.test("Bearer token issued via HTTP round-trips through authenticate",
|
|
|
224
224
|
globalThis.expect(identity.groups).toEqual(["Editor"]);
|
|
225
225
|
});
|
|
226
226
|
|
|
227
|
-
let port =
|
|
227
|
+
let port = 49321;
|
|
228
228
|
|
|
229
229
|
export {
|
|
230
230
|
port,
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// What a handler dispatched on the in-process platform sees in its RequestContext.
|
|
2
|
+
//
|
|
3
|
+
// The counterpart of reventless-aws's HandlerFactoryDispatchTest: that one covers
|
|
4
|
+
// the deployed entry-point shim, this one covers `Runtime.runEffectHandler` wired
|
|
5
|
+
// with `LocalRuntimeEnvironment`'s extractors — the exact composition every local
|
|
6
|
+
// runtime builder uses (LocalEventCollectorRuntime_Builder,
|
|
7
|
+
// LocalAggregateRuntime_Builder). Without it, the local half of "a handler can
|
|
8
|
+
// compute latency from RequestContext.timestamp and branch on retryCount on both
|
|
9
|
+
// platforms" rests on the extractors merely compiling.
|
|
10
|
+
//
|
|
11
|
+
// See docs/plans/entrypoint-dispatch-parity-and-latency-fields.md.
|
|
12
|
+
|
|
13
|
+
open JestGlobals
|
|
14
|
+
|
|
15
|
+
let _ = TestRunner.setup()
|
|
16
|
+
|
|
17
|
+
// Hand the provided context back as the handler's result — the assertions then
|
|
18
|
+
// see exactly what an application handler would.
|
|
19
|
+
let capture = (_event, _ctx) =>
|
|
20
|
+
Effect.serviceWith(ReventlessCore.RequestContext.tag, ctx => ctx)
|
|
21
|
+
|
|
22
|
+
let comp = "EventCollector(TestCollector)"
|
|
23
|
+
|
|
24
|
+
let dispatch = (event: JSON.t): promise<ReventlessCore.RequestContext.t> => {
|
|
25
|
+
let handler =
|
|
26
|
+
capture
|
|
27
|
+
->LocalRuntimeEnvironment.asEffectHandler
|
|
28
|
+
->ReventlessCore.Runtime.runEffectHandler(
|
|
29
|
+
~extractCorrelationId=LocalRuntimeEnvironment.extractCorrelationId,
|
|
30
|
+
~extractCausationId=LocalRuntimeEnvironment.extractCausationId,
|
|
31
|
+
~extractSentTimestamp=LocalRuntimeEnvironment.extractSentTimestamp,
|
|
32
|
+
~extractRetryCount=LocalRuntimeEnvironment.extractRetryCount,
|
|
33
|
+
~comp,
|
|
34
|
+
)
|
|
35
|
+
handler(event, ())
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
let eventWithMeta = (~correlationId, ~causationId=?, ()) => {
|
|
39
|
+
let meta = Dict.fromArray([("correlationId", correlationId->JSON.Encode.string)])
|
|
40
|
+
switch causationId {
|
|
41
|
+
| Some(id) => meta->Dict.set("causationId", id->JSON.Encode.string)
|
|
42
|
+
| None => ()
|
|
43
|
+
}
|
|
44
|
+
Dict.fromArray([("meta", meta->JSON.Encode.object)])->JSON.Encode.object
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
describe("local dispatch boundary", () => {
|
|
48
|
+
testPromise("carries the envelope identity through to the handler", async () => {
|
|
49
|
+
let ctx = await dispatch(
|
|
50
|
+
eventWithMeta(~correlationId="corr-local", ~causationId="cause-local", ()),
|
|
51
|
+
)
|
|
52
|
+
expect(ctx.correlationId)->toBe("corr-local")
|
|
53
|
+
expect(ctx.causationId)->toEqual(Some("cause-local"))
|
|
54
|
+
expect(ctx.component)->toEqual(Some(comp))
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
testPromise("falls back to a placeholder when the event carries no correlationId", async () => {
|
|
58
|
+
let ctx = await dispatch(JSON.Encode.object(Dict.make()))
|
|
59
|
+
expect(ctx.correlationId)->toBe("unknown")
|
|
60
|
+
expect(ctx.causationId)->toEqual(None)
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
// In-process dispatch has no queue to dwell in, so send time *is* dispatch
|
|
64
|
+
// time — a handler computing `now - timestamp` measures its own processing
|
|
65
|
+
// latency here and end-to-end latency on a queue-backed platform, from the
|
|
66
|
+
// same expression.
|
|
67
|
+
testPromise("supplies a send time a handler can measure latency against", async () => {
|
|
68
|
+
let before = Date.now()
|
|
69
|
+
let ctx = await dispatch(eventWithMeta(~correlationId="corr-local", ()))
|
|
70
|
+
let after = Date.now()
|
|
71
|
+
switch ctx.timestamp {
|
|
72
|
+
| Some(t) => expect(t >= before && t <= after)->toBe(true)
|
|
73
|
+
| None => fail("expected RequestContext.timestamp to be populated on the local platform")
|
|
74
|
+
}
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
// The bus calls each handler once; a handler branching on redelivery must see
|
|
78
|
+
// a first delivery here rather than a missing field.
|
|
79
|
+
testPromise("reports a first delivery", async () => {
|
|
80
|
+
let ctx = await dispatch(eventWithMeta(~correlationId="corr-local", ()))
|
|
81
|
+
expect(ctx.retryCount)->toEqual(Some(1))
|
|
82
|
+
})
|
|
83
|
+
})
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// Generated by ReScript, PLEASE EDIT WITH CARE
|
|
2
|
+
|
|
3
|
+
import * as Effect from "@reventlessdev/rescript-effect/src/Effect.res.mjs";
|
|
4
|
+
import * as JestGlobals from "@reventlessdev/rescript-jest/src/JestGlobals.res.mjs";
|
|
5
|
+
import * as Runtime$ReventlessCore from "@reventlessdev/reventless-core/src/adapter/Runtime/Runtime.res.mjs";
|
|
6
|
+
import * as TestRunner$ReventlessLocal from "../../src/test/TestRunner.res.mjs";
|
|
7
|
+
import * as RequestContext$ReventlessCore from "@reventlessdev/reventless-core/src/RequestContext.res.mjs";
|
|
8
|
+
import * as LocalRuntimeEnvironment$ReventlessLocal from "../../src/adapter/Runtime/LocalRuntimeEnvironment.res.mjs";
|
|
9
|
+
|
|
10
|
+
TestRunner$ReventlessLocal.setup();
|
|
11
|
+
|
|
12
|
+
function capture(_event, _ctx) {
|
|
13
|
+
return Effect.serviceWith(RequestContext$ReventlessCore.tag, ctx => ctx);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
let comp = "EventCollector(TestCollector)";
|
|
17
|
+
|
|
18
|
+
function dispatch(event) {
|
|
19
|
+
let handler = Runtime$ReventlessCore.runEffectHandler(LocalRuntimeEnvironment$ReventlessLocal.extractCorrelationId, LocalRuntimeEnvironment$ReventlessLocal.extractCausationId, LocalRuntimeEnvironment$ReventlessLocal.extractSentTimestamp, LocalRuntimeEnvironment$ReventlessLocal.extractRetryCount, comp, undefined, capture);
|
|
20
|
+
return handler(event, undefined);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function eventWithMeta(correlationId, causationId, param) {
|
|
24
|
+
let meta = Object.fromEntries([[
|
|
25
|
+
"correlationId",
|
|
26
|
+
correlationId
|
|
27
|
+
]]);
|
|
28
|
+
if (causationId !== undefined) {
|
|
29
|
+
meta["causationId"] = causationId;
|
|
30
|
+
}
|
|
31
|
+
return Object.fromEntries([[
|
|
32
|
+
"meta",
|
|
33
|
+
meta
|
|
34
|
+
]]);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
globalThis.describe("local dispatch boundary", () => {
|
|
38
|
+
globalThis.test("carries the envelope identity through to the handler", async () => {
|
|
39
|
+
let ctx = await dispatch(eventWithMeta("corr-local", "cause-local", undefined));
|
|
40
|
+
globalThis.expect(ctx.correlationId).toBe("corr-local");
|
|
41
|
+
globalThis.expect(ctx.causationId).toEqual("cause-local");
|
|
42
|
+
globalThis.expect(ctx.component).toEqual(comp);
|
|
43
|
+
});
|
|
44
|
+
globalThis.test("falls back to a placeholder when the event carries no correlationId", async () => {
|
|
45
|
+
let ctx = await dispatch({});
|
|
46
|
+
globalThis.expect(ctx.correlationId).toBe("unknown");
|
|
47
|
+
globalThis.expect(ctx.causationId).toEqual(undefined);
|
|
48
|
+
});
|
|
49
|
+
globalThis.test("supplies a send time a handler can measure latency against", async () => {
|
|
50
|
+
let before = Date.now();
|
|
51
|
+
let ctx = await dispatch(eventWithMeta("corr-local", undefined, undefined));
|
|
52
|
+
let after = Date.now();
|
|
53
|
+
let t = ctx.timestamp;
|
|
54
|
+
if (t !== undefined) {
|
|
55
|
+
globalThis.expect(t >= before && t <= after).toBe(true);
|
|
56
|
+
return;
|
|
57
|
+
} else {
|
|
58
|
+
return JestGlobals.fail("expected RequestContext.timestamp to be populated on the local platform");
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
globalThis.test("reports a first delivery", async () => {
|
|
62
|
+
let ctx = await dispatch(eventWithMeta("corr-local", undefined, undefined));
|
|
63
|
+
globalThis.expect(ctx.retryCount).toEqual(1);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
export {
|
|
68
|
+
capture,
|
|
69
|
+
comp,
|
|
70
|
+
dispatch,
|
|
71
|
+
eventWithMeta,
|
|
72
|
+
}
|
|
73
|
+
/* Not a pure module */
|
|
@@ -92,7 +92,7 @@ describe("ProjectionCheckpoint", () => {
|
|
|
92
92
|
let db = makeFreshDb()
|
|
93
93
|
}
|
|
94
94
|
module Storage = EventLogStorage_Sqlite.Make(TestBus, DbProvider)
|
|
95
|
-
let s = Storage.make(~name="agg", ~opts)
|
|
95
|
+
let s = Storage.make(~name="agg", ~owner=None, ~opts)
|
|
96
96
|
let ops = await s.operations->TestRunner.resolve
|
|
97
97
|
|
|
98
98
|
// Batch A (rowids 1-2) appended before batch B (rowid 3).
|
|
@@ -132,7 +132,7 @@ describe("ProjectionCheckpoint", () => {
|
|
|
132
132
|
let db = makeFreshDb()
|
|
133
133
|
}
|
|
134
134
|
module Storage = EventLogStorage_Sqlite.Make(TestBus, DbProvider)
|
|
135
|
-
let s = Storage.make(~name="agg", ~opts)
|
|
135
|
+
let s = Storage.make(~name="agg", ~owner=None, ~opts)
|
|
136
136
|
let ops = await s.operations->TestRunner.resolve
|
|
137
137
|
|
|
138
138
|
// Bulk replay path: no publish cycle will ever resolve these, so they
|
|
@@ -217,7 +217,7 @@ describe("ProjectionCheckpoint", () => {
|
|
|
217
217
|
let db = makeFreshDb()
|
|
218
218
|
}
|
|
219
219
|
module Storage = EventLogStorage_Sqlite.Make(TestBus, DbProvider)
|
|
220
|
-
let s = Storage.make(~name="agg", ~opts)
|
|
220
|
+
let s = Storage.make(~name="agg", ~owner=None, ~opts)
|
|
221
221
|
let ops = await s.operations->TestRunner.resolve
|
|
222
222
|
let db = DbProvider.db
|
|
223
223
|
|
|
@@ -283,7 +283,7 @@ describe("ProjectionCheckpoint", () => {
|
|
|
283
283
|
let db = makeFreshDb()
|
|
284
284
|
}
|
|
285
285
|
module Storage = EventLogStorage_Sqlite.Make(TestBus, DbProvider)
|
|
286
|
-
let s = Storage.make(~name="agg", ~opts)
|
|
286
|
+
let s = Storage.make(~name="agg", ~owner=None, ~opts)
|
|
287
287
|
let ops = await s.operations->TestRunner.resolve
|
|
288
288
|
let db = DbProvider.db
|
|
289
289
|
|
|
@@ -390,7 +390,7 @@ describe("ProjectionCheckpoint", () => {
|
|
|
390
390
|
let db = makeFreshDb()
|
|
391
391
|
}
|
|
392
392
|
module AggStorage = EventLogStorage_Sqlite.Make(TestBus, DbProvider)
|
|
393
|
-
let aggS = AggStorage.make(~name="agg", ~opts)
|
|
393
|
+
let aggS = AggStorage.make(~name="agg", ~owner=None, ~opts)
|
|
394
394
|
let aggOps = await aggS.operations->TestRunner.resolve
|
|
395
395
|
let db = DbProvider.db
|
|
396
396
|
let dcbOps = await makeDcbStorage(db, ~name="dcb-log")
|
|
@@ -119,7 +119,7 @@ globalThis.describe("ProjectionCheckpoint", () => {
|
|
|
119
119
|
db: db
|
|
120
120
|
};
|
|
121
121
|
let Storage = EventLogStorage_Sqlite$ReventlessLocal.Make(TestBus)(DbProvider);
|
|
122
|
-
let s = Storage.make("agg", opts);
|
|
122
|
+
let s = Storage.make("agg", undefined, opts);
|
|
123
123
|
let ops = await TestRunner$ReventlessLocal.resolve(s.operations);
|
|
124
124
|
await ops.append(0, "id-1", [
|
|
125
125
|
flatEvent("id-1", 0, "Created", undefined, "a1", undefined),
|
|
@@ -145,7 +145,7 @@ globalThis.describe("ProjectionCheckpoint", () => {
|
|
|
145
145
|
db: db
|
|
146
146
|
};
|
|
147
147
|
let Storage = EventLogStorage_Sqlite$ReventlessLocal.Make(TestBus)(DbProvider);
|
|
148
|
-
let s = Storage.make("agg", opts);
|
|
148
|
+
let s = Storage.make("agg", undefined, opts);
|
|
149
149
|
let ops = await TestRunner$ReventlessLocal.resolve(s.operations);
|
|
150
150
|
await Effect.runPromise(ops.appendStream(0, "id-bulk", Stream.fromIterable([
|
|
151
151
|
flatEvent("id-bulk", 0, "Created", undefined, "s1", undefined),
|
|
@@ -212,7 +212,7 @@ globalThis.describe("ProjectionCheckpoint", () => {
|
|
|
212
212
|
db: db
|
|
213
213
|
};
|
|
214
214
|
let Storage = EventLogStorage_Sqlite$ReventlessLocal.Make(TestBus)(DbProvider);
|
|
215
|
-
let s = Storage.make("agg", opts);
|
|
215
|
+
let s = Storage.make("agg", undefined, opts);
|
|
216
216
|
let ops = await TestRunner$ReventlessLocal.resolve(s.operations);
|
|
217
217
|
await ops.append(0, "id-1", [flatEvent("id-1", 0, "Created", undefined, "m1", undefined)]);
|
|
218
218
|
await ops.append(0, "id-2", [flatEvent("id-2", 0, "Created", undefined, "m2", undefined)]);
|
|
@@ -280,7 +280,7 @@ globalThis.describe("ProjectionCheckpoint", () => {
|
|
|
280
280
|
db: db
|
|
281
281
|
};
|
|
282
282
|
let Storage = EventLogStorage_Sqlite$ReventlessLocal.Make(TestBus)(DbProvider);
|
|
283
|
-
let s = Storage.make("agg", opts);
|
|
283
|
+
let s = Storage.make("agg", undefined, opts);
|
|
284
284
|
let ops = await TestRunner$ReventlessLocal.resolve(s.operations);
|
|
285
285
|
await ops.append(0, "id-1", [flatEvent("id-1", 0, "Created", undefined, "m1", undefined)]);
|
|
286
286
|
let match = makeHandler();
|
|
@@ -368,7 +368,7 @@ globalThis.describe("ProjectionCheckpoint", () => {
|
|
|
368
368
|
db: db
|
|
369
369
|
};
|
|
370
370
|
let AggStorage = EventLogStorage_Sqlite$ReventlessLocal.Make(TestBus)(DbProvider);
|
|
371
|
-
let aggS = AggStorage.make("agg", opts);
|
|
371
|
+
let aggS = AggStorage.make("agg", undefined, opts);
|
|
372
372
|
let aggOps = await TestRunner$ReventlessLocal.resolve(aggS.operations);
|
|
373
373
|
let dcbOps = await makeDcbStorage(db, "dcb-log");
|
|
374
374
|
await aggOps.append(0, "id-1", [flatEvent("id-1", 0, "Created", undefined, "agg1", undefined)]);
|
|
@@ -41,7 +41,7 @@ describe("QueryDbStorage_Sqlite — GSI", () => {
|
|
|
41
41
|
~indexes=[byOwnerIdx, byOwnerCreatedIdx],
|
|
42
42
|
~api=(),
|
|
43
43
|
~apiRole=(),
|
|
44
|
-
~opts,
|
|
44
|
+
~owner=None, ~opts,
|
|
45
45
|
)
|
|
46
46
|
|
|
47
47
|
// Verify the indexes were created in sqlite_master.
|
|
@@ -95,7 +95,7 @@ describe("QueryDbStorage_Sqlite — GSI", () => {
|
|
|
95
95
|
~indexes=[compositeIdx],
|
|
96
96
|
~api=(),
|
|
97
97
|
~apiRole=(),
|
|
98
|
-
~opts,
|
|
98
|
+
~owner=None, ~opts,
|
|
99
99
|
)
|
|
100
100
|
|
|
101
101
|
let listSql = DbProvider.db->SqliteDriver.prepare(
|
|
@@ -129,7 +129,7 @@ describe("QueryDbStorage_Sqlite — GSI", () => {
|
|
|
129
129
|
~indexes=[weirdIdx],
|
|
130
130
|
~api=(),
|
|
131
131
|
~apiRole=(),
|
|
132
|
-
~opts,
|
|
132
|
+
~owner=None, ~opts,
|
|
133
133
|
)
|
|
134
134
|
let listIndexes = DbProvider.db->SqliteDriver.prepare(
|
|
135
135
|
"SELECT name FROM sqlite_master WHERE type='index' AND tbl_name='qdb_rm'",
|
|
@@ -166,7 +166,7 @@ describe("QueryDb — indexed equality lookup (B4 push-down)", () => {
|
|
|
166
166
|
let db = openFreshDb()
|
|
167
167
|
}
|
|
168
168
|
module Storage = QueryDbStorage_Sqlite.Make(TestBus, DbProvider)
|
|
169
|
-
let s = Storage.make(~name="orders", ~indexes=[byOwner], ~api=(), ~apiRole=(), ~opts)
|
|
169
|
+
let s = Storage.make(~name="orders", ~indexes=[byOwner], ~api=(), ~apiRole=(), ~owner=None, ~opts)
|
|
170
170
|
let ops = await s.operations->TestRunner.resolve
|
|
171
171
|
let _ = await ops.save("k1", item("o1"), ReventlessCore.QueryDb.Any, None)
|
|
172
172
|
let _ = await ops.save("k2", item("o2"), ReventlessCore.QueryDb.Any, None)
|
|
@@ -184,7 +184,7 @@ describe("QueryDb — indexed equality lookup (B4 push-down)", () => {
|
|
|
184
184
|
let db = openFreshDb()
|
|
185
185
|
}
|
|
186
186
|
module Storage = QueryDbStorage_Sqlite.Make(TestBus, DbProvider)
|
|
187
|
-
let s = Storage.make(~name="orders", ~indexes=[byOwner], ~api=(), ~apiRole=(), ~opts)
|
|
187
|
+
let s = Storage.make(~name="orders", ~indexes=[byOwner], ~api=(), ~apiRole=(), ~owner=None, ~opts)
|
|
188
188
|
let ops = await s.operations->TestRunner.resolve
|
|
189
189
|
let aMinuteAgo = Float.toInt(Date.now() /. 1000.0) - 60
|
|
190
190
|
let _ = await ops.save("k1", item("o1"), ReventlessCore.QueryDb.Any, None)
|
|
@@ -196,7 +196,7 @@ describe("QueryDb — indexed equality lookup (B4 push-down)", () => {
|
|
|
196
196
|
testPromise("in-memory lookup matches the sqlite result (backend parity)", async () => {
|
|
197
197
|
module TestBus = LocalBus.Make()
|
|
198
198
|
module Storage = QueryDbStorage_InMemory.Make(TestBus)
|
|
199
|
-
let s = Storage.make(~name="orders", ~indexes=[byOwner], ~api=(), ~apiRole=(), ~opts)
|
|
199
|
+
let s = Storage.make(~name="orders", ~indexes=[byOwner], ~api=(), ~apiRole=(), ~owner=None, ~opts)
|
|
200
200
|
let ops = await s.operations->TestRunner.resolve
|
|
201
201
|
let _ = await ops.save("k1", item("o1"), ReventlessCore.QueryDb.Any, None)
|
|
202
202
|
let _ = await ops.save("k2", item("o2"), ReventlessCore.QueryDb.Any, None)
|
|
@@ -212,7 +212,7 @@ describe("QueryDbStorage_InMemory — lazy scan snapshot (B4 dirty-flag)", () =>
|
|
|
212
212
|
testPromise("interleaved save/scan reflects each write without stale reads", async () => {
|
|
213
213
|
module TestBus = LocalBus.Make()
|
|
214
214
|
module Storage = LocalQueryDbStorage.Make(TestBus)
|
|
215
|
-
let s = Storage.make(~name="lazy", ~indexes=[], ~api=(), ~apiRole=(), ~opts)
|
|
215
|
+
let s = Storage.make(~name="lazy", ~indexes=[], ~api=(), ~apiRole=(), ~owner=None, ~opts)
|
|
216
216
|
let ops = await s.operations->TestRunner.resolve
|
|
217
217
|
let scanFn = TestBus.getQueryDbScan("lazy")->Option.getOrThrow
|
|
218
218
|
expect(scanFn()->Array.length)->toBe(0)
|
|
@@ -233,7 +233,7 @@ describe("QueryDbStorage_Sqlite — TTL", () => {
|
|
|
233
233
|
}
|
|
234
234
|
module Storage = QueryDbStorage_Sqlite.Make(TestBus, DbProvider)
|
|
235
235
|
|
|
236
|
-
let s = Storage.make(~name="rt-future", ~indexes=[], ~api=(), ~apiRole=(), ~opts)
|
|
236
|
+
let s = Storage.make(~name="rt-future", ~indexes=[], ~api=(), ~apiRole=(), ~owner=None, ~opts)
|
|
237
237
|
let ops = await s.operations->TestRunner.resolve
|
|
238
238
|
|
|
239
239
|
let oneHourFromNow = Float.toInt(Date.now() /. 1000.0) + 3600
|
|
@@ -255,7 +255,7 @@ describe("QueryDbStorage_Sqlite — TTL", () => {
|
|
|
255
255
|
}
|
|
256
256
|
module Storage = QueryDbStorage_Sqlite.Make(TestBus, DbProvider)
|
|
257
257
|
|
|
258
|
-
let s = Storage.make(~name="rt-past", ~indexes=[], ~api=(), ~apiRole=(), ~opts)
|
|
258
|
+
let s = Storage.make(~name="rt-past", ~indexes=[], ~api=(), ~apiRole=(), ~owner=None, ~opts)
|
|
259
259
|
let ops = await s.operations->TestRunner.resolve
|
|
260
260
|
|
|
261
261
|
let aMinuteAgo = Float.toInt(Date.now() /. 1000.0) - 60
|
|
@@ -277,7 +277,7 @@ describe("QueryDbStorage_Sqlite — TTL", () => {
|
|
|
277
277
|
}
|
|
278
278
|
module Storage = QueryDbStorage_Sqlite.Make(TestBus, DbProvider)
|
|
279
279
|
|
|
280
|
-
let s = Storage.make(~name="rt-none", ~indexes=[], ~api=(), ~apiRole=(), ~opts)
|
|
280
|
+
let s = Storage.make(~name="rt-none", ~indexes=[], ~api=(), ~apiRole=(), ~owner=None, ~opts)
|
|
281
281
|
let ops = await s.operations->TestRunner.resolve
|
|
282
282
|
|
|
283
283
|
let _ = await ops.save("k", JSON.Encode.string("forever"), ReventlessCore.QueryDb.Any, None)
|
|
@@ -293,7 +293,7 @@ describe("QueryDbStorage_Sqlite — TTL", () => {
|
|
|
293
293
|
}
|
|
294
294
|
module Storage = QueryDbStorage_Sqlite.Make(TestBus, DbProvider)
|
|
295
295
|
|
|
296
|
-
let s = Storage.make(~name="scan-ttl", ~indexes=[], ~api=(), ~apiRole=(), ~opts)
|
|
296
|
+
let s = Storage.make(~name="scan-ttl", ~indexes=[], ~api=(), ~apiRole=(), ~owner=None, ~opts)
|
|
297
297
|
let ops = await s.operations->TestRunner.resolve
|
|
298
298
|
|
|
299
299
|
let _ = await ops.save("alive", JSON.Encode.string("a"), ReventlessCore.QueryDb.Any, None)
|
|
@@ -319,7 +319,7 @@ describe("QueryDbStorage_Sqlite — TTL", () => {
|
|
|
319
319
|
}
|
|
320
320
|
module Storage = QueryDbStorage_Sqlite.Make(TestBus, DbProvider)
|
|
321
321
|
|
|
322
|
-
let s = Storage.make(~name="overwrite-ttl", ~indexes=[], ~api=(), ~apiRole=(), ~opts)
|
|
322
|
+
let s = Storage.make(~name="overwrite-ttl", ~indexes=[], ~api=(), ~apiRole=(), ~owner=None, ~opts)
|
|
323
323
|
let ops = await s.operations->TestRunner.resolve
|
|
324
324
|
|
|
325
325
|
let aMinuteAgo = Float.toInt(Date.now() /. 1000.0) - 60
|
|
@@ -44,7 +44,7 @@ globalThis.describe("QueryDbStorage_Sqlite — GSI", () => {
|
|
|
44
44
|
subIdField: "createdAt",
|
|
45
45
|
projectionType: "KEYS_ONLY"
|
|
46
46
|
}
|
|
47
|
-
], undefined, undefined, undefined, undefined, opts);
|
|
47
|
+
], undefined, undefined, undefined, undefined, undefined, opts);
|
|
48
48
|
let listIndexes = SqliteDriver$ReventlessLocal.prepare(db, "SELECT name, sql FROM sqlite_master WHERE type='index' AND tbl_name='qdb_orders' ORDER BY name");
|
|
49
49
|
let rows = SqliteDriver$ReventlessLocal.all(listIndexes, []);
|
|
50
50
|
let names = rows.map(row => {
|
|
@@ -89,7 +89,7 @@ globalThis.describe("QueryDbStorage_Sqlite — GSI", () => {
|
|
|
89
89
|
pkSep: compositeIdx_pkSep,
|
|
90
90
|
projectionType: "ALL"
|
|
91
91
|
};
|
|
92
|
-
Storage.make("composite", [compositeIdx], undefined, undefined, undefined, undefined, opts);
|
|
92
|
+
Storage.make("composite", [compositeIdx], undefined, undefined, undefined, undefined, undefined, opts);
|
|
93
93
|
let listSql = SqliteDriver$ReventlessLocal.prepare(db, "SELECT sql FROM sqlite_master WHERE type='index' AND name='idx_qdb_composite_ByTenantOwner'");
|
|
94
94
|
let row = Stdlib_Option.getOrThrow(SqliteDriver$ReventlessLocal.get(listSql, []), undefined);
|
|
95
95
|
let match = row["sql"];
|
|
@@ -108,7 +108,7 @@ globalThis.describe("QueryDbStorage_Sqlite — GSI", () => {
|
|
|
108
108
|
type_: "S",
|
|
109
109
|
idField: "thing",
|
|
110
110
|
projectionType: "ALL"
|
|
111
|
-
}], undefined, undefined, undefined, undefined, opts);
|
|
111
|
+
}], undefined, undefined, undefined, undefined, undefined, opts);
|
|
112
112
|
let listIndexes = SqliteDriver$ReventlessLocal.prepare(db, "SELECT name FROM sqlite_master WHERE type='index' AND tbl_name='qdb_rm'");
|
|
113
113
|
let names = SqliteDriver$ReventlessLocal.all(listIndexes, []).map(row => {
|
|
114
114
|
let match = row["name"];
|
|
@@ -141,7 +141,7 @@ globalThis.describe("QueryDb — indexed equality lookup (B4 push-down)", () =>
|
|
|
141
141
|
db: db
|
|
142
142
|
};
|
|
143
143
|
let Storage = QueryDbStorage_Sqlite$ReventlessLocal.Make(TestBus)(DbProvider);
|
|
144
|
-
let s = Storage.make("orders", [byOwner], undefined, undefined, undefined, undefined, opts);
|
|
144
|
+
let s = Storage.make("orders", [byOwner], undefined, undefined, undefined, undefined, undefined, opts);
|
|
145
145
|
let ops = await TestRunner$ReventlessLocal.resolve(s.operations);
|
|
146
146
|
await ops.save("k1", item("o1"), "Any", undefined);
|
|
147
147
|
await ops.save("k2", item("o2"), "Any", undefined);
|
|
@@ -158,7 +158,7 @@ globalThis.describe("QueryDb — indexed equality lookup (B4 push-down)", () =>
|
|
|
158
158
|
db: db
|
|
159
159
|
};
|
|
160
160
|
let Storage = QueryDbStorage_Sqlite$ReventlessLocal.Make(TestBus)(DbProvider);
|
|
161
|
-
let s = Storage.make("orders", [byOwner], undefined, undefined, undefined, undefined, opts);
|
|
161
|
+
let s = Storage.make("orders", [byOwner], undefined, undefined, undefined, undefined, undefined, opts);
|
|
162
162
|
let ops = await TestRunner$ReventlessLocal.resolve(s.operations);
|
|
163
163
|
let aMinuteAgo = (Date.now() / 1000.0 | 0) - 60 | 0;
|
|
164
164
|
await ops.save("k1", item("o1"), "Any", undefined);
|
|
@@ -169,7 +169,7 @@ globalThis.describe("QueryDb — indexed equality lookup (B4 push-down)", () =>
|
|
|
169
169
|
globalThis.test("in-memory lookup matches the sqlite result (backend parity)", async () => {
|
|
170
170
|
let TestBus = LocalBus$ReventlessLocal.Make({});
|
|
171
171
|
let Storage = QueryDbStorage_InMemory$ReventlessLocal.Make(TestBus);
|
|
172
|
-
let s = Storage.make("orders", [byOwner], undefined, undefined, undefined, undefined, opts);
|
|
172
|
+
let s = Storage.make("orders", [byOwner], undefined, undefined, undefined, undefined, undefined, opts);
|
|
173
173
|
let ops = await TestRunner$ReventlessLocal.resolve(s.operations);
|
|
174
174
|
await ops.save("k1", item("o1"), "Any", undefined);
|
|
175
175
|
await ops.save("k2", item("o2"), "Any", undefined);
|
|
@@ -185,7 +185,7 @@ globalThis.describe("QueryDbStorage_InMemory — lazy scan snapshot (B4 dirty-fl
|
|
|
185
185
|
globalThis.test("interleaved save/scan reflects each write without stale reads", async () => {
|
|
186
186
|
let TestBus = LocalBus$ReventlessLocal.Make({});
|
|
187
187
|
let Storage = LocalQueryDbStorage$ReventlessLocal.Make(TestBus);
|
|
188
|
-
let s = Storage.make("lazy", [], undefined, undefined, undefined, undefined, opts);
|
|
188
|
+
let s = Storage.make("lazy", [], undefined, undefined, undefined, undefined, undefined, opts);
|
|
189
189
|
let ops = await TestRunner$ReventlessLocal.resolve(s.operations);
|
|
190
190
|
let scanFn = Stdlib_Option.getOrThrow(TestBus.getQueryDbScan("lazy"), undefined);
|
|
191
191
|
globalThis.expect(scanFn().length).toBe(0);
|
|
@@ -206,7 +206,7 @@ globalThis.describe("QueryDbStorage_Sqlite — TTL", () => {
|
|
|
206
206
|
db: db
|
|
207
207
|
};
|
|
208
208
|
let Storage = QueryDbStorage_Sqlite$ReventlessLocal.Make(TestBus)(DbProvider);
|
|
209
|
-
let s = Storage.make("rt-future", [], undefined, undefined, undefined, undefined, opts);
|
|
209
|
+
let s = Storage.make("rt-future", [], undefined, undefined, undefined, undefined, undefined, opts);
|
|
210
210
|
let ops = await TestRunner$ReventlessLocal.resolve(s.operations);
|
|
211
211
|
let oneHourFromNow = (Date.now() / 1000.0 | 0) + 3600 | 0;
|
|
212
212
|
await ops.save("k", "alive", "Any", oneHourFromNow);
|
|
@@ -220,7 +220,7 @@ globalThis.describe("QueryDbStorage_Sqlite — TTL", () => {
|
|
|
220
220
|
db: db
|
|
221
221
|
};
|
|
222
222
|
let Storage = QueryDbStorage_Sqlite$ReventlessLocal.Make(TestBus)(DbProvider);
|
|
223
|
-
let s = Storage.make("rt-past", [], undefined, undefined, undefined, undefined, opts);
|
|
223
|
+
let s = Storage.make("rt-past", [], undefined, undefined, undefined, undefined, undefined, opts);
|
|
224
224
|
let ops = await TestRunner$ReventlessLocal.resolve(s.operations);
|
|
225
225
|
let aMinuteAgo = (Date.now() / 1000.0 | 0) - 60 | 0;
|
|
226
226
|
await ops.save("k", "expired", "Any", aMinuteAgo);
|
|
@@ -234,7 +234,7 @@ globalThis.describe("QueryDbStorage_Sqlite — TTL", () => {
|
|
|
234
234
|
db: db
|
|
235
235
|
};
|
|
236
236
|
let Storage = QueryDbStorage_Sqlite$ReventlessLocal.Make(TestBus)(DbProvider);
|
|
237
|
-
let s = Storage.make("rt-none", [], undefined, undefined, undefined, undefined, opts);
|
|
237
|
+
let s = Storage.make("rt-none", [], undefined, undefined, undefined, undefined, undefined, opts);
|
|
238
238
|
let ops = await TestRunner$ReventlessLocal.resolve(s.operations);
|
|
239
239
|
await ops.save("k", "forever", "Any", undefined);
|
|
240
240
|
let items = await collect(ops.loadStream("k"));
|
|
@@ -247,7 +247,7 @@ globalThis.describe("QueryDbStorage_Sqlite — TTL", () => {
|
|
|
247
247
|
db: db
|
|
248
248
|
};
|
|
249
249
|
let Storage = QueryDbStorage_Sqlite$ReventlessLocal.Make(TestBus)(DbProvider);
|
|
250
|
-
let s = Storage.make("scan-ttl", [], undefined, undefined, undefined, undefined, opts);
|
|
250
|
+
let s = Storage.make("scan-ttl", [], undefined, undefined, undefined, undefined, undefined, opts);
|
|
251
251
|
let ops = await TestRunner$ReventlessLocal.resolve(s.operations);
|
|
252
252
|
await ops.save("alive", "a", "Any", undefined);
|
|
253
253
|
let aMinuteAgo = (Date.now() / 1000.0 | 0) - 60 | 0;
|
|
@@ -266,7 +266,7 @@ globalThis.describe("QueryDbStorage_Sqlite — TTL", () => {
|
|
|
266
266
|
db: db
|
|
267
267
|
};
|
|
268
268
|
let Storage = QueryDbStorage_Sqlite$ReventlessLocal.Make(TestBus)(DbProvider);
|
|
269
|
-
let s = Storage.make("overwrite-ttl", [], undefined, undefined, undefined, undefined, opts);
|
|
269
|
+
let s = Storage.make("overwrite-ttl", [], undefined, undefined, undefined, undefined, undefined, opts);
|
|
270
270
|
let ops = await TestRunner$ReventlessLocal.resolve(s.operations);
|
|
271
271
|
let aMinuteAgo = (Date.now() / 1000.0 | 0) - 60 | 0;
|
|
272
272
|
await ops.save("k", "expired", "Any", aMinuteAgo);
|
|
@@ -55,7 +55,7 @@ let build = async (): setup => {
|
|
|
55
55
|
let db = SqliteDriver.openDb(~path=":memory:")
|
|
56
56
|
}
|
|
57
57
|
module Storage = QueryDbStorage_Sqlite.Make(TestBus, DbProvider)
|
|
58
|
-
let s = Storage.make(~name="items", ~indexes=[], ~api=(), ~apiRole=(), ~opts)
|
|
58
|
+
let s = Storage.make(~name="items", ~indexes=[], ~api=(), ~apiRole=(), ~owner=None, ~opts)
|
|
59
59
|
let ops = await s.operations->TestRunner.resolve
|
|
60
60
|
for i in 0 to rows->Array.length - 1 {
|
|
61
61
|
let (id, status, name, qty) = rows->Array.getUnsafe(i)
|
|
@@ -85,7 +85,7 @@ async function build() {
|
|
|
85
85
|
db: db
|
|
86
86
|
};
|
|
87
87
|
let Storage = QueryDbStorage_Sqlite$ReventlessLocal.Make(TestBus)(DbProvider);
|
|
88
|
-
let s = Storage.make("items", [], undefined, undefined, undefined, undefined, opts);
|
|
88
|
+
let s = Storage.make("items", [], undefined, undefined, undefined, undefined, undefined, opts);
|
|
89
89
|
let ops = await TestRunner$ReventlessLocal.resolve(s.operations);
|
|
90
90
|
for (let i = 0, i_finish = rows.length; i < i_finish; ++i) {
|
|
91
91
|
let match = rows[i];
|
|
@@ -145,7 +145,7 @@ async function buildFixture(name) {
|
|
|
145
145
|
connectionSpec: true
|
|
146
146
|
};
|
|
147
147
|
Plugin_Helpers$ReventlessCore.stateSchemaRegistry[name] = rowStateSchemaWithAnnotations;
|
|
148
|
-
let queryDb = Maker.make(undefined, undefined, undefined, undefined);
|
|
148
|
+
let queryDb = Maker.make(undefined, undefined, undefined, undefined, undefined);
|
|
149
149
|
let ops = await TestRunner$ReventlessLocal.resolve(Component$ReventlessCore.operations(queryDb));
|
|
150
150
|
Resolvers.make(name, undefined, undefined, Pulumi.output(""), [], undefined, [], [], "AllowAuthenticated", {});
|
|
151
151
|
let r = DomainGraphQL_Server$ReventlessLocal.getQueryResolver(listFieldName);
|
|
@@ -15,7 +15,7 @@ describe("QueryDbStorage_Sqlite", () => {
|
|
|
15
15
|
}
|
|
16
16
|
module Storage = QueryDbStorage_Sqlite.Make(TestBus, DbProvider)
|
|
17
17
|
|
|
18
|
-
let s = Storage.make(~name="rm1", ~indexes=[], ~api=(), ~apiRole=(), ~opts)
|
|
18
|
+
let s = Storage.make(~name="rm1", ~indexes=[], ~api=(), ~apiRole=(), ~owner=None, ~opts)
|
|
19
19
|
let ops = await s.operations->TestRunner.resolve
|
|
20
20
|
|
|
21
21
|
let _ = await ops.save(
|
|
@@ -42,7 +42,7 @@ describe("QueryDbStorage_Sqlite", () => {
|
|
|
42
42
|
}
|
|
43
43
|
module Storage = QueryDbStorage_Sqlite.Make(TestBus, DbProvider)
|
|
44
44
|
|
|
45
|
-
let s = Storage.make(~name="rm2", ~indexes=[], ~api=(), ~apiRole=(), ~opts)
|
|
45
|
+
let s = Storage.make(~name="rm2", ~indexes=[], ~api=(), ~apiRole=(), ~owner=None, ~opts)
|
|
46
46
|
let ops = await s.operations->TestRunner.resolve
|
|
47
47
|
|
|
48
48
|
let _ = await ops.save("k", JSON.Encode.string("a"), ReventlessCore.QueryDb.Any, None)
|
|
@@ -65,7 +65,7 @@ describe("QueryDbStorage_Sqlite", () => {
|
|
|
65
65
|
}
|
|
66
66
|
module Storage = QueryDbStorage_Sqlite.Make(TestBus, DbProvider)
|
|
67
67
|
|
|
68
|
-
let s = Storage.make(~name="rm3", ~indexes=[], ~api=(), ~apiRole=(), ~opts)
|
|
68
|
+
let s = Storage.make(~name="rm3", ~indexes=[], ~api=(), ~apiRole=(), ~owner=None, ~opts)
|
|
69
69
|
let ops = await s.operations->TestRunner.resolve
|
|
70
70
|
|
|
71
71
|
let _ = await ops.saveBatch([
|
|
@@ -102,7 +102,7 @@ describe("QueryDbStorage_Sqlite", () => {
|
|
|
102
102
|
}
|
|
103
103
|
module Storage = QueryDbStorage_Sqlite.Make(TestBus, DbProvider)
|
|
104
104
|
|
|
105
|
-
let s = Storage.make(~name="rm4", ~indexes=[], ~api=(), ~apiRole=(), ~opts)
|
|
105
|
+
let s = Storage.make(~name="rm4", ~indexes=[], ~api=(), ~apiRole=(), ~owner=None, ~opts)
|
|
106
106
|
let ops = await s.operations->TestRunner.resolve
|
|
107
107
|
|
|
108
108
|
let _ = await ops.save("k", JSON.Encode.string("a"), ReventlessCore.QueryDb.Any, None)
|
|
@@ -127,7 +127,7 @@ describe("QueryDbStorage_Sqlite", () => {
|
|
|
127
127
|
let db = SqliteDriver.openDb(~path)
|
|
128
128
|
}
|
|
129
129
|
module Storage = QueryDbStorage_Sqlite.Make(TestBus, DbProvider)
|
|
130
|
-
let s = Storage.make(~name="persist", ~indexes=[], ~api=(), ~apiRole=(), ~opts)
|
|
130
|
+
let s = Storage.make(~name="persist", ~indexes=[], ~api=(), ~apiRole=(), ~owner=None, ~opts)
|
|
131
131
|
let ops = await s.operations->TestRunner.resolve
|
|
132
132
|
let _ = await ops.save(
|
|
133
133
|
"k",
|
|
@@ -144,7 +144,7 @@ describe("QueryDbStorage_Sqlite", () => {
|
|
|
144
144
|
let db = SqliteDriver.openDb(~path)
|
|
145
145
|
}
|
|
146
146
|
module Storage2 = QueryDbStorage_Sqlite.Make(TestBus2, DbProvider2)
|
|
147
|
-
let s2 = Storage2.make(~name="persist", ~indexes=[], ~api=(), ~apiRole=(), ~opts)
|
|
147
|
+
let s2 = Storage2.make(~name="persist", ~indexes=[], ~api=(), ~apiRole=(), ~owner=None, ~opts)
|
|
148
148
|
let ops2 = await s2.operations->TestRunner.resolve
|
|
149
149
|
let items =
|
|
150
150
|
await ops2.loadStream("k")
|
|
@@ -23,7 +23,7 @@ globalThis.describe("QueryDbStorage_Sqlite", () => {
|
|
|
23
23
|
db: db
|
|
24
24
|
};
|
|
25
25
|
let Storage = QueryDbStorage_Sqlite$ReventlessLocal.Make(TestBus)(DbProvider);
|
|
26
|
-
let s = Storage.make("rm1", [], undefined, undefined, undefined, undefined, opts);
|
|
26
|
+
let s = Storage.make("rm1", [], undefined, undefined, undefined, undefined, undefined, opts);
|
|
27
27
|
let ops = await TestRunner$ReventlessLocal.resolve(s.operations);
|
|
28
28
|
await ops.save("id1", "value1", "Any", undefined);
|
|
29
29
|
let items = await Effect.runPromise(Effect.catchAll(Stream.runCollect(ops.loadStream("id1")), param => Effect.succeed([])));
|
|
@@ -37,7 +37,7 @@ globalThis.describe("QueryDbStorage_Sqlite", () => {
|
|
|
37
37
|
db: db
|
|
38
38
|
};
|
|
39
39
|
let Storage = QueryDbStorage_Sqlite$ReventlessLocal.Make(TestBus)(DbProvider);
|
|
40
|
-
let s = Storage.make("rm2", [], undefined, undefined, undefined, undefined, opts);
|
|
40
|
+
let s = Storage.make("rm2", [], undefined, undefined, undefined, undefined, undefined, opts);
|
|
41
41
|
let ops = await TestRunner$ReventlessLocal.resolve(s.operations);
|
|
42
42
|
await ops.save("k", "a", "Any", undefined);
|
|
43
43
|
await ops.save("k", "b", "Any", undefined);
|
|
@@ -52,7 +52,7 @@ globalThis.describe("QueryDbStorage_Sqlite", () => {
|
|
|
52
52
|
db: db
|
|
53
53
|
};
|
|
54
54
|
let Storage = QueryDbStorage_Sqlite$ReventlessLocal.Make(TestBus)(DbProvider);
|
|
55
|
-
let s = Storage.make("rm3", [], undefined, undefined, undefined, undefined, opts);
|
|
55
|
+
let s = Storage.make("rm3", [], undefined, undefined, undefined, undefined, undefined, opts);
|
|
56
56
|
let ops = await TestRunner$ReventlessLocal.resolve(s.operations);
|
|
57
57
|
await ops.saveBatch([
|
|
58
58
|
[
|
|
@@ -85,7 +85,7 @@ globalThis.describe("QueryDbStorage_Sqlite", () => {
|
|
|
85
85
|
db: db
|
|
86
86
|
};
|
|
87
87
|
let Storage = QueryDbStorage_Sqlite$ReventlessLocal.Make(TestBus)(DbProvider);
|
|
88
|
-
let s = Storage.make("rm4", [], undefined, undefined, undefined, undefined, opts);
|
|
88
|
+
let s = Storage.make("rm4", [], undefined, undefined, undefined, undefined, undefined, opts);
|
|
89
89
|
let ops = await TestRunner$ReventlessLocal.resolve(s.operations);
|
|
90
90
|
await ops.save("k", "a", "Any", undefined);
|
|
91
91
|
await ops.delete("k", undefined);
|
|
@@ -100,7 +100,7 @@ globalThis.describe("QueryDbStorage_Sqlite", () => {
|
|
|
100
100
|
db: db
|
|
101
101
|
};
|
|
102
102
|
let Storage = QueryDbStorage_Sqlite$ReventlessLocal.Make(TestBus)(DbProvider);
|
|
103
|
-
let s = Storage.make("persist", [], undefined, undefined, undefined, undefined, opts);
|
|
103
|
+
let s = Storage.make("persist", [], undefined, undefined, undefined, undefined, undefined, opts);
|
|
104
104
|
let ops = await TestRunner$ReventlessLocal.resolve(s.operations);
|
|
105
105
|
await ops.save("k", "hello", "Any", undefined);
|
|
106
106
|
SqliteDriver$ReventlessLocal.close(db);
|
|
@@ -110,7 +110,7 @@ globalThis.describe("QueryDbStorage_Sqlite", () => {
|
|
|
110
110
|
db: db$1
|
|
111
111
|
};
|
|
112
112
|
let Storage2 = QueryDbStorage_Sqlite$ReventlessLocal.Make(TestBus2)(DbProvider2);
|
|
113
|
-
let s2 = Storage2.make("persist", [], undefined, undefined, undefined, undefined, opts);
|
|
113
|
+
let s2 = Storage2.make("persist", [], undefined, undefined, undefined, undefined, undefined, opts);
|
|
114
114
|
let ops2 = await TestRunner$ReventlessLocal.resolve(s2.operations);
|
|
115
115
|
let items = await Effect.runPromise(Effect.catchAll(Stream.runCollect(ops2.loadStream("k")), param => Effect.succeed([])));
|
|
116
116
|
globalThis.expect(items.length).toBe(1);
|