@fireproof/core-test 0.0.0-smoke-1b31059-1752074105
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/LICENSE.md +232 -0
- package/blockstore/fp-envelope.test.ts-off +65 -0
- package/blockstore/fragment-gateway.test.ts-off +106 -0
- package/blockstore/interceptor-gateway.test.d.ts +19 -0
- package/blockstore/interceptor-gateway.test.js +217 -0
- package/blockstore/interceptor-gateway.test.js.map +1 -0
- package/blockstore/interceptor-gateway.test.ts +259 -0
- package/blockstore/keyed-crypto-indexeddb-file.test.d.ts +1 -0
- package/blockstore/keyed-crypto-indexeddb-file.test.js +114 -0
- package/blockstore/keyed-crypto-indexeddb-file.test.js.map +1 -0
- package/blockstore/keyed-crypto-indexeddb-file.test.ts +134 -0
- package/blockstore/keyed-crypto.test.d.ts +1 -0
- package/blockstore/keyed-crypto.test.js +310 -0
- package/blockstore/keyed-crypto.test.js.map +1 -0
- package/blockstore/keyed-crypto.test.ts +382 -0
- package/blockstore/loader.test.d.ts +1 -0
- package/blockstore/loader.test.js +241 -0
- package/blockstore/loader.test.js.map +1 -0
- package/blockstore/loader.test.ts +313 -0
- package/blockstore/standalone.test.d.ts +1 -0
- package/blockstore/standalone.test.js +112 -0
- package/blockstore/standalone.test.js.map +1 -0
- package/blockstore/standalone.test.ts +156 -0
- package/blockstore/store.test.d.ts +1 -0
- package/blockstore/store.test.js +152 -0
- package/blockstore/store.test.js.map +1 -0
- package/blockstore/store.test.ts +199 -0
- package/blockstore/transaction.test.d.ts +1 -0
- package/blockstore/transaction.test.js +109 -0
- package/blockstore/transaction.test.js.map +1 -0
- package/blockstore/transaction.test.ts +132 -0
- package/fireproof/all-gateway.test.d.ts +1 -0
- package/fireproof/all-gateway.test.js +333 -0
- package/fireproof/all-gateway.test.js.map +1 -0
- package/fireproof/all-gateway.test.ts +477 -0
- package/fireproof/attachable.test.d.ts +1 -0
- package/fireproof/attachable.test.js +438 -0
- package/fireproof/attachable.test.js.map +1 -0
- package/fireproof/attachable.test.ts +677 -0
- package/fireproof/cars/bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i.car +0 -0
- package/fireproof/cars/bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i.d.ts +4 -0
- package/fireproof/cars/bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i.js +325 -0
- package/fireproof/cars/bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i.js.map +1 -0
- package/fireproof/cars/bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i.ts +324 -0
- package/fireproof/charwise-boolean.test.d.ts +1 -0
- package/fireproof/charwise-boolean.test.js +43 -0
- package/fireproof/charwise-boolean.test.js.map +1 -0
- package/fireproof/charwise-boolean.test.ts +68 -0
- package/fireproof/crdt.test.d.ts +1 -0
- package/fireproof/crdt.test.js +509 -0
- package/fireproof/crdt.test.js.map +1 -0
- package/fireproof/crdt.test.ts +572 -0
- package/fireproof/database.test.d.ts +1 -0
- package/fireproof/database.test.js +658 -0
- package/fireproof/database.test.js.map +1 -0
- package/fireproof/database.test.ts +772 -0
- package/fireproof/deleted-docs-handling.test.d.ts +1 -0
- package/fireproof/deleted-docs-handling.test.js +69 -0
- package/fireproof/deleted-docs-handling.test.js.map +1 -0
- package/fireproof/deleted-docs-handling.test.ts +112 -0
- package/fireproof/fireproof.test.d.ts +3 -0
- package/fireproof/fireproof.test.fixture.d.ts +15 -0
- package/fireproof/fireproof.test.fixture.js +134 -0
- package/fireproof/fireproof.test.fixture.js.map +1 -0
- package/fireproof/fireproof.test.fixture.ts +133 -0
- package/fireproof/fireproof.test.js +574 -0
- package/fireproof/fireproof.test.js.map +1 -0
- package/fireproof/fireproof.test.ts +767 -0
- package/fireproof/hello.test.d.ts +1 -0
- package/fireproof/hello.test.js +67 -0
- package/fireproof/hello.test.js.map +1 -0
- package/fireproof/hello.test.ts +75 -0
- package/fireproof/indexer.test.d.ts +1 -0
- package/fireproof/indexer.test.js +408 -0
- package/fireproof/indexer.test.js.map +1 -0
- package/fireproof/indexer.test.ts +459 -0
- package/fireproof/multiple-ledger.test.d.ts +1 -0
- package/fireproof/multiple-ledger.test.js +51 -0
- package/fireproof/multiple-ledger.test.js.map +1 -0
- package/fireproof/multiple-ledger.test.ts +67 -0
- package/fireproof/query-docs.test.d.ts +1 -0
- package/fireproof/query-docs.test.js +69 -0
- package/fireproof/query-docs.test.js.map +1 -0
- package/fireproof/query-docs.test.ts +117 -0
- package/fireproof/query-limit-issue.test.d.ts +1 -0
- package/fireproof/query-limit-issue.test.js +89 -0
- package/fireproof/query-limit-issue.test.js.map +1 -0
- package/fireproof/query-limit-issue.test.ts +147 -0
- package/fireproof/query-property-inconsistency.test.d.ts +1 -0
- package/fireproof/query-property-inconsistency.test.js +52 -0
- package/fireproof/query-property-inconsistency.test.js.map +1 -0
- package/fireproof/query-property-inconsistency.test.ts +90 -0
- package/fireproof/query-result-properties.test.d.ts +1 -0
- package/fireproof/query-result-properties.test.js +25 -0
- package/fireproof/query-result-properties.test.js.map +1 -0
- package/fireproof/query-result-properties.test.ts +43 -0
- package/fireproof/stable-cid.test.d.ts +1 -0
- package/fireproof/stable-cid.test.js +52 -0
- package/fireproof/stable-cid.test.js.map +1 -0
- package/fireproof/stable-cid.test.ts +72 -0
- package/fireproof/utils.test.d.ts +1 -0
- package/fireproof/utils.test.js +124 -0
- package/fireproof/utils.test.js.map +1 -0
- package/fireproof/utils.test.ts +137 -0
- package/gateway/file/loader-config.test.d.ts +1 -0
- package/gateway/file/loader-config.test.js +255 -0
- package/gateway/file/loader-config.test.js.map +1 -0
- package/gateway/file/loader-config.test.ts +309 -0
- package/gateway/indexeddb/loader-config.test.d.ts +1 -0
- package/gateway/indexeddb/loader-config.test.js +77 -0
- package/gateway/indexeddb/loader-config.test.js.map +1 -0
- package/gateway/indexeddb/loader-config.test.ts +80 -0
- package/global-setup.d.ts +2 -0
- package/global-setup.js +9 -0
- package/global-setup.js.map +1 -0
- package/global-setup.ts +11 -0
- package/helpers.d.ts +31 -0
- package/helpers.js +140 -0
- package/helpers.js.map +1 -0
- package/helpers.ts +177 -0
- package/package.json +75 -0
- package/protocols/cloud/msger.test.d.ts +1 -0
- package/protocols/cloud/msger.test.js +464 -0
- package/protocols/cloud/msger.test.js.map +1 -0
- package/protocols/cloud/msger.test.ts +559 -0
- package/runtime/fp-envelope-serialize.test.d.ts +1 -0
- package/runtime/fp-envelope-serialize.test.js +223 -0
- package/runtime/fp-envelope-serialize.test.js.map +1 -0
- package/runtime/fp-envelope-serialize.test.ts +266 -0
- package/runtime/meta-key-hack.test.d.ts +1 -0
- package/runtime/meta-key-hack.test.js +85 -0
- package/runtime/meta-key-hack.test.js.map +1 -0
- package/runtime/meta-key-hack.test.ts +103 -0
- package/setup.file.d.ts +1 -0
- package/setup.file.js +3 -0
- package/setup.file.js.map +1 -0
- package/setup.file.ts +1 -0
- package/setup.indexeddb.d.ts +1 -0
- package/setup.indexeddb.js +2 -0
- package/setup.indexeddb.js.map +1 -0
- package/setup.indexeddb.ts +0 -0
- package/setup.memory.d.ts +1 -0
- package/setup.memory.js +4 -0
- package/setup.memory.js.map +1 -0
- package/setup.memory.ts +2 -0
- package/tsconfig.json +18 -0
- package/vitest.config.d.ts +2 -0
- package/vitest.config.js +8 -0
- package/vitest.config.js.map +1 -0
- package/vitest.config.ts +8 -0
- package/vitest.file.config.d.ts +2 -0
- package/vitest.file.config.js +11 -0
- package/vitest.file.config.js.map +1 -0
- package/vitest.file.config.ts +11 -0
- package/vitest.indexeddb.config.d.ts +2 -0
- package/vitest.indexeddb.config.js +21 -0
- package/vitest.indexeddb.config.js.map +1 -0
- package/vitest.indexeddb.config.ts +34 -0
- package/vitest.memory.config.d.ts +2 -0
- package/vitest.memory.config.js +24 -0
- package/vitest.memory.config.js.map +1 -0
- package/vitest.memory.config.ts +24 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { CID } from "multiformats";
|
|
2
|
+
import { mockLoader, noopUrl } from "../helpers.js";
|
|
3
|
+
import { ensureSuperThis } from "@fireproof/core-runtime";
|
|
4
|
+
import { PARAM } from "@fireproof/core-types-base";
|
|
5
|
+
import { describe, afterEach, beforeEach, it, expect } from "vitest";
|
|
6
|
+
import { createAttachedStores } from "@fireproof/core-blockstore";
|
|
7
|
+
import { fpDeserialize } from "@fireproof/core-gateways-base";
|
|
8
|
+
describe("CarStore", function () {
|
|
9
|
+
let store;
|
|
10
|
+
const sthis = ensureSuperThis();
|
|
11
|
+
let loader;
|
|
12
|
+
afterEach(async () => {
|
|
13
|
+
await store.close();
|
|
14
|
+
await store.destroy();
|
|
15
|
+
});
|
|
16
|
+
beforeEach(async () => {
|
|
17
|
+
loader = mockLoader(sthis);
|
|
18
|
+
await sthis.start();
|
|
19
|
+
const at = await createAttachedStores(noopUrl("test"), loader);
|
|
20
|
+
store = at.stores.car;
|
|
21
|
+
await store.start(at.stores);
|
|
22
|
+
});
|
|
23
|
+
it("should have a name", function () {
|
|
24
|
+
expect(store.url().getParam(PARAM.NAME)).toEqual("test");
|
|
25
|
+
});
|
|
26
|
+
it("should save a car", async () => {
|
|
27
|
+
const car = {
|
|
28
|
+
cid: "cidKey",
|
|
29
|
+
bytes: new Uint8Array([55, 56, 57]),
|
|
30
|
+
};
|
|
31
|
+
await store.save(car);
|
|
32
|
+
const data = (await store.realGateway.getPlain({ loader }, store.url(), car.cid.toString())).Ok();
|
|
33
|
+
expect(sthis.txt.decode(data)).toEqual(sthis.txt.decode(car.bytes));
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
describe("CarStore with a saved car", function () {
|
|
37
|
+
let store;
|
|
38
|
+
let car;
|
|
39
|
+
let loader;
|
|
40
|
+
const sthis = ensureSuperThis();
|
|
41
|
+
afterEach(async () => {
|
|
42
|
+
await store.close();
|
|
43
|
+
await store.destroy();
|
|
44
|
+
});
|
|
45
|
+
beforeEach(async () => {
|
|
46
|
+
loader = mockLoader(sthis);
|
|
47
|
+
await sthis.start();
|
|
48
|
+
const at = await createAttachedStores(noopUrl("test2"), loader);
|
|
49
|
+
store = at.stores.car;
|
|
50
|
+
await store.start(at.stores);
|
|
51
|
+
car = {
|
|
52
|
+
cid: "cid",
|
|
53
|
+
bytes: new Uint8Array([55, 56, 57, 80]),
|
|
54
|
+
};
|
|
55
|
+
await store.save(car);
|
|
56
|
+
});
|
|
57
|
+
it("should have a car", async () => {
|
|
58
|
+
const data = (await store.realGateway.getPlain({ loader }, store.url(), car.cid.toString())).Ok();
|
|
59
|
+
expect(sthis.txt.decode(data)).toEqual(sthis.txt.decode(car.bytes));
|
|
60
|
+
});
|
|
61
|
+
it("should load a car", async () => {
|
|
62
|
+
const loaded = await store.load(car.cid);
|
|
63
|
+
expect(loaded.cid).toEqual(car.cid);
|
|
64
|
+
expect(loaded.bytes.constructor.name).toEqual("Uint8Array");
|
|
65
|
+
expect(loaded.bytes.toString()).toEqual(car.bytes.toString());
|
|
66
|
+
});
|
|
67
|
+
it("should remove a car", async () => {
|
|
68
|
+
await store.remove(car.cid);
|
|
69
|
+
const { e: error } = (await store.load(car.cid).catch((e) => ({ e })));
|
|
70
|
+
expect(error).toBeTruthy();
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
describe("MetaStore", function () {
|
|
74
|
+
let store;
|
|
75
|
+
const sthis = ensureSuperThis();
|
|
76
|
+
let loader;
|
|
77
|
+
afterEach(async () => {
|
|
78
|
+
await store.close();
|
|
79
|
+
await store.destroy();
|
|
80
|
+
});
|
|
81
|
+
beforeEach(async () => {
|
|
82
|
+
loader = mockLoader(sthis);
|
|
83
|
+
await sthis.start();
|
|
84
|
+
const at = await createAttachedStores(noopUrl("test"), loader);
|
|
85
|
+
store = at.stores.meta;
|
|
86
|
+
await store.start(at.stores);
|
|
87
|
+
});
|
|
88
|
+
it("should have a name", function () {
|
|
89
|
+
expect(store.url().getParam(PARAM.NAME)).toEqual("test");
|
|
90
|
+
});
|
|
91
|
+
it("should save a header", async () => {
|
|
92
|
+
const cid = CID.parse("bafybeia4luuns6dgymy5kau5rm7r4qzrrzg6cglpzpogussprpy42cmcn4");
|
|
93
|
+
const h = {
|
|
94
|
+
cars: [cid],
|
|
95
|
+
};
|
|
96
|
+
await store.save(h);
|
|
97
|
+
const file = await store.realGateway.getPlain({ loader }, store.url(), "main");
|
|
98
|
+
const blockMeta = (await fpDeserialize(sthis, store.url(), file));
|
|
99
|
+
expect(blockMeta.Ok()).toBeTruthy();
|
|
100
|
+
expect(blockMeta.Ok().payload.length).toEqual(1);
|
|
101
|
+
const decodedHeader = blockMeta.Ok().payload[0].dbMeta;
|
|
102
|
+
expect(decodedHeader).toBeTruthy();
|
|
103
|
+
expect(decodedHeader.cars).toBeTruthy();
|
|
104
|
+
expect(decodedHeader.cars[0].toString()).toEqual(cid.toString());
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
describe("MetaStore with a saved header", function () {
|
|
108
|
+
let store;
|
|
109
|
+
let cid;
|
|
110
|
+
const sthis = ensureSuperThis();
|
|
111
|
+
let loader;
|
|
112
|
+
afterEach(async () => {
|
|
113
|
+
await store.close();
|
|
114
|
+
await store.destroy();
|
|
115
|
+
});
|
|
116
|
+
beforeEach(async () => {
|
|
117
|
+
loader = mockLoader(sthis);
|
|
118
|
+
await sthis.start();
|
|
119
|
+
const at = await createAttachedStores(noopUrl("test3-meta"), loader);
|
|
120
|
+
store = at.stores.meta;
|
|
121
|
+
await store.start(at.stores);
|
|
122
|
+
cid = CID.parse("bafybeia4luuns6dgymy5kau5rm7r4qzrrzg6cglpzpogussprpy42cmcn4");
|
|
123
|
+
await store.save({ cars: [cid] });
|
|
124
|
+
});
|
|
125
|
+
it("should have a header", async () => {
|
|
126
|
+
const bytes = await store.realGateway.getPlain({ loader }, store.url(), "main");
|
|
127
|
+
const data = sthis.txt.decode(bytes.Ok());
|
|
128
|
+
expect(data).toMatch(/parents/);
|
|
129
|
+
const header = JSON.parse(data)[0];
|
|
130
|
+
expect(header).toBeDefined();
|
|
131
|
+
expect(header.parents).toBeDefined();
|
|
132
|
+
const blockMeta = (await fpDeserialize(sthis, store.url(), bytes));
|
|
133
|
+
expect(blockMeta.Ok()).toBeTruthy();
|
|
134
|
+
expect(blockMeta.Ok().payload.length).toEqual(1);
|
|
135
|
+
const decodedHeader = blockMeta.Ok().payload[0].dbMeta;
|
|
136
|
+
expect(decodedHeader).toBeDefined();
|
|
137
|
+
expect(decodedHeader.cars).toBeDefined();
|
|
138
|
+
expect(decodedHeader.cars[0].toString()).toEqual(cid.toString());
|
|
139
|
+
});
|
|
140
|
+
it("should load a header", async () => {
|
|
141
|
+
const metaStream = store.stream().getReader();
|
|
142
|
+
while (true) {
|
|
143
|
+
const { done, value: cars } = await metaStream.read();
|
|
144
|
+
if (done)
|
|
145
|
+
break;
|
|
146
|
+
expect(cars).toBeTruthy();
|
|
147
|
+
expect(cars.map((i) => i.cars.map((i) => i.toString())).flat(2)).toEqual([cid.toString()]);
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
//# sourceMappingURL=store.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.test.js","sourceRoot":"","sources":["store.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { CID } from "multiformats";
|
|
2
|
+
import { Result } from "@adviser/cement";
|
|
3
|
+
import { mockLoader, noopUrl } from "../helpers.js";
|
|
4
|
+
import { ensureSuperThis } from "@fireproof/core-runtime";
|
|
5
|
+
import { PARAM, NotFoundError, DbMeta } from "@fireproof/core-types-base";
|
|
6
|
+
import { describe, afterEach, beforeEach, it, expect } from "vitest";
|
|
7
|
+
import { createAttachedStores } from "@fireproof/core-blockstore";
|
|
8
|
+
import { CarStore, Loadable, AnyBlock, MetaStore, FPEnvelopeMeta } from "@fireproof/core-types-blockstore";
|
|
9
|
+
import { fpDeserialize } from "@fireproof/core-gateways-base";
|
|
10
|
+
|
|
11
|
+
// function runtime(sthis: SuperThis) {
|
|
12
|
+
// return toStoreRuntime(sthis);
|
|
13
|
+
// }
|
|
14
|
+
|
|
15
|
+
// async function mockLoader(sthis: SuperThis, name?: string): Promise<bs.StoreFactoryItem> {
|
|
16
|
+
// const url = noopUrl(name);
|
|
17
|
+
// return {
|
|
18
|
+
// // sthis,
|
|
19
|
+
// url: url,
|
|
20
|
+
// loader:
|
|
21
|
+
// };
|
|
22
|
+
// }
|
|
23
|
+
|
|
24
|
+
describe("CarStore", function () {
|
|
25
|
+
let store: CarStore;
|
|
26
|
+
const sthis = ensureSuperThis();
|
|
27
|
+
|
|
28
|
+
let loader: Loadable;
|
|
29
|
+
|
|
30
|
+
afterEach(async () => {
|
|
31
|
+
await store.close();
|
|
32
|
+
await store.destroy();
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
beforeEach(async () => {
|
|
36
|
+
loader = mockLoader(sthis);
|
|
37
|
+
await sthis.start();
|
|
38
|
+
const at = await createAttachedStores(noopUrl("test"), loader);
|
|
39
|
+
store = at.stores.car;
|
|
40
|
+
await store.start(at.stores);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it("should have a name", function () {
|
|
44
|
+
expect(store.url().getParam(PARAM.NAME)).toEqual("test");
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it("should save a car", async () => {
|
|
48
|
+
const car: AnyBlock = {
|
|
49
|
+
cid: "cidKey" as unknown as CID,
|
|
50
|
+
bytes: new Uint8Array([55, 56, 57]),
|
|
51
|
+
};
|
|
52
|
+
await store.save(car);
|
|
53
|
+
const data = (await store.realGateway.getPlain({ loader }, store.url(), car.cid.toString())).Ok();
|
|
54
|
+
expect(sthis.txt.decode(data)).toEqual(sthis.txt.decode(car.bytes));
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
describe("CarStore with a saved car", function () {
|
|
59
|
+
let store: CarStore;
|
|
60
|
+
let car: AnyBlock;
|
|
61
|
+
let loader: Loadable;
|
|
62
|
+
|
|
63
|
+
const sthis = ensureSuperThis();
|
|
64
|
+
|
|
65
|
+
afterEach(async () => {
|
|
66
|
+
await store.close();
|
|
67
|
+
await store.destroy();
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
beforeEach(async () => {
|
|
71
|
+
loader = mockLoader(sthis);
|
|
72
|
+
await sthis.start();
|
|
73
|
+
|
|
74
|
+
const at = await createAttachedStores(noopUrl("test2"), loader);
|
|
75
|
+
store = at.stores.car;
|
|
76
|
+
await store.start(at.stores);
|
|
77
|
+
car = {
|
|
78
|
+
cid: "cid" as unknown as CID,
|
|
79
|
+
bytes: new Uint8Array([55, 56, 57, 80]),
|
|
80
|
+
};
|
|
81
|
+
await store.save(car);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
it("should have a car", async () => {
|
|
85
|
+
const data = (await store.realGateway.getPlain({ loader }, store.url(), car.cid.toString())).Ok();
|
|
86
|
+
expect(sthis.txt.decode(data)).toEqual(sthis.txt.decode(car.bytes));
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it("should load a car", async () => {
|
|
90
|
+
const loaded = await store.load(car.cid);
|
|
91
|
+
expect(loaded.cid).toEqual(car.cid);
|
|
92
|
+
expect(loaded.bytes.constructor.name).toEqual("Uint8Array");
|
|
93
|
+
expect(loaded.bytes.toString()).toEqual(car.bytes.toString());
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
it("should remove a car", async () => {
|
|
97
|
+
await store.remove(car.cid);
|
|
98
|
+
const { e: error } = (await store.load(car.cid).catch((e: Error) => ({ e }))) as { e: NotFoundError };
|
|
99
|
+
expect(error).toBeTruthy();
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
describe("MetaStore", function () {
|
|
104
|
+
let store: MetaStore;
|
|
105
|
+
const sthis = ensureSuperThis();
|
|
106
|
+
let loader: Loadable;
|
|
107
|
+
|
|
108
|
+
afterEach(async () => {
|
|
109
|
+
await store.close();
|
|
110
|
+
await store.destroy();
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
beforeEach(async () => {
|
|
114
|
+
loader = mockLoader(sthis);
|
|
115
|
+
await sthis.start();
|
|
116
|
+
const at = await createAttachedStores(noopUrl("test"), loader);
|
|
117
|
+
store = at.stores.meta;
|
|
118
|
+
await store.start(at.stores);
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
it("should have a name", function () {
|
|
122
|
+
expect(store.url().getParam(PARAM.NAME)).toEqual("test");
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
it("should save a header", async () => {
|
|
126
|
+
const cid = CID.parse("bafybeia4luuns6dgymy5kau5rm7r4qzrrzg6cglpzpogussprpy42cmcn4");
|
|
127
|
+
const h: DbMeta = {
|
|
128
|
+
cars: [cid],
|
|
129
|
+
// key: undefined,
|
|
130
|
+
};
|
|
131
|
+
await store.save(h);
|
|
132
|
+
const file = await store.realGateway.getPlain({ loader }, store.url(), "main");
|
|
133
|
+
const blockMeta = (await fpDeserialize(sthis, store.url(), file)) as Result<FPEnvelopeMeta>;
|
|
134
|
+
expect(blockMeta.Ok()).toBeTruthy();
|
|
135
|
+
expect(blockMeta.Ok().payload.length).toEqual(1);
|
|
136
|
+
const decodedHeader = blockMeta.Ok().payload[0].dbMeta;
|
|
137
|
+
expect(decodedHeader).toBeTruthy();
|
|
138
|
+
expect(decodedHeader.cars).toBeTruthy();
|
|
139
|
+
expect(decodedHeader.cars[0].toString()).toEqual(cid.toString());
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
describe("MetaStore with a saved header", function () {
|
|
144
|
+
let store: MetaStore;
|
|
145
|
+
let cid: CID;
|
|
146
|
+
const sthis = ensureSuperThis();
|
|
147
|
+
let loader: Loadable;
|
|
148
|
+
|
|
149
|
+
afterEach(async () => {
|
|
150
|
+
await store.close();
|
|
151
|
+
await store.destroy();
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
beforeEach(async () => {
|
|
155
|
+
loader = mockLoader(sthis);
|
|
156
|
+
await sthis.start();
|
|
157
|
+
const at = await createAttachedStores(noopUrl("test3-meta"), loader);
|
|
158
|
+
store = at.stores.meta;
|
|
159
|
+
await store.start(at.stores);
|
|
160
|
+
cid = CID.parse("bafybeia4luuns6dgymy5kau5rm7r4qzrrzg6cglpzpogussprpy42cmcn4");
|
|
161
|
+
await store.save({ cars: [cid] /*, key: undefined */ });
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
// it("should load", async () =>{
|
|
165
|
+
// expect(onload).toBeTruthy();
|
|
166
|
+
// expect(onload?.length).toEqual(1);
|
|
167
|
+
// expect(onload?.[0].cars.toString()).toEqual(cid.toString());
|
|
168
|
+
// });
|
|
169
|
+
|
|
170
|
+
it("should have a header", async () => {
|
|
171
|
+
const bytes = await store.realGateway.getPlain({ loader }, store.url(), "main");
|
|
172
|
+
const data = sthis.txt.decode(bytes.Ok());
|
|
173
|
+
expect(data).toMatch(/parents/);
|
|
174
|
+
const header = JSON.parse(data)[0];
|
|
175
|
+
expect(header).toBeDefined();
|
|
176
|
+
expect(header.parents).toBeDefined();
|
|
177
|
+
// const [blockMeta] = await store.handleByteHeads(bytes);
|
|
178
|
+
|
|
179
|
+
const blockMeta = (await fpDeserialize(sthis, store.url(), bytes)) as Result<FPEnvelopeMeta>;
|
|
180
|
+
expect(blockMeta.Ok()).toBeTruthy();
|
|
181
|
+
expect(blockMeta.Ok().payload.length).toEqual(1);
|
|
182
|
+
const decodedHeader = blockMeta.Ok().payload[0].dbMeta;
|
|
183
|
+
expect(decodedHeader).toBeDefined();
|
|
184
|
+
expect(decodedHeader.cars).toBeDefined();
|
|
185
|
+
expect(decodedHeader.cars[0].toString()).toEqual(cid.toString());
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
it("should load a header", async () => {
|
|
189
|
+
const metaStream = store.stream().getReader();
|
|
190
|
+
while (true) {
|
|
191
|
+
const { done, value: cars } = await metaStream.read();
|
|
192
|
+
if (done) break;
|
|
193
|
+
// expect(loaded).toBeTruthy();
|
|
194
|
+
expect(cars).toBeTruthy();
|
|
195
|
+
expect(cars.map((i) => i.cars.map((i) => i.toString())).flat(2)).toEqual([cid.toString()]);
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { CID } from "multiformats";
|
|
2
|
+
import { simpleBlockOpts } from "../helpers.js";
|
|
3
|
+
import { to_uint8 } from "@adviser/cement";
|
|
4
|
+
import { anyBlock2FPBlock, BaseBlockstoreImpl, CarTransactionImpl, EncryptedBlockstore } from "@fireproof/core-blockstore";
|
|
5
|
+
import { ensureSuperThis } from "@fireproof/core-runtime";
|
|
6
|
+
import { describe, beforeEach, it, expect, assert } from "vitest";
|
|
7
|
+
describe("Fresh TransactionBlockstore", function () {
|
|
8
|
+
let blocks;
|
|
9
|
+
const sthis = ensureSuperThis();
|
|
10
|
+
beforeEach(async () => {
|
|
11
|
+
blocks = new BaseBlockstoreImpl(simpleBlockOpts(sthis));
|
|
12
|
+
await blocks.ready();
|
|
13
|
+
});
|
|
14
|
+
it("should not put", async () => {
|
|
15
|
+
const value = sthis.txt.encode("value");
|
|
16
|
+
const e = await blocks.put(await anyBlock2FPBlock({ cid: "key", bytes: value })).catch((e) => e);
|
|
17
|
+
expect(e.message).toMatch(/transaction/g);
|
|
18
|
+
});
|
|
19
|
+
it("should yield a transaction", async () => {
|
|
20
|
+
const txR = await blocks.transaction(async (tblocks) => {
|
|
21
|
+
expect(tblocks).toBeTruthy();
|
|
22
|
+
expect(tblocks instanceof CarTransactionImpl).toBeTruthy();
|
|
23
|
+
return { head: [] };
|
|
24
|
+
});
|
|
25
|
+
expect(txR).toBeTruthy();
|
|
26
|
+
expect(txR.t).toBeTruthy();
|
|
27
|
+
expect(txR.meta).toEqual({ head: [] });
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
describe("TransactionBlockstore with name", function () {
|
|
31
|
+
let blocks;
|
|
32
|
+
const sthis = ensureSuperThis();
|
|
33
|
+
beforeEach(async () => {
|
|
34
|
+
blocks = new EncryptedBlockstore(sthis, simpleBlockOpts(sthis));
|
|
35
|
+
await blocks.ready();
|
|
36
|
+
});
|
|
37
|
+
it("should have a loader", function () {
|
|
38
|
+
expect(blocks.loader).toBeTruthy();
|
|
39
|
+
});
|
|
40
|
+
it("should get from loader", async () => {
|
|
41
|
+
const bytes = sthis.txt.encode("bytes");
|
|
42
|
+
expect(blocks.loader).toBeTruthy();
|
|
43
|
+
blocks.loader.getBlock = async (cid) => {
|
|
44
|
+
return anyBlock2FPBlock({ cid, bytes });
|
|
45
|
+
};
|
|
46
|
+
const value = await blocks.get("key");
|
|
47
|
+
expect(value).toEqual({ cid: "key", bytes });
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
describe("A transaction", function () {
|
|
51
|
+
let tblocks;
|
|
52
|
+
let blocks;
|
|
53
|
+
const sthis = ensureSuperThis();
|
|
54
|
+
beforeEach(async () => {
|
|
55
|
+
blocks = new EncryptedBlockstore(sthis, simpleBlockOpts(sthis, "test"));
|
|
56
|
+
tblocks = new CarTransactionImpl(blocks);
|
|
57
|
+
blocks.transactions.add(tblocks);
|
|
58
|
+
});
|
|
59
|
+
it("should put and get", async () => {
|
|
60
|
+
const cid = CID.parse("bafybeia4luuns6dgymy5kau5rm7r4qzrrzg6cglpzpogussprpy42cmcn4");
|
|
61
|
+
const bytes = sthis.txt.encode("bytes");
|
|
62
|
+
await tblocks.put(await anyBlock2FPBlock({ cid, bytes }));
|
|
63
|
+
expect(blocks.transactions.has(tblocks)).toBeTruthy();
|
|
64
|
+
const got = await tblocks.get(cid);
|
|
65
|
+
assert(got, "missing block");
|
|
66
|
+
expect(got.cid).toEqual(cid);
|
|
67
|
+
expect(got.bytes).toEqual(bytes);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
describe("TransactionBlockstore with a completed transaction", function () {
|
|
71
|
+
let blocks;
|
|
72
|
+
let cid;
|
|
73
|
+
let cid2;
|
|
74
|
+
const sthis = ensureSuperThis();
|
|
75
|
+
beforeEach(async () => {
|
|
76
|
+
cid = CID.parse("bafybeia4luuns6dgymy5kau5rm7r4qzrrzg6cglpzpogussprpy42cmcn4");
|
|
77
|
+
cid2 = CID.parse("bafybeibgouhn5ktecpjuovt52zamzvm4dlve5ak7x6d5smms3itkhplnhm");
|
|
78
|
+
blocks = new BaseBlockstoreImpl(simpleBlockOpts(sthis));
|
|
79
|
+
await blocks.transaction(async (tblocks) => {
|
|
80
|
+
await tblocks.put(await anyBlock2FPBlock({ cid, bytes: to_uint8("value") }));
|
|
81
|
+
await tblocks.put(await anyBlock2FPBlock({ cid, bytes: to_uint8("value") }));
|
|
82
|
+
return { head: [] };
|
|
83
|
+
});
|
|
84
|
+
await blocks.transaction(async (tblocks) => {
|
|
85
|
+
await tblocks.put(await anyBlock2FPBlock({ cid, bytes: to_uint8("value") }));
|
|
86
|
+
await tblocks.put(await anyBlock2FPBlock({ cid: cid2, bytes: to_uint8("value2") }));
|
|
87
|
+
return { head: [] };
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
it("should have transactions", async () => {
|
|
91
|
+
const ts = blocks.transactions;
|
|
92
|
+
expect(ts.size).toEqual(2);
|
|
93
|
+
});
|
|
94
|
+
it("should get", async () => {
|
|
95
|
+
const value = (await blocks.get(cid));
|
|
96
|
+
expect(value.cid).toEqual(cid);
|
|
97
|
+
expect(value.bytes.toString()).toEqual(to_uint8("value").toString());
|
|
98
|
+
const value2 = (await blocks.get(cid2));
|
|
99
|
+
expect(value2.bytes.toString()).toEqual(to_uint8("value2").toString());
|
|
100
|
+
});
|
|
101
|
+
it("should yield entries", async () => {
|
|
102
|
+
const blz = [];
|
|
103
|
+
for await (const blk of blocks.entries()) {
|
|
104
|
+
blz.push(blk);
|
|
105
|
+
}
|
|
106
|
+
expect(blz.length).toEqual(2);
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
//# sourceMappingURL=transaction.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.test.js","sourceRoot":"","sources":["transaction.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { CID } from "multiformats";
|
|
2
|
+
import { simpleBlockOpts } from "../helpers.js";
|
|
3
|
+
import { to_uint8 } from "@adviser/cement";
|
|
4
|
+
import { anyBlock2FPBlock, BaseBlockstoreImpl, CarTransactionImpl, EncryptedBlockstore } from "@fireproof/core-blockstore";
|
|
5
|
+
import { ensureSuperThis } from "@fireproof/core-runtime";
|
|
6
|
+
import { BaseBlockstore, CarTransaction } from "@fireproof/core-types-base";
|
|
7
|
+
import { describe, beforeEach, it, expect, assert } from "vitest";
|
|
8
|
+
import { AnyAnyLink, AnyBlock, AnyLink } from "@fireproof/core-types-blockstore";
|
|
9
|
+
|
|
10
|
+
describe("Fresh TransactionBlockstore", function () {
|
|
11
|
+
let blocks: BaseBlockstore;
|
|
12
|
+
const sthis = ensureSuperThis();
|
|
13
|
+
beforeEach(async () => {
|
|
14
|
+
blocks = new BaseBlockstoreImpl(simpleBlockOpts(sthis));
|
|
15
|
+
await blocks.ready();
|
|
16
|
+
});
|
|
17
|
+
// it("should not have a name", function () {
|
|
18
|
+
// expect(blocks.name).toBeFalsy();
|
|
19
|
+
// });
|
|
20
|
+
// it("should not have a loader", function () {
|
|
21
|
+
// expect(blocks.loader).toBeFalsy();
|
|
22
|
+
// });
|
|
23
|
+
it("should not put", async () => {
|
|
24
|
+
const value = sthis.txt.encode("value");
|
|
25
|
+
const e = await blocks.put(await anyBlock2FPBlock({ cid: "key" as unknown as AnyLink, bytes: value })).catch((e) => e);
|
|
26
|
+
expect(e.message).toMatch(/transaction/g);
|
|
27
|
+
});
|
|
28
|
+
it("should yield a transaction", async () => {
|
|
29
|
+
const txR = await blocks.transaction(async (tblocks) => {
|
|
30
|
+
expect(tblocks).toBeTruthy();
|
|
31
|
+
expect(tblocks instanceof CarTransactionImpl).toBeTruthy();
|
|
32
|
+
return { head: [] };
|
|
33
|
+
});
|
|
34
|
+
expect(txR).toBeTruthy();
|
|
35
|
+
expect(txR.t).toBeTruthy();
|
|
36
|
+
expect(txR.meta).toEqual({ head: [] });
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
describe("TransactionBlockstore with name", function () {
|
|
41
|
+
let blocks: EncryptedBlockstore;
|
|
42
|
+
const sthis = ensureSuperThis();
|
|
43
|
+
beforeEach(async () => {
|
|
44
|
+
blocks = new EncryptedBlockstore(sthis, simpleBlockOpts(sthis));
|
|
45
|
+
await blocks.ready();
|
|
46
|
+
});
|
|
47
|
+
// it("should have a name", function () {
|
|
48
|
+
// expect(blocks.name).toEqual("test");
|
|
49
|
+
// });
|
|
50
|
+
it("should have a loader", function () {
|
|
51
|
+
expect(blocks.loader).toBeTruthy();
|
|
52
|
+
});
|
|
53
|
+
it("should get from loader", async () => {
|
|
54
|
+
const bytes = sthis.txt.encode("bytes");
|
|
55
|
+
expect(blocks.loader).toBeTruthy();
|
|
56
|
+
blocks.loader.getBlock = async (cid) => {
|
|
57
|
+
return anyBlock2FPBlock({ cid, bytes });
|
|
58
|
+
};
|
|
59
|
+
const value = await blocks.get("key" as unknown as AnyAnyLink);
|
|
60
|
+
expect(value).toEqual({ cid: "key" as unknown as AnyAnyLink, bytes });
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
describe("A transaction", function () {
|
|
65
|
+
let tblocks: CarTransaction;
|
|
66
|
+
let blocks: EncryptedBlockstore;
|
|
67
|
+
const sthis = ensureSuperThis();
|
|
68
|
+
beforeEach(async () => {
|
|
69
|
+
blocks = new EncryptedBlockstore(sthis, simpleBlockOpts(sthis, "test"));
|
|
70
|
+
tblocks = new CarTransactionImpl(blocks);
|
|
71
|
+
blocks.transactions.add(tblocks);
|
|
72
|
+
});
|
|
73
|
+
it("should put and get", async () => {
|
|
74
|
+
const cid = CID.parse("bafybeia4luuns6dgymy5kau5rm7r4qzrrzg6cglpzpogussprpy42cmcn4");
|
|
75
|
+
const bytes = sthis.txt.encode("bytes");
|
|
76
|
+
await tblocks.put(await anyBlock2FPBlock({ cid, bytes }));
|
|
77
|
+
expect(blocks.transactions.has(tblocks)).toBeTruthy();
|
|
78
|
+
const got = await tblocks.get(cid);
|
|
79
|
+
assert(got, "missing block");
|
|
80
|
+
expect(got.cid).toEqual(cid);
|
|
81
|
+
expect(got.bytes).toEqual(bytes);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
// function asUInt8Array(str: string, sthis: SuperThis) {
|
|
86
|
+
// return sthis.txt.encode(str);
|
|
87
|
+
// }
|
|
88
|
+
|
|
89
|
+
describe("TransactionBlockstore with a completed transaction", function () {
|
|
90
|
+
let blocks: BaseBlockstore;
|
|
91
|
+
let cid: CID;
|
|
92
|
+
let cid2: CID;
|
|
93
|
+
const sthis = ensureSuperThis();
|
|
94
|
+
|
|
95
|
+
beforeEach(async () => {
|
|
96
|
+
cid = CID.parse("bafybeia4luuns6dgymy5kau5rm7r4qzrrzg6cglpzpogussprpy42cmcn4");
|
|
97
|
+
cid2 = CID.parse("bafybeibgouhn5ktecpjuovt52zamzvm4dlve5ak7x6d5smms3itkhplnhm");
|
|
98
|
+
|
|
99
|
+
blocks = new BaseBlockstoreImpl(simpleBlockOpts(sthis));
|
|
100
|
+
await blocks.transaction(async (tblocks) => {
|
|
101
|
+
await tblocks.put(await anyBlock2FPBlock({ cid, bytes: to_uint8("value") }));
|
|
102
|
+
await tblocks.put(await anyBlock2FPBlock({ cid, bytes: to_uint8("value") }));
|
|
103
|
+
return { head: [] };
|
|
104
|
+
});
|
|
105
|
+
await blocks.transaction(async (tblocks) => {
|
|
106
|
+
await tblocks.put(await anyBlock2FPBlock({ cid, bytes: to_uint8("value") }));
|
|
107
|
+
await tblocks.put(await anyBlock2FPBlock({ cid: cid2, bytes: to_uint8("value2") }));
|
|
108
|
+
return { head: [] };
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
it("should have transactions", async () => {
|
|
112
|
+
const ts = blocks.transactions;
|
|
113
|
+
expect(ts.size).toEqual(2);
|
|
114
|
+
});
|
|
115
|
+
it("should get", async () => {
|
|
116
|
+
const value = (await blocks.get(cid)) as AnyBlock;
|
|
117
|
+
expect(value.cid).toEqual(cid);
|
|
118
|
+
expect(value.bytes.toString()).toEqual(to_uint8("value").toString());
|
|
119
|
+
|
|
120
|
+
const value2 = (await blocks.get(cid2)) as AnyBlock;
|
|
121
|
+
expect(value2.bytes.toString()).toEqual(to_uint8("value2").toString());
|
|
122
|
+
});
|
|
123
|
+
it("should yield entries", async () => {
|
|
124
|
+
const blz = [];
|
|
125
|
+
for await (const blk of blocks.entries()) {
|
|
126
|
+
blz.push(blk);
|
|
127
|
+
}
|
|
128
|
+
expect(blz.length).toEqual(2);
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
// test compact
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|