Skip to content

Commit

Permalink
chore: clean up
Browse files Browse the repository at this point in the history
Signed-off-by: Sacha Froment <[email protected]>
  • Loading branch information
sfroment committed Jan 13, 2025
1 parent 4f8e7db commit bad0387
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 43 deletions.
54 changes: 28 additions & 26 deletions examples/grid/e2e/grid.spec.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,25 @@
import { type Page, expect, test } from "@playwright/test";

const peersSelector = "#peers";
const peerIdSelector = "#peerId";
const peerIdSelector = "#peerIdExpanded";
const DRPIdInputSelector = "#gridInput";
const joinGridButtonSelector = "#joinGrid";
const objectPeersSelector = "#objectPeers";

async function getGlowingPeer(page: Page) {
const divs = await page.$$("div");
const glowingPeer = [];
for (const div of divs) {
const style = await div.getAttribute("style");
if (!style) continue;

const matchPeerID = style.match(/glow-([a-zA-Z0-9]+)/);
if (!matchPeerID) continue;

const matchLeft = style.match(/left: ([0-9]+)px/);
const matchTop = style.match(/top: ([0-9]+)px/);
if (!matchLeft || !matchTop) continue;

glowingPeer.push({
peerID: matchPeerID[1],
left: Number.parseInt(matchLeft[1]),
Expand All @@ -27,54 +31,52 @@ async function getGlowingPeer(page: Page) {

test("should work with vite server", async ({ browser }) => {
const page1 = await browser.newPage();
console.log("browser is ", browser.browserType().name(), browser.version());
await page1.goto("/");
await expect(page1).toHaveTitle(/DRP - Grid/);

const page2 = await browser.newPage();
page1.on("console", (msg) => console.log("page1", msg.text()));
page2.on("console", (msg) => console.log("page2", msg.text()));

await page1.goto("/");
await page2.goto("/");

await expect(page1).toHaveTitle(/DRP - Grid/);
await expect(page2).toHaveTitle(/DRP - Grid/);

await expect(page1.locator(peerIdSelector)).not.toBeEmpty({ timeout: 10000 });
await expect(page2.locator(peerIdSelector)).not.toBeEmpty({ timeout: 10000 });

// now we have to wait for the browser node to
const peerID1 = await (await page1.$(peerIdSelector))?.textContent();
const peerID1 = (
(await (await page1.$(peerIdSelector))?.textContent()) || ""
).trim();
if (!peerID1) throw new Error("peerID1 is not defined");
const peerID2 = await (await page2.$(peerIdSelector))?.textContent();
const peerID2 = (
(await (await page2.$(peerIdSelector))?.textContent()) || ""
).trim();
if (!peerID2) throw new Error("peerID2 is not defined");

const peers1Locator = page1.locator(peersSelector);
const peers2Locator = page2.locator(peersSelector);

await expect(peers1Locator).toContainText(peerID2, { timeout: 40000 });
await expect(peers2Locator).toContainText(peerID1, { timeout: 40000 });
await expect(peers1Locator).toContainText(peerID2, { timeout: 10000 });
await expect(peers2Locator).toContainText(peerID1, { timeout: 10000 });

const drpId = `test-drp-id-${Math.random().toString(36).substring(2, 15)}`;
await page1.fill(DRPIdInputSelector, drpId);
await page1.click(joinGridButtonSelector);
await page2.fill(DRPIdInputSelector, drpId);
await page2.click(joinGridButtonSelector);

const objectPeers1Locator = page1.locator(objectPeersSelector);
const objectPeers2Locator = page2.locator(objectPeersSelector);

await expect(objectPeers1Locator).toContainText(peerID2, { timeout: 10000 });
await expect(objectPeers2Locator).toContainText(peerID1, { timeout: 10000 });

await expect(page1.locator(DRPIdInputSelector)).toHaveValue(drpId);
await expect(page2.locator(DRPIdInputSelector)).toHaveValue(drpId);

const glowingPeer = await getGlowingPeer(page1);
// check the last 3 char of the peerId against peerID2 or peerID1
const lastThreeChar0 = glowingPeer[0].peerID.slice(-3);
const lastThreeChar1 = glowingPeer[1].peerID.slice(-3);
if (
lastThreeChar0 !== peerID2.slice(-3) &&
lastThreeChar0 !== peerID1.slice(-3)
) {
throw new Error("glowingPeer is not correct");
}
if (
lastThreeChar1 !== peerID2.slice(-3) &&
lastThreeChar1 !== peerID1.slice(-3)
) {
throw new Error("glowingPeer is not correct");
}
expect(glowingPeer).toHaveLength(2);
expect(glowingPeer.find((peer) => peer.peerID === peerID1)).toBeDefined();
expect(glowingPeer.find((peer) => peer.peerID === peerID2)).toBeDefined();

await page1.keyboard.press("w");
await page2.keyboard.press("s");
Expand Down
29 changes: 13 additions & 16 deletions examples/grid/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,6 @@ const renderDiscoveryPeers = () => {
let isPeersOpen = false;

const renderPeers = () => {
console.log("renderPeers", peers);
renderClickablePeerList(peers, isPeersOpen, "peers", () => {
isPeersOpen = !isPeersOpen;
});
Expand Down Expand Up @@ -289,6 +288,8 @@ async function moveUser(direction: string) {
}

async function createConnectHandlers() {
if (drpObject) objectPeers = node.networkNode.getGroupPeers(drpObject.id);

node.addCustomGroupMessageHandler(drpObject.id, () => {
if (drpObject) objectPeers = node.networkNode.getGroupPeers(drpObject.id);
render();
Expand All @@ -303,31 +304,27 @@ async function main() {
await node.start();
render();

node.addNodeEventListener("peer:connect", (e) => {
node.addNodeEventListener("peer:connect", () => {
peers = node.networkNode.getAllPeers();
discoveryPeers = node.networkNode.getGroupPeers("drp::discovery");
console.log("peer:connect", e.detail.toString());
render();
});

node.addPubsubEventListener("subscription-change", (e) => {
node.addNodeEventListener("peer:disconnect", () => {
peers = node.networkNode.getAllPeers();
discoveryPeers = node.networkNode.getGroupPeers("drp::discovery");
console.log(
"subscription-change",
e.detail.peerId.toString(),
JSON.stringify(e.detail.subscriptions),
);
render();
});

//node.addCustomGroupMessageHandler("", (e) => {
// console.log("update peers", node.networkNode.getAllPeers());
// console.log("event", e);
// peers = node.networkNode.getAllPeers();
// discoveryPeers = node.networkNode.getGroupPeers("drp::discovery");
// render();
//});
node.addPubsubEventListener("subscription-change", (e) => {
peers = node.networkNode.getAllPeers();
discoveryPeers = node.networkNode.getGroupPeers("drp::discovery");
if (e.detail.subscriptions.find((s) => s.topic === drpObject?.id)) {
objectPeers = node.networkNode.getGroupPeers(drpObject.id);
}

render();
});

const button_create = <HTMLButtonElement>(
document.getElementById("createGrid")
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"cli": "tsx ./packages/node/src/run.ts",
"coverage": "pnpm exec ts-node scripts/coverage.ts",
"docs": "typedoc",
"e2e-test": "find . -path '*/node_modules/*' -type f -exec sed -i \"s/const peerConnection = new RTCPeerConnection(rtcConfiguration);/console.log('initiating connection', JSON.stringify(rtcConfiguration));\\nconst peerConnection = new RTCPeerConnection(rtcConfiguration);/g\" {} + && pnpm exec playwright test",
"e2e-test": "pnpm exec playwright test",
"postinstall": "pnpm build:packages",
"proto-gen": "pnpm proto-gen:object && pnpm proto-gen:network",
"proto-gen:network": "buf generate packages/network/src/proto -o packages/network/src/proto",
Expand Down

0 comments on commit bad0387

Please sign in to comment.