From 0a62389eaa78dd4f08ed2a3bcaa939c7d173e42c Mon Sep 17 00:00:00 2001 From: DIYgod Date: Thu, 31 Jan 2019 11:45:00 +0800 Subject: [PATCH] test: middleware/template --- lib/router.js | 11 +++++- lib/views/atom.art | 10 +++--- test/middleware/parameter.js | 12 +++---- test/middleware/template.js | 67 ++++++++++++++++++++++++++++++++++++ test/router.js | 1 + test/utils/puppeteer.js | 2 +- 6 files changed, 90 insertions(+), 13 deletions(-) create mode 100644 test/middleware/template.js diff --git a/lib/router.js b/lib/router.js index bcaa228cc8..9bc37c81b4 100644 --- a/lib/router.js +++ b/lib/router.js @@ -91,10 +91,19 @@ router.get('/test/:id', (ctx) => { throw Error('Error test'); } const item = []; + if (ctx.params.id === 'long') { + item.push({ + title: `Long Title `.repeat(10), + description: `Long Description `.repeat(10), + pubDate: new Date(`2018-3-1`).toUTCString(), + link: `https://github.com/DIYgod/RSSHub/issues/0`, + author: `DIYgod0`, + }); + } for (let i = 1; i < 6; i++) { item.push({ title: `Title${i}`, - description: `Item${i}`, + description: `Description${i}`, pubDate: new Date(`2018-4-${i}`).toUTCString(), link: `https://github.com/DIYgod/RSSHub/issues/${i}`, author: `DIYgod${i}`, diff --git a/lib/views/atom.art b/lib/views/atom.art index aad5c38ee8..86099dd9f6 100644 --- a/lib/views/atom.art +++ b/lib/views/atom.art @@ -17,7 +17,7 @@ {{if contributor }} - {{ each contributor }} + {{ each contributor }} @@ -37,13 +37,13 @@ {{ $e.id || $e.link }} <![CDATA[{{@ $e.title }}]]> - {{ $e.published || $e.updated }} + {{ $e.pubDate || $e.updated }} {{ $e.updated }} - + {{ if $e.author }} - + {{ /if }} @@ -65,7 +65,7 @@ {{ /each }} {{ /if }} - + {{ /each }} diff --git a/test/middleware/parameter.js b/test/middleware/parameter.js index 117b16a8d9..ac657dcfb3 100644 --- a/test/middleware/parameter.js +++ b/test/middleware/parameter.js @@ -10,7 +10,7 @@ afterAll(() => { describe('filter', () => { it(`filter`, async () => { - const response = await request.get('/test/1?filter=Item4|Title5'); + const response = await request.get('/test/1?filter=Description4|Title5'); const parsed = await parser.parseString(response.text); expect(parsed.items.length).toBe(2); expect(parsed.items[0].title).toBe('Title4'); @@ -18,14 +18,14 @@ describe('filter', () => { }); it(`filter_title`, async () => { - const response = await request.get('/test/1?filter_title=Item4|Title5'); + const response = await request.get('/test/1?filter_title=Description4|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 response = await request.get('/test/1?filter_description=Description4|Title5'); const parsed = await parser.parseString(response.text); expect(parsed.items.length).toBe(1); expect(parsed.items[0].title).toBe('Title4'); @@ -40,7 +40,7 @@ describe('filter', () => { }); it(`filterout`, async () => { - const response = await request.get('/test/1?filterout=Item4|Title5'); + const response = await request.get('/test/1?filterout=Description4|Title5'); const parsed = await parser.parseString(response.text); expect(parsed.items.length).toBe(3); expect(parsed.items[0].title).toBe('Title1'); @@ -49,7 +49,7 @@ describe('filter', () => { }); it(`filterout_title`, async () => { - const response = await request.get('/test/1?filterout_title=Item4|Title5'); + const response = await request.get('/test/1?filterout_title=Description4|Title5'); const parsed = await parser.parseString(response.text); expect(parsed.items.length).toBe(4); expect(parsed.items[0].title).toBe('Title1'); @@ -59,7 +59,7 @@ describe('filter', () => { }); it(`filterout_description`, async () => { - const response = await request.get('/test/1?filterout_description=Item4|Title5'); + const response = await request.get('/test/1?filterout_description=Description4|Title5'); const parsed = await parser.parseString(response.text); expect(parsed.items.length).toBe(4); expect(parsed.items[0].title).toBe('Title1'); diff --git a/test/middleware/template.js b/test/middleware/template.js new file mode 100644 index 0000000000..b1fd73fc57 --- /dev/null +++ b/test/middleware/template.js @@ -0,0 +1,67 @@ +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('template', () => { + it(`.rss`, async () => { + const response1 = await request.get('/test/1.rss'); + const parsed1 = await parser.parseString(response1.text); + + expect(parsed1).toEqual(expect.any(Object)); + expect(parsed1.title).toEqual(expect.any(String)); + expect(parsed1.description).toEqual(expect.any(String)); + expect(parsed1.link).toEqual(expect.any(String)); + expect(parsed1.lastBuildDate).toEqual(expect.any(String)); + expect(parsed1.ttl).toEqual(expect.any(String)); + expect(parsed1.items).toEqual(expect.any(Array)); + + expect(parsed1.items[0]).toEqual(expect.any(Object)); + expect(parsed1.items[0].title).toEqual(expect.any(String)); + expect(parsed1.items[0].link).toEqual(expect.any(String)); + expect(parsed1.items[0].pubDate).toEqual(expect.any(String)); + expect(parsed1.items[0].author).toEqual(expect.any(String)); + expect(parsed1.items[0].content).toEqual(expect.any(String)); + expect(parsed1.items[0].guid).toEqual(expect.any(String)); + + const response2 = await request.get('/test/1'); + const parsed2 = await parser.parseString(response2.text); + expect(parsed2).toMatchObject(parsed1); + }); + + it(`.atom`, async () => { + const response = await request.get('/test/1.atom'); + const parsed = await parser.parseString(response.text); + + expect(parsed).toEqual(expect.any(Object)); + expect(parsed.title).toEqual(expect.any(String)); + expect(parsed.link).toEqual(expect.any(String)); + expect(parsed.lastBuildDate).toEqual(expect.any(String)); + expect(parsed.items).toEqual(expect.any(Array)); + + expect(parsed.items[0]).toEqual(expect.any(Object)); + expect(parsed.items[0].title).toEqual(expect.any(String)); + expect(parsed.items[0].link).toEqual(expect.any(String)); + expect(parsed.items[0].pubDate).toEqual(expect.any(String)); + expect(parsed.items[0].author).toEqual(expect.any(String)); + expect(parsed.items[0].content).toEqual(expect.any(String)); + expect(parsed.items[0].id).toEqual(expect.any(String)); + }); + + it(`.json`, async () => { + const response = await request.get('/test/1.json'); + expect(response.status).toBe(404); + expect(response.text).toMatch(/RSSHub 发生了一些意外:
Error: JSON output had been removed/);
+    });
+
+    it(`long title`, async () => {
+        const response = await request.get('/test/long');
+        const parsed = await parser.parseString(response.text);
+        expect(parsed.items[0].title.length).toBe(103);
+    });
+});
diff --git a/test/router.js b/test/router.js
index 40265f88dc..c784241e09 100644
--- a/test/router.js
+++ b/test/router.js
@@ -24,6 +24,7 @@ async function checkRSS(response) {
     expect(parsed.description).toEqual(expect.any(String));
     expect(parsed.link).toEqual(expect.any(String));
     expect(parsed.lastBuildDate).toEqual(expect.any(String));
+    expect(parsed.ttl).toEqual(config.cacheExpire);
     expect(parsed.items).toEqual(expect.any(Array));
     checkDate(parsed.lastBuildDate);
 
diff --git a/test/utils/puppeteer.js b/test/utils/puppeteer.js
index d59b76fd48..9ce37366c6 100644
--- a/test/utils/puppeteer.js
+++ b/test/utils/puppeteer.js
@@ -13,5 +13,5 @@ describe('puppeteer', () => {
         expect(html.length).toBeGreaterThan(0);
 
         await browser.close();
-    });
+    }, 10000);
 });