From 1f4f68530f854361d96a5fc5451f9122eb59b344 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Wed, 3 Apr 2024 16:59:50 +0800 Subject: [PATCH] add tests for filters --- .../api/test/services/library_item.test.ts | 140 ++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 packages/api/test/services/library_item.test.ts diff --git a/packages/api/test/services/library_item.test.ts b/packages/api/test/services/library_item.test.ts new file mode 100644 index 000000000..c567db29d --- /dev/null +++ b/packages/api/test/services/library_item.test.ts @@ -0,0 +1,140 @@ +import { expect } from 'chai' +import 'mocha' +import { filterItemEvents } from '../../src/services/library_item' +import { parseSearchQuery } from '../../src/utils/search' + +describe('filterItemEvents', () => { + it('returns events if there are quotation marks in the subscription name', () => { + const query = 'subscription:"Best \\\"Omnivore\\\""' + const ast = parseSearchQuery(query) + const events = [ + { + subscription: 'Best "Omnivore"', + }, + ] + const result = filterItemEvents(ast, events) + expect(result).to.eql(events) + }) + + it('returns events if subscription name equals ignore case', () => { + const query = 'subscription:substack' + const ast = parseSearchQuery(query) + const events = [ + { + subscription: 'Substack', + }, + ] + const result = filterItemEvents(ast, events) + expect(result).to.eql(events) + }) + + it('returns events if site name equals ignore case', () => { + const query = 'site:youtube' + const ast = parseSearchQuery(query) + const events = [ + { + siteName: 'YouTube', + }, + ] + const result = filterItemEvents(ast, events) + expect(result).to.eql(events) + }) + + it('returns events if site name contains the search query', () => { + const query = 'site:standard' + const ast = parseSearchQuery(query) + const events = [ + { + siteName: 'Der Standard', + }, + ] + const result = filterItemEvents(ast, events) + expect(result).to.eql(events) + }) + + it('returns events if domain name contains the search query', () => { + const query = 'site:stackoverflow.com' + const ast = parseSearchQuery(query) + const events = [ + { + siteName: 'Stack Overflow', + originalUrl: 'https://stackoverflow.com/questions/123', + }, + ] + const result = filterItemEvents(ast, events) + expect(result).to.eql(events) + }) + + it('returns events if top level domain matches', () => { + const query = 'site:".com"' + const ast = parseSearchQuery(query) + const events = [ + { + siteName: 'Stack Overflow', + originalUrl: 'https://stackoverflow.com/questions/123', + }, + ] + const result = filterItemEvents(ast, events) + expect(result).to.eql(events) + }) + + it('returns events if labels match the search query', () => { + const query = 'label:foo' + const ast = parseSearchQuery(query) + const events = [ + { + labelNames: ['foo'], + }, + ] + const result = filterItemEvents(ast, events) + expect(result).to.eql(events) + }) + + it('returns events if labels contain quotation marks', () => { + const query = 'label:"foo \\\"bar\\\""' + const ast = parseSearchQuery(query) + const events = [ + { + labelNames: ['foo "bar"'], + }, + ] + const result = filterItemEvents(ast, events) + expect(result).to.eql(events) + }) + + it('returns events if labels contain space', () => { + const query = 'label:"foo bar"' + const ast = parseSearchQuery(query) + const events = [ + { + labelNames: ['foo bar'], + }, + ] + const result = filterItemEvents(ast, events) + expect(result).to.eql(events) + }) + + it('returns events if labels match the search query ignore case', () => { + const query = 'label:Foo' + const ast = parseSearchQuery(query) + const events = [ + { + labelNames: ['foo'], + }, + ] + const result = filterItemEvents(ast, events) + expect(result).to.eql(events) + }) + + it('returns events if labels match the search query with multiple labels', () => { + const query = 'label:foo,bar' + const ast = parseSearchQuery(query) + const events = [ + { + labelNames: ['foo', 'bar'], + }, + ] + const result = filterItemEvents(ast, events) + expect(result).to.eql(events) + }) +})