mirror of
https://github.com/jely2002/youtube-dl-gui.git
synced 2021-11-01 22:46:21 +03:00
feat: automatically fill in copied URL's into the url box (#94)
This commit is contained in:
99
tests/ClipboardWatcher.test.js
Normal file
99
tests/ClipboardWatcher.test.js
Normal file
@@ -0,0 +1,99 @@
|
||||
const ClipboardWatcher = require("../modules/ClipboardWatcher");
|
||||
const { clipboard } = require('electron');
|
||||
|
||||
|
||||
jest.mock('electron', () => ({
|
||||
clipboard: {
|
||||
readText: jest.fn()
|
||||
}
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
jest.useFakeTimers();
|
||||
});
|
||||
|
||||
describe('poll', () => {
|
||||
it('reads the text from the clipboard', () => {
|
||||
clipboard.readText.mockReturnValue("https://i.am.a.url.com");
|
||||
const instance = instanceBuilder(true);
|
||||
const resetMock = jest.spyOn(instance, "resetPlaceholder").mockImplementation(() => {});
|
||||
instance.poll();
|
||||
expect(clipboard.readText).toBeCalledTimes(1);
|
||||
expect(resetMock).toBeCalledTimes(0);
|
||||
});
|
||||
it('resets when it is not a URL', () => {
|
||||
clipboard.readText.mockReturnValue("im not a url");
|
||||
const instance = instanceBuilder(true);
|
||||
const resetMock = jest.spyOn(instance, "resetPlaceholder").mockImplementation(() => {});
|
||||
instance.poll();
|
||||
expect(resetMock).toBeCalledTimes(1);
|
||||
});
|
||||
it('resets when the copied text is null', () => {
|
||||
clipboard.readText.mockReturnValue(null);
|
||||
const instance = instanceBuilder(true);
|
||||
const resetMock = jest.spyOn(instance, "resetPlaceholder").mockImplementation(() => {});
|
||||
instance.poll();
|
||||
expect(resetMock).toBeCalledTimes(1);
|
||||
});
|
||||
it('sends the URL to renderer if it is one', () => {
|
||||
clipboard.readText.mockReturnValue("https://i.am.a.url.com");
|
||||
const instance = instanceBuilder(true);
|
||||
const resetMock = jest.spyOn(instance, "resetPlaceholder").mockImplementation(() => {});
|
||||
instance.poll();
|
||||
expect(instance.win.webContents.send).toBeCalledWith("updateLinkPlaceholder", {text: "https://i.am.a.url.com", copied: true})
|
||||
expect(instance.win.webContents.send).toBeCalledTimes(1);
|
||||
expect(resetMock).toBeCalledTimes(0);
|
||||
});
|
||||
it('doesnt poll when it is disabled in settings', () => {
|
||||
clipboard.readText.mockReturnValue("https://i.am.a.url.com");
|
||||
const instance = instanceBuilder(false);
|
||||
const resetMock = jest.spyOn(instance, "resetPlaceholder").mockImplementation(() => {});
|
||||
instance.poll();
|
||||
expect(clipboard.readText).toBeCalledTimes(0);
|
||||
expect(resetMock).toBeCalledTimes(0);
|
||||
expect(instance.win.webContents.send).toBeCalledTimes(0);
|
||||
});
|
||||
it('does nothing when the previous copied text matches the new one', () => {
|
||||
clipboard.readText.mockReturnValue("https://i.am.a.url.com");
|
||||
const instance = instanceBuilder(true);
|
||||
const resetMock = jest.spyOn(instance, "resetPlaceholder").mockImplementation(() => {});
|
||||
instance.poll();
|
||||
instance.poll();
|
||||
expect(clipboard.readText).toBeCalledTimes(2);
|
||||
expect(resetMock).toBeCalledTimes(0);
|
||||
expect(instance.win.webContents.send).toBeCalledTimes(1);
|
||||
});
|
||||
});
|
||||
|
||||
describe('resetPlaceholder', () => {
|
||||
it('sends the standard placeholder to renderer', () => {
|
||||
const instance = instanceBuilder(true);
|
||||
instance.resetPlaceholder();
|
||||
expect(instance.win.webContents.send).toBeCalledTimes(1);
|
||||
expect(instance.win.webContents.send.mock.calls[0][1].copied).toBeFalsy();
|
||||
});
|
||||
});
|
||||
|
||||
describe('startPolling', () => {
|
||||
it('Polls one time', () => {
|
||||
const instance = instanceBuilder(true);
|
||||
const pollMock = jest.spyOn(instance, "poll").mockImplementation(() => {});
|
||||
instance.startPolling()
|
||||
expect(pollMock).toBeCalledTimes(1);
|
||||
});
|
||||
it('Starts a polling loop', () => {
|
||||
const loops = 5;
|
||||
const instance = instanceBuilder(true);
|
||||
const pollMock = jest.spyOn(instance, "poll").mockImplementation(() => {});
|
||||
instance.startPolling()
|
||||
jest.advanceTimersByTime(loops * 1000);
|
||||
expect(pollMock).toBeCalledTimes(loops + 1);
|
||||
});
|
||||
});
|
||||
|
||||
function instanceBuilder(enabled) {
|
||||
const env = {settings: {autoFillClipboard: enabled}};
|
||||
const win = {webContents: {send: jest.fn()}};
|
||||
return new ClipboardWatcher(win, env);
|
||||
}
|
||||
@@ -2,8 +2,8 @@ const fs = require('fs').promises;
|
||||
const os = require("os");
|
||||
const Settings = require('../modules/persistence/Settings');
|
||||
const env = {version: "2.0.0-test1"};
|
||||
const defaultSettingsInstance = new Settings({settings: "tests/test-settings.json"}, env, "none", "", true, false, true, "%(title).200s-(%(height)sp%(fps).0d).%(ext)s", "%(title).200s-(%(height)sp%(fps).0d).%(ext)s", "click", "49", 8, true, true, "C:\\Users\\user\\cookies.txt", false, true, false, false, true, "dark");
|
||||
const defaultSettings = "{\"outputFormat\":\"none\",\"proxy\":\"\",\"spoofUserAgent\":true,\"validateCertificate\":false,\"taskList\":true,\"nameFormat\":\"%(title).200s-(%(height)sp%(fps).0d).%(ext)s\",\"nameFormatMode\":\"%(title).200s-(%(height)sp%(fps).0d).%(ext)s\",\"sizeMode\":\"click\",\"splitMode\":\"49\",\"maxConcurrent\":8,\"defaultConcurrent\":8,\"updateBinary\":true,\"updateApplication\":true,\"statSend\":false,\"downloadMetadata\":true,\"downloadThumbnail\":false,\"keepUnmerged\":false,\"calculateTotalSize\":true,\"theme\":\"dark\",\"version\":\"2.0.0-test1\"}"
|
||||
const defaultSettingsInstance = new Settings({settings: "tests/test-settings.json"}, env, "none", "", true, true, false, true, "%(title).200s-(%(height)sp%(fps).0d).%(ext)s", "%(title).200s-(%(height)sp%(fps).0d).%(ext)s", "click", "49", 8, true, true, "C:\\Users\\user\\cookies.txt", false, true, false, false, true, "dark");
|
||||
const defaultSettings = "{\"outputFormat\":\"none\",\"proxy\":\"\",\"autoFillClipboard\":true,\"spoofUserAgent\":true,\"validateCertificate\":false,\"taskList\":true,\"nameFormat\":\"%(title).200s-(%(height)sp%(fps).0d).%(ext)s\",\"nameFormatMode\":\"%(title).200s-(%(height)sp%(fps).0d).%(ext)s\",\"sizeMode\":\"click\",\"splitMode\":\"49\",\"maxConcurrent\":8,\"defaultConcurrent\":8,\"updateBinary\":true,\"updateApplication\":true,\"statSend\":false,\"downloadMetadata\":true,\"downloadThumbnail\":false,\"keepUnmerged\":false,\"calculateTotalSize\":true,\"theme\":\"dark\",\"version\":\"2.0.0-test1\"}"
|
||||
|
||||
describe('Load settings from file', () => {
|
||||
beforeEach(() => {
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"outputFormat":"none","proxy": "","spoofUserAgent":true,"validateCertificate": false,"taskList":true,"nameFormat":"%(title).200s-(%(height)sp%(fps).0d).%(ext)s","nameFormatMode":"%(title).200s-(%(height)sp%(fps).0d).%(ext)s","sizeMode":"click","splitMode":"49","maxConcurrent":8,"defaultConcurrent":8,"updateBinary":true,"updateApplication":true,"cookiePath":"C:\\Users\\user\\cookies.txt","statSend":false,"downloadMetadata":true,"downloadThumbnail":false,"keepUnmerged":false,"calculateTotalSize":true,"theme": "dark","version":"2.0.0-test1"}
|
||||
{"outputFormat":"none","proxy": "","autoFillClipboard":true,"spoofUserAgent":true,"validateCertificate": false,"taskList":true,"nameFormat":"%(title).200s-(%(height)sp%(fps).0d).%(ext)s","nameFormatMode":"%(title).200s-(%(height)sp%(fps).0d).%(ext)s","sizeMode":"click","splitMode":"49","maxConcurrent":8,"defaultConcurrent":8,"updateBinary":true,"updateApplication":true,"cookiePath":"C:\\Users\\user\\cookies.txt","statSend":false,"downloadMetadata":true,"downloadThumbnail":false,"keepUnmerged":false,"calculateTotalSize":true,"theme": "dark","version":"2.0.0-test1"}
|
||||
|
||||
Reference in New Issue
Block a user