test: template

This commit is contained in:
DIYgod 2024-02-26 19:44:22 +08:00
parent 74fcb45ece
commit fb06204c83
No known key found for this signature in database
2 changed files with 19 additions and 18 deletions

View File

@ -1,8 +1,9 @@
const supertest = require('supertest');
jest.mock('request-promise-native');
const server = require('../../lib/index');
import { describe, expect, it, afterAll } from '@jest/globals';
import supertest from 'supertest';
import server from '@/index';
import Parser from 'rss-parser';
const request = supertest(server);
const Parser = require('rss-parser');
const parser = new Parser();
afterAll(() => {
@ -13,7 +14,7 @@ describe('template', () => {
const expectPubDate = new Date(1_546_272_000_000 - 10 * 1000);
it(`.rss`, async () => {
const response1 = await request.get('/test/1.rss');
const response1 = await request.get('/test/1?format=rss');
const parsed1 = await parser.parseString(response1.text);
expect(parsed1).toEqual(expect.any(Object));
@ -44,7 +45,7 @@ describe('template', () => {
});
it(`.atom`, async () => {
const response = await request.get('/test/1.atom');
const response = await request.get('/test/1?format=atom');
const parsed = await parser.parseString(response.text);
expect(parsed).toEqual(expect.any(Object));
@ -63,8 +64,8 @@ describe('template', () => {
});
it(`.json`, async () => {
const jsonResponse = await request.get('/test/1.json');
const rssResponse = await request.get('/test/1.rss');
const jsonResponse = await request.get('/test/1?format=json');
const rssResponse = await request.get('/test/1?format=rss');
const jsonParsed = JSON.parse(jsonResponse.text);
const rssParsed = await parser.parseString(rssResponse.text);
@ -80,15 +81,15 @@ describe('template', () => {
});
it('.debug.html', async () => {
const jsonResponse = await request.get('/test/1.json');
const jsonResponse = await request.get('/test/1?format=json');
const jsonParsed = JSON.parse(jsonResponse.text);
const debugHTMLResponse0 = await request.get('/test/1.0.debug.html');
const debugHTMLResponse0 = await request.get('/test/1?format=0.debug.html');
expect(debugHTMLResponse0.headers['content-type']).toBe('text/html; charset=UTF-8');
expect(debugHTMLResponse0.text).toBe(jsonParsed.items[0].content_html);
const debugHTMLResponseNotExist = await request.get(`/test/1.${jsonParsed.items.length}.debug.html`);
expect(debugHTMLResponseNotExist.text).toBe(`ctx.state.data.item[${jsonParsed.items.length}] not found`);
const debugHTMLResponseNotExist = await request.get(`/test/1?format=${jsonParsed.items.length}.debug.html`);
expect(debugHTMLResponseNotExist.text).toBe(`data.item[${jsonParsed.items.length}].description not found`);
});
it('flatten author object', async () => {
@ -102,15 +103,15 @@ describe('template', () => {
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(153);
expect(parsed.items[0].title?.length).toBe(153);
});
it(`enclosure`, async () => {
const response = await request.get('/test/enclosure');
const parsed = await parser.parseString(response.text);
expect(parsed.itunes.author).toBe('DIYgod');
expect(parsed.items[0].enclosure.url).toBe('https://github.com/DIYgod/RSSHub/issues/1');
expect(parsed.items[0].enclosure.length).toBe('3661');
expect(parsed.itunes?.author).toBe('DIYgod');
expect(parsed.items[0].enclosure?.url).toBe('https://github.com/DIYgod/RSSHub/issues/1');
expect(parsed.items[0].enclosure?.length).toBe('3661');
expect(parsed.items[0].itunes.duration).toBe('10:10:10');
});
});

View File

@ -18,11 +18,11 @@ const middleware: MiddlewareHandler = async (ctx, next) => {
return ctx.body(ctx.get('json') ? JSON.stringify(ctx.get('json'), null, 4) : JSON.stringify({ message: 'plugin does not set debug json' }));
}
if (outputType === 'debug.html') {
if (/(\d+)\.debug\.html$/.test(outputType)) {
ctx.header('Content-Type', 'text/html; charset=UTF-8');
const index = Number.parseInt(outputType.match(/(\d+)\.debug\.html$/)?.[1] || '0');
return ctx.body(data?.item?.[index]?.description || `data?.item?.[${index}]?.description not found`);
return ctx.body(data?.item?.[index]?.description || `data.item[${index}].description not found`);
}
}