diff --git a/src/filter.js b/src/filter.js index a678620..4eb961d 100644 --- a/src/filter.js +++ b/src/filter.js @@ -37,9 +37,12 @@ export default class Filter { this.filter = filter this.key = key - this.params = params this.name = name + this.params = params + this.fn = filters[this.name] this.flag = new Flag(flag) + + if (!this.fn) throw new FilterNotFoundError(name) } apply (node, data) { @@ -51,14 +54,6 @@ export default class Filter { }) } - get fn () { - const fn = filters[this.name] - - if (fn) return fn - - throw new FilterNotFoundError(this.name) - } - get args () { return this.params ?.replace(/\(([\w$_,]*)\)/g, '$1') diff --git a/tests/filter.spec.js b/tests/filter.spec.js index d12754b..3da018e 100644 --- a/tests/filter.spec.js +++ b/tests/filter.spec.js @@ -1,5 +1,6 @@ import { jest } from '@jest/globals' -import { filters } from '../src/filter.js' +import Filter, { filters } from '../src/filter.js' +import Flag from '../src/flag.js' import yank from '../src/yank.js' import data from './data.json' @@ -192,8 +193,39 @@ describe('src/filter', () => { }) describe('Filter', () => { - describe('filter', () => { - // @TODO + describe('constructor', () => { + it('should set filter, key, params, name, and flag', () => { + const str = 'as(foo)' + const filter = new Filter(str) + + expect(filter.filter).toEqual(str) + expect(filter.key).toEqual('as') + expect(filter.name).toEqual('as') + expect(filter.params).toEqual('(foo)') + expect(filter.flag).toBeInstanceOf(Flag) + }) + }) + + describe('apply', () => { + it('should run fn() with options', () => { + const filter = new Filter('as(foo)') + const node = { + value: 'test-node' + } + const data = { + value: 'test-data' + } + + filter.fn = jest.fn() + filter.apply(node, data) + + expect(filter.fn).toBeCalledWith({ + flag: filter.flag, + args: filter.args, + node, + data + }) + }) }) }) })