mirror of
https://github.com/koloml/philomena-tagging-assistant.git
synced 2026-05-09 15:12:21 +00:00
76 lines
2.2 KiB
TypeScript
76 lines
2.2 KiB
TypeScript
import { randomString } from "$tests/utils";
|
|
import { initializeLinksReplacement } from "$lib/popup-links";
|
|
|
|
describe('popup-links', () => {
|
|
let expectedPath = '';
|
|
let testLink: HTMLAnchorElement = document.createElement('a');
|
|
let disconnectCallback: (() => void) | null = null;
|
|
|
|
function fireEventAt(target: EventTarget, eventName: string) {
|
|
target.dispatchEvent(new Event(eventName, {bubbles: true}));
|
|
}
|
|
|
|
beforeEach(() => {
|
|
expectedPath = `/test/${randomString()}`;
|
|
testLink.href = expectedPath;
|
|
document.body.append(testLink);
|
|
});
|
|
|
|
afterEach(() => {
|
|
if (disconnectCallback) {
|
|
disconnectCallback();
|
|
disconnectCallback = null;
|
|
}
|
|
});
|
|
|
|
it('should replace link on any mouse button down', () => {
|
|
disconnectCallback = initializeLinksReplacement();
|
|
fireEventAt(testLink, "mousedown");
|
|
|
|
const resultUrl = new URL(testLink.href);
|
|
|
|
expect(resultUrl.searchParams.get('path')).toBe(expectedPath);
|
|
});
|
|
|
|
it('should replace link when link is pressed by keyboard or clicked', () => {
|
|
disconnectCallback = initializeLinksReplacement();
|
|
fireEventAt(testLink, "click");
|
|
|
|
const resultUrl = new URL(testLink.href);
|
|
|
|
expect(resultUrl.searchParams.get('path')).toBe(expectedPath);
|
|
});
|
|
|
|
it('should not replace already replaced links', () => {
|
|
disconnectCallback = initializeLinksReplacement();
|
|
fireEventAt(testLink, "click");
|
|
const hrefAfterFirstClick = testLink.href;
|
|
|
|
fireEventAt(testLink, "click");
|
|
const hrefAfterSecondClick = testLink.href;
|
|
|
|
expect(hrefAfterFirstClick).toBe(hrefAfterSecondClick);
|
|
});
|
|
|
|
it('should stop replacing links once disconnect is called', () => {
|
|
const hrefBefore = testLink.href;
|
|
|
|
disconnectCallback = initializeLinksReplacement();
|
|
disconnectCallback();
|
|
fireEventAt(testLink, "mousedown");
|
|
fireEventAt(testLink, "click");
|
|
|
|
expect(hrefBefore).toBe(testLink.href);
|
|
});
|
|
|
|
it('should not touch links with different origin', () => {
|
|
testLink.href = "https://external.example.com/" + randomString() + "/";
|
|
|
|
const hrefBefore = testLink.href;
|
|
disconnectCallback = initializeLinksReplacement();
|
|
fireEventAt(testLink, "click");
|
|
|
|
expect(testLink.href).toBe(hrefBefore);
|
|
});
|
|
});
|