import PrefetchAndCache, {shortKey} from "../../../../src/background/completion/impl/PrefetchAndCache"; import { expect } from 'chai'; class MockRepository { public history: string[] = []; constructor( private items: string[], ) { } get(query: string): Promise { this.history.push(query); if (query.length === 0) { return Promise.resolve(this.items); } else { return Promise.resolve(this.items.filter(item => item.includes(query))); } } } const filter = (items: string[], query: string) => query.length === 0 ? items : items.filter(item => item.includes(query)); describe('shortKey', () => { it('returns query excluding the last word', () => { const query = "hello\t world good bye"; const shorten = shortKey(query); expect(shorten).to.equal("hello world good") }); it('returns half-length of the query', () => { const query = "the-query-with-super-long-word"; const shorten = shortKey(query); expect(shorten).to.equal("the-query-with-") }); it('returns shorten URL', () => { let query = "https://example.com/path/to/resource?q=hello"; let shorten = shortKey(query); expect(shorten).to.equal("https://example.com/path/to/"); query = "https://example.com/path/to/resource/#id1"; shorten = shortKey(query); expect(shorten).to.equal("https://example.com/path/to/"); query = "https://www.google.c"; shorten = shortKey(query); expect(shorten).to.equal("https://ww"); }) }); describe('PrefetchAndCache', () => { describe('get', () => { it('returns cached request', async() => { const repo = new MockRepository(["apple", "apple pie", "apple juice", "banana", "banana pudding", "cherry"]); const sut = new PrefetchAndCache(repo.get.bind(repo), filter); expect(await sut.get("apple pie")).deep.equal(["apple pie"]); expect(await sut.get("apple ")).deep.equal(["apple", "apple pie", "apple juice"]); expect(await sut.get("apple")).deep.equal(["apple", "apple pie", "apple juice"]); expect(await sut.get("appl")).deep.equal(["apple", "apple pie", "apple juice"]); expect(repo.history).to.deep.equal(["apple", 'ap']); expect(await sut.get("banana")).deep.equal(["banana", "banana pudding"]); expect(repo.history).to.deep.equal(["apple", "ap", "ban"]); expect(await sut.get("banana p")).deep.equal(["banana pudding"]); expect(repo.history).to.deep.equal(["apple", "ap", "ban", "banana"]); expect(await sut.get("ba")).deep.equal(["banana", "banana pudding"]); expect(repo.history).to.deep.equal(["apple", "ap", "ban", "banana", "b"]); expect(await sut.get("")).to.have.lengthOf(6); expect(repo.history).to.deep.equal(["apple", "ap", "ban", "banana", "b", ""]); }); }); });