From 8cec57eaece06779c8bc22536fcbb52e9871b4b1 Mon Sep 17 00:00:00 2001 From: DIYgod Date: Tue, 29 Jan 2019 18:54:30 +0800 Subject: [PATCH] test: middleware/parameter --- lib/router.js | 25 ++++----- test/middleware/parameter.js | 99 ++++++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+), 14 deletions(-) create mode 100644 test/middleware/parameter.js diff --git a/lib/router.js b/lib/router.js index 5583d28029..66f81e5b4a 100644 --- a/lib/router.js +++ b/lib/router.js @@ -87,23 +87,20 @@ router.get('/', async (ctx) => { }); router.get('/test/:id', (ctx) => { + const item = []; + for (let i = 1; i < 6; i++) { + item.push({ + title: `Title${i}`, + description: `Item${i}`, + pubDate: new Date(`2018-4-${i}`).toUTCString(), + link: `https://github.com/DIYgod/RSSHub/issues/${i}`, + author: `DIYgod${i}`, + }); + } ctx.state.data = { title: `Test ${ctx.params.id}`, link: 'https://github.com/DIYgod/RSSHub', - item: [ - { - title: 'Title1', - description: 'Item1', - pubDate: new Date('2018-4-2').toUTCString(), - link: 'https://github.com/DIYgod/RSSHub/issues/1', - }, - { - title: 'Title2', - description: 'Item2', - pubDate: new Date('2018-4-10').toUTCString(), - link: 'https://github.com/DIYgod/RSSHub/issues/2', - }, - ], + item: item, }; }); diff --git a/test/middleware/parameter.js b/test/middleware/parameter.js new file mode 100644 index 0000000000..117b16a8d9 --- /dev/null +++ b/test/middleware/parameter.js @@ -0,0 +1,99 @@ +const supertest = require('supertest'); +const { server } = require('../../lib/index'); +const request = supertest(server); +const Parser = require('rss-parser'); +const parser = new Parser(); + +afterAll(() => { + server.close(); +}); + +describe('filter', () => { + it(`filter`, async () => { + const response = await request.get('/test/1?filter=Item4|Title5'); + const parsed = await parser.parseString(response.text); + expect(parsed.items.length).toBe(2); + expect(parsed.items[0].title).toBe('Title4'); + expect(parsed.items[1].title).toBe('Title5'); + }); + + it(`filter_title`, async () => { + const response = await request.get('/test/1?filter_title=Item4|Title5'); + const parsed = await parser.parseString(response.text); + expect(parsed.items.length).toBe(1); + expect(parsed.items[0].title).toBe('Title5'); + }); + + it(`filter_description`, async () => { + const response = await request.get('/test/1?filter_description=Item4|Title5'); + const parsed = await parser.parseString(response.text); + expect(parsed.items.length).toBe(1); + expect(parsed.items[0].title).toBe('Title4'); + }); + + it(`filter_author`, async () => { + const response = await request.get('/test/1?filter_author=DIYgod4|DIYgod5'); + const parsed = await parser.parseString(response.text); + expect(parsed.items.length).toBe(2); + expect(parsed.items[0].title).toBe('Title4'); + expect(parsed.items[1].title).toBe('Title5'); + }); + + it(`filterout`, async () => { + const response = await request.get('/test/1?filterout=Item4|Title5'); + const parsed = await parser.parseString(response.text); + expect(parsed.items.length).toBe(3); + expect(parsed.items[0].title).toBe('Title1'); + expect(parsed.items[1].title).toBe('Title2'); + expect(parsed.items[2].title).toBe('Title3'); + }); + + it(`filterout_title`, async () => { + const response = await request.get('/test/1?filterout_title=Item4|Title5'); + const parsed = await parser.parseString(response.text); + expect(parsed.items.length).toBe(4); + expect(parsed.items[0].title).toBe('Title1'); + expect(parsed.items[1].title).toBe('Title2'); + expect(parsed.items[2].title).toBe('Title3'); + expect(parsed.items[3].title).toBe('Title4'); + }); + + it(`filterout_description`, async () => { + const response = await request.get('/test/1?filterout_description=Item4|Title5'); + const parsed = await parser.parseString(response.text); + expect(parsed.items.length).toBe(4); + expect(parsed.items[0].title).toBe('Title1'); + expect(parsed.items[1].title).toBe('Title2'); + expect(parsed.items[2].title).toBe('Title3'); + expect(parsed.items[3].title).toBe('Title5'); + }); + + it(`filterout_author`, async () => { + const response = await request.get('/test/1?filterout_author=DIYgod4|DIYgod5'); + const parsed = await parser.parseString(response.text); + expect(parsed.items.length).toBe(3); + expect(parsed.items[0].title).toBe('Title1'); + expect(parsed.items[1].title).toBe('Title2'); + expect(parsed.items[2].title).toBe('Title3'); + }); +}); + +describe('limit', () => { + it(`limit`, async () => { + const response = await request.get('/test/1?limit=3'); + const parsed = await parser.parseString(response.text); + expect(parsed.items.length).toBe(3); + expect(parsed.items[0].title).toBe('Title1'); + expect(parsed.items[1].title).toBe('Title2'); + expect(parsed.items[2].title).toBe('Title3'); + }); +}); + +describe('tgiv', () => { + it(`tgiv`, async () => { + const response = await request.get('/test/1?tgiv=test'); + const parsed = await parser.parseString(response.text); + expect(parsed.items[0].link).toBe(`https://t.me/iv?url=https%3A%2F%2Fgithub.com%2FDIYgod%2FRSSHub%2Fissues%2F1&rhash=test`); + expect(parsed.items[1].link).toBe(`https://t.me/iv?url=https%3A%2F%2Fgithub.com%2FDIYgod%2FRSSHub%2Fissues%2F2&rhash=test`); + }); +});