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 }}
- {{ $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);
});