import ClipboardRepository from '../../../src/content/repositories/ClipboardRepository'; import { SettingRepositoryImpl } from '../../../src/content/repositories/SettingRepository'; import ClipboardUseCase from '../../../src/content/usecases/ClipboardUseCase'; import OperationClient from '../../../src/content/client/OperationClient'; import ConsoleClient from '../../../src/content/client/ConsoleClient'; import * as sinon from 'sinon'; import { expect } from 'chai'; import {Operation} from "../../../src/shared/operations"; describe('ClipboardUseCase', () => { let clipboardRepository: ClipboardRepository; let operationClient: OperationClient; let consoleClient: ConsoleClient; let sut: ClipboardUseCase; beforeEach(() => { clipboardRepository = new class implements ClipboardRepository { read(): string { return ""; } write(_text: string) {} }; operationClient = new class implements OperationClient { execBackgroundOp(_repeat: number, _op: Operation): Promise { return Promise.resolve() } internalOpenUrl(_url: string, _newTab?: boolean, _background?: boolean): Promise { return Promise.resolve() } }; consoleClient = new class implements ConsoleClient { error(_text: string): Promise { return Promise.resolve() } info(_text: string): Promise { return Promise.resolve() } }; sut = new ClipboardUseCase( clipboardRepository, new SettingRepositoryImpl(), consoleClient, operationClient, ); }); describe('#yankCurrentURL', () => { it('yanks current url', async () => { const href = window.location.href; const mockRepository = sinon.mock(clipboardRepository); mockRepository.expects('write').withArgs(href); const mockConsoleClient = sinon.mock(consoleClient); mockConsoleClient.expects('info').withArgs('Yanked ' + href); const yanked = await sut.yankCurrentURL(); expect(yanked).to.equal(href); mockRepository.verify(); mockConsoleClient.verify(); }); }); describe('#openOrSearch', () => { it('opens url from the clipboard', async () => { const url = 'https://github.com/ueokande/vim-vixen' sinon.stub(clipboardRepository, 'read').returns(url); const mockOperationClient = sinon.mock(operationClient); mockOperationClient.expects('internalOpenUrl').withArgs(url, true); await sut.openOrSearch(true); mockOperationClient.verify(); }); it('opens search results from the clipboard', async () => { const url = 'https://google.com/search?q=banana'; sinon.stub(clipboardRepository, 'read').returns('banana'); const mockOperationClient = sinon.mock(operationClient); mockOperationClient.expects('internalOpenUrl').withArgs(url, true); await sut.openOrSearch(true); mockOperationClient.verify(); }); }); });