mirror of
https://github.com/koloml/furbooru-tagging-assistant.git
synced 2025-12-23 14:52:59 +00:00
Added tests for the link replacement logic
This commit is contained in:
75
tests/lib/popup-links.spec.ts
Normal file
75
tests/lib/popup-links.spec.ts
Normal file
@@ -0,0 +1,75 @@
|
||||
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);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user