| 22 | const testLayer = (layer: Layer.Layer<Persistence.BackingPersistence, never, SqlClient.SqlClient>) => |
| 23 | layer.pipe(Layer.provideMerge(ClientLayer)) |
| 24 | |
| 25 | const suite = (name: string, layer: Layer.Layer<Persistence.BackingPersistence, never, SqlClient.SqlClient>) => |
| 26 | it.layer(testLayer(layer))(`Persistence (${name})`, (it) => { |
| 27 | it.effect("set + get", () => |
| 28 | Effect.gen(function*() { |
| 29 | const persistence = yield* Persistence.BackingPersistence |
| 30 | const store = yield* persistence.make("test_store") |
| 31 | yield* store.set("key1", { name: "Alice" }, undefined) |
| 32 | const value = yield* store.get("key1") |
| 33 | expect(value).toEqual({ name: "Alice" }) |
| 34 | |
| 35 | // test upsert |
| 36 | yield* store.set("key1", { name: "Alice" }, undefined) |
| 37 | })) |
| 38 | |
| 39 | it.effect("setMany + getMany", () => |
| 40 | Effect.gen(function*() { |
| 41 | const persistence = yield* Persistence.BackingPersistence |
| 42 | const store = yield* persistence.make("test_store_2") |
| 43 | yield* store.setMany([ |
| 44 | ["key1", { name: "Alice" }, undefined], |
| 45 | ["key2", { name: "Bob" }, undefined], |
| 46 | ["key3", { name: "Charlie" }, undefined] |
| 47 | ]) |
| 48 | const values = yield* store.getMany(["key1", "key2", "key3", "key4"]) |
| 49 | expect(values).toEqual([ |
| 50 | { name: "Alice" }, |
| 51 | { name: "Bob" }, |
| 52 | { name: "Charlie" }, |
| 53 | undefined |
| 54 | ]) |
| 55 | })) |
| 56 | |
| 57 | it.effect("getMany with duplicate keys", () => |
| 58 | Effect.gen(function*() { |
| 59 | const persistence = yield* Persistence.BackingPersistence |
| 60 | const store = yield* persistence.make("test_store_duplicate_keys") |
| 61 | yield* store.set("key", { value: 1 }, undefined) |
| 62 | |
| 63 | expect(yield* store.getMany(["key", "key"])).toEqual([{ value: 1 }, { value: 1 }]) |
| 64 | })) |
| 65 | |
| 66 | it.effect("remove", () => |
| 67 | Effect.gen(function*() { |
| 68 | const persistence = yield* Persistence.BackingPersistence |
| 69 | const store = yield* persistence.make("test_store_2") |
| 70 | yield* store.setMany([ |
| 71 | ["key1", { name: "Alice" }, undefined], |
| 72 | ["key2", { name: "Bob" }, undefined], |
| 73 | ["key3", { name: "Charlie" }, undefined] |
| 74 | ]) |
| 75 | yield* store.remove("key2") |
| 76 | const valuesAfter = yield* store.getMany(["key1", "key2", "key3"]) |
| 77 | expect(valuesAfter).toEqual([{ name: "Alice" }, undefined, { name: "Charlie" }]) |
| 78 | })) |
| 79 | |
| 80 | it.effect("expires", () => |
| 81 | Effect.gen(function*() { |