diff options
Diffstat (limited to 'test/background/usecases')
-rw-r--r-- | test/background/usecases/FindUseCase.test.ts | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/test/background/usecases/FindUseCase.test.ts b/test/background/usecases/FindUseCase.test.ts new file mode 100644 index 0000000..eef211b --- /dev/null +++ b/test/background/usecases/FindUseCase.test.ts @@ -0,0 +1,121 @@ +import "reflect-metadata"; +import sinon from "sinon"; +import FindClient from "../../../src/background/clients/FindClient"; +import StartFindUseCase from "../../../src/background/usecases/StartFindUseCase"; +import FindRepository from "../../../src/background/repositories/FindRepository"; +import { expect } from "chai"; +import MockFindClient from "../mock/MockFindClient"; +import MockFindRepository from "../mock/MockFindRepository"; + +describe("FindUseCase", () => { + let findClient: FindClient; + let findRepository: FindRepository; + let sut: StartFindUseCase; + + const rangeData = (count: number): browser.find.RangeData[] => { + const data = { + text: "Hello, world", + framePos: 0, + startTextNodePos: 0, + endTextNodePos: 0, + startOffset: 0, + endOffset: 0, + }; + return Array(count).fill(data); + }; + + beforeEach(() => { + findClient = new MockFindClient(); + findRepository = new MockFindRepository(); + sut = new StartFindUseCase(findClient, findRepository); + }); + + describe("startFind", function () { + context("with a search keyword", () => { + it("starts find and store last used keyword", async () => { + const startFind = sinon + .stub(findClient, "startFind") + .returns(Promise.resolve({ count: 10, rangeData: rangeData(10) })); + const highlightAll = sinon + .mock(findClient) + .expects("highlightAll") + .once(); + const selectKeyword = sinon + .mock(findClient) + .expects("selectKeyword") + .once(); + + await sut.startFind(10, "Hello, world"); + + expect(startFind.calledWith("Hello, world")).to.be.true; + expect(await findRepository.getGlobalKeyword()).to.equals( + "Hello, world" + ); + expect((await findRepository.getLocalState(10))?.keyword).to.equal( + "Hello, world" + ); + highlightAll.verify(); + selectKeyword.verify(); + }); + + it("throws an error if no matched", (done) => { + sinon + .stub(findClient, "startFind") + .returns(Promise.resolve({ count: 0, rangeData: [] })); + + sut.startFind(10, "Hello, world").catch((e) => { + expect(e).instanceof(Error); + done(); + }); + }); + }); + + context("without a search keyword", () => { + it("starts find with last used keyword in the tab", async () => { + const startFind = sinon + .stub(findClient, "startFind") + .returns(Promise.resolve({ count: 10, rangeData: rangeData(10) })); + await findRepository.setLocalState(10, { + keyword: "Hello, world", + rangeData: rangeData(10), + highlightPosition: 0, + }); + const highlightAll = sinon + .mock(findClient) + .expects("highlightAll") + .once(); + const selectKeyword = sinon + .mock(findClient) + .expects("selectKeyword") + .once(); + + await sut.startFind(10, undefined); + + expect(startFind.calledWith("Hello, world")).to.be.true; + highlightAll.verify(); + selectKeyword.verify(); + }); + + it("starts find with last used keyword in global", async () => { + const startFind = sinon + .stub(findClient, "startFind") + .returns(Promise.resolve({ count: 10, rangeData: rangeData(10) })); + await findRepository.setGlobalKeyword("Hello, world"); + const highlightAll = sinon + .mock(findClient) + .expects("highlightAll") + .once(); + const selectKeyword = sinon + .mock(findClient) + .expects("selectKeyword") + .once(); + + await sut.startFind(10, undefined); + + expect(startFind.calledWith("Hello, world")).to.be.true; + highlightAll.verify(); + selectKeyword.verify(); + }); + }); + }); +}); |