Files

105 lines
3.7 KiB
JavaScript

const test = require("node:test");
const assert = require("node:assert");
const { loadContentScript, wait } = require("./helpers");
test("zero delay still clicks immediately (default behavior preserved)", async () => {
const { window } = loadContentScript({
url: "https://app.plex.tv/web/index.html",
html: `<!DOCTYPE html><html><body><button>Skip Intro</button></body></html>`,
settings: { introDelaySeconds: 0 }
});
await wait(50);
assert.strictEqual(window.__clickedElements.length, 1);
});
test("does not click immediately when a delay is configured, but clicks once it elapses", async () => {
const { window } = loadContentScript({
url: "https://app.plex.tv/web/index.html",
html: `<!DOCTYPE html><html><body><button>Skip Credits</button></body></html>`,
settings: { creditsDelaySeconds: 1 }
});
await wait(50);
assert.strictEqual(window.__clickedElements.length, 0, "should not click before the delay elapses");
await wait(1100);
assert.strictEqual(window.__clickedElements.length, 1, "should click once the delay elapses");
});
test("does not schedule duplicate clicks while a delay is already pending", async () => {
const { window } = loadContentScript({
url: "https://app.plex.tv/web/index.html",
html: `<!DOCTYPE html><html><body><button id="skip">Skip Intro</button></body></html>`,
settings: { introDelaySeconds: 1 }
});
await wait(50);
window.document.body.appendChild(window.document.createElement("div"));
await wait(50);
window.document.body.appendChild(window.document.createElement("div"));
await wait(1200);
assert.strictEqual(window.__clickedElements.length, 1);
});
test("cancels a scheduled click if its toggle is turned off mid-delay", async () => {
const { window, fireStorageChange } = loadContentScript({
url: "https://app.plex.tv/web/index.html",
html: `<!DOCTYPE html><html><body><button>Skip Intro</button></body></html>`,
settings: { introDelaySeconds: 1 }
});
await wait(50);
fireStorageChange({ skipIntro: false });
await wait(1200);
assert.strictEqual(window.__clickedElements.length, 0);
});
test("does not click if the button is removed from the page before the delay elapses", async () => {
const { window } = loadContentScript({
url: "https://app.plex.tv/web/index.html",
html: `<!DOCTYPE html><html><body><button id="skip">Skip Intro</button></body></html>`,
settings: { introDelaySeconds: 1 }
});
await wait(50);
window.document.getElementById("skip").remove();
await wait(1200);
assert.strictEqual(window.__clickedElements.length, 0);
});
test("does not click if the delayed button is hidden before the delay elapses", async () => {
const { window } = loadContentScript({
url: "https://app.plex.tv/web/index.html",
html: `<!DOCTYPE html><html><body><button id="skip">Skip Intro</button></body></html>`,
settings: { introDelaySeconds: 1 }
});
await wait(50);
window.document.getElementById("skip").style.display = "none";
await wait(1200);
assert.strictEqual(window.__clickedElements.length, 0);
});
test("intro and credits delays run independently", async () => {
const { window } = loadContentScript({
url: "https://app.plex.tv/web/index.html",
html: `<!DOCTYPE html><html><body>
<button id="intro">Skip Intro</button>
<button id="credits">Skip Credits</button>
</body></html>`,
settings: { introDelaySeconds: 0, creditsDelaySeconds: 1 }
});
await wait(50);
assert.strictEqual(window.__clickedElements.length, 1, "Skip Intro should click immediately");
assert.strictEqual(window.__clickedElements[0], window.document.getElementById("intro"));
await wait(1100);
assert.strictEqual(window.__clickedElements.length, 2, "Skip Credits should click after its own delay");
});