Browse Source

test(e2e): add some tests for common `Peer` errors (#1123)

Jonas Gloning 1 year ago
parent
commit
c300d1945c
5 changed files with 147 additions and 0 deletions
  1. 34 0
      e2e/peer/disconnected.html
  2. 36 0
      e2e/peer/id-taken.html
  3. 26 0
      e2e/peer/peer.page.ts
  4. 20 0
      e2e/peer/peer.spec.ts
  5. 31 0
      e2e/peer/server-unavailable.html

+ 34 - 0
e2e/peer/disconnected.html

@@ -0,0 +1,34 @@
+<!doctype html>
+<html lang="en">
+	<head>
+		<meta charset="UTF-8" />
+		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+		<title></title>
+		<link rel="stylesheet" href="../style.css" />
+	</head>
+	<body>
+		<h1>ID-TAKEN</h1>
+		<div id="messages"></div>
+		<div id="error-message"></div>
+		<script src="/dist/peerjs.js"></script>
+		<script type="application/javascript">
+			/**
+			 * @type {typeof import("../..").Peer}
+			 */
+			const Peer = window.peerjs.Peer;
+
+			const messages = document.getElementById("messages");
+
+			const peer = new Peer();
+			peer
+				.once(
+					"error",
+					(error) => void (messages.textContent = JSON.stringify(error)),
+				)
+				.once("open", (id) => {
+					peer.disconnect();
+					peer.connect("otherid");
+				});
+		</script>
+	</body>
+</html>

+ 36 - 0
e2e/peer/id-taken.html

@@ -0,0 +1,36 @@
+<!doctype html>
+<html lang="en">
+	<head>
+		<meta charset="UTF-8" />
+		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+		<title></title>
+		<link rel="stylesheet" href="../style.css" />
+	</head>
+	<body>
+		<h1>ID-TAKEN</h1>
+		<div id="messages"></div>
+		<div id="error-message"></div>
+		<script src="/dist/peerjs.js"></script>
+		<script type="application/javascript">
+			/**
+			 * @type {typeof import("../..").Peer}
+			 */
+			const Peer = window.peerjs.Peer;
+
+			const messages = document.getElementById("messages");
+			const errorMessage = document.getElementById("error-message");
+
+			new Peer()
+				.once(
+					"error",
+					(error) => void (errorMessage.textContent = JSON.stringify(error)),
+				)
+				.once("open", (id) =>
+					new Peer(id).once(
+						"error",
+						(error) => void (messages.textContent = JSON.stringify(error)),
+					),
+				);
+		</script>
+	</body>
+</html>

+ 26 - 0
e2e/peer/peer.page.ts

@@ -0,0 +1,26 @@
+import { browser, $ } from "@wdio/globals";
+class PeerPage {
+	get messages() {
+		return $("div[id='messages']");
+	}
+
+	get errorMessage() {
+		return $("div[id='error-message']");
+	}
+
+	waitForMessage(right: string) {
+		return browser.waitUntil(
+			async () => {
+				const messages = await this.messages.getText();
+				return messages.startsWith(right);
+			},
+			{ timeoutMsg: `Expected message to start with ${right}`, timeout: 10000 },
+		);
+	}
+
+	async open(test: string) {
+		await browser.url(`/e2e/peer/${test}.html`);
+	}
+}
+
+export default new PeerPage();

+ 20 - 0
e2e/peer/peer.spec.ts

@@ -0,0 +1,20 @@
+import P from "./peer.page.js";
+import { browser, expect } from "@wdio/globals";
+
+describe("Peer", () => {
+	it("should emit an error, when the ID is already taken", async () => {
+		await P.open("id-taken");
+		await P.waitForMessage('{"type":"unavailable-id"}');
+		expect(await P.errorMessage.getText()).toBe("");
+	});
+	it("should emit an error, when the server is unavailable", async () => {
+		await P.open("server-unavailable");
+		await P.waitForMessage('{"type":"server-error"}');
+		expect(await P.errorMessage.getText()).toBe("");
+	});
+	it("should emit an error, when it got disconnected from the server", async () => {
+		await P.open("disconnected");
+		await P.waitForMessage('{"type":"disconnected"}');
+		expect(await P.errorMessage.getText()).toBe("");
+	});
+});

+ 31 - 0
e2e/peer/server-unavailable.html

@@ -0,0 +1,31 @@
+<!doctype html>
+<html lang="en">
+	<head>
+		<meta charset="UTF-8" />
+		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+		<title></title>
+		<link rel="stylesheet" href="../style.css" />
+	</head>
+	<body>
+		<h1>ID-TAKEN</h1>
+		<div id="messages"></div>
+		<div id="error-message"></div>
+		<script src="/dist/peerjs.js"></script>
+		<script type="application/javascript">
+			/**
+			 * @type {typeof import("../..").Peer}
+			 */
+			const Peer = window.peerjs.Peer;
+
+			const messages = document.getElementById("messages");
+			const errorMessage = document.getElementById("error-message");
+
+			new Peer({
+				host: "thisserverwillneverexist.example.com",
+			}).once(
+				"error",
+				(error) => void (messages.textContent = JSON.stringify(error)),
+			);
+		</script>
+	</body>
+</html>