snapshot of https://github.com/ueberdosis/hocuspocus.git @ cf3cfa355b4d3bb61c6b6c80071f71783e32470e (2026-09-15)
Some checks failed
build / lint (22) (push) Failing after 17s
build / test (22) (push) Failing after 8s
build / lint (23) (push) Failing after 2s
build / build (22) (push) Has been skipped
build / build (23) (push) Has been skipped
build / test (23) (push) Failing after 4s
docsearch / docsearch (push) Failing after 1s

This commit is contained in:
upstream-mirror
2026-09-15 17:21:35 +05:00
commit e0c588ca1c
265 changed files with 55259 additions and 0 deletions

View File

@@ -0,0 +1,60 @@
import { Redis } from "@hocuspocus/extension-redis";
import test from "ava";
import {
newHocuspocus,
newHocuspocusProvider,
redisConnectionSettings,
} from "../utils/index.ts";
test("syncs updates between servers and clients", async (t) => {
await new Promise(async (resolve) => {
let resolved = false;
const server = await newHocuspocus(t, {
extensions: [
new Redis({
...redisConnectionSettings,
identifier: `server${crypto.randomUUID()}`,
}),
],
});
const anotherServer = await newHocuspocus(t, {
extensions: [
new Redis({
...redisConnectionSettings,
identifier: `anotherServer${crypto.randomUUID()}`,
}),
],
});
// Once we’re setup make an edit on anotherProvider. To get to the provider it will need
// to pass through Redis:
// provider -> server -> Redis -> anotherServer -> anotherProvider
const provider = newHocuspocusProvider(t, server, {
onSynced() {
provider.document.getArray("foo").insert(0, ["bar"]);
},
});
// Once the initial data is synced, wait for an additional update to check
// if both documents have the same content.
const anotherProvider = newHocuspocusProvider(t, anotherServer, {
onSynced() {
provider.on("message", () => {
if (resolved) return;
resolved = true;
setTimeout(() => {
t.is(
provider.document.getArray("foo").get(0),
anotherProvider.document.getArray("foo").get(0),
);
resolve("done");
}, 200);
});
},
});
});
});