Files
RSSHub/lib/views/rss3.test.ts
T
DIYgod 81ff849337 feat(tests): add comprehensive unit tests for various utility functions and views (#20779)
* feat(tests): add comprehensive unit tests for various utility functions and views

- Implement tests for cache utility to ensure proper behavior with no cache and TTL keys.
- Add tests for common utilities including string manipulation and path handling.
- Introduce tests for directory import functionality to validate file imports and pattern matching.
- Create tests for git hash retrieval to handle fallback scenarios.
- Develop tests for deprecated got utility to verify response handling and retry logic.
- Enhance got utility tests to include request hooks and search parameter handling.
- Mock header generator tests to validate user agent handling.
- Expand helpers tests to cover current path retrieval and duration parsing.
- Implement tests for ofetch utility to ensure proper proxy handling and logging.
- Add OpenTelemetry metric tests to validate metric serialization.
- Create proxy tests to verify multi-proxy selection and failure handling.
- Introduce request rewriter tests to validate fetch and get wrapper functionality.
- Add timezone utility tests to handle various input types.
- Implement view tests for Atom and RSS rendering to ensure correct output.
- Create index view tests to validate debug information display based on configuration.

* refactor: remove deprecated got implementation and associated tests

* test: expand coverage for api, middleware, and utils
2025-12-29 17:34:48 +08:00

123 lines
4.3 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import rss3 from './rss3';
const NETWORK = 'rsshub';
const TAG = 'RSS';
const TYPE = 'feed';
const PLATFORM = 'RSSHub';
describe('rss3', () => {
it('should return UMS Result', () => {
const data = {
item: [
{
link: 'https://example.com/post1',
author: 'Author Name',
description: 'Description of the post',
pubDate: '2024-01-01T00:00:00Z',
category: 'Category Name',
title: 'Post Title',
updated: '2024-01-02T00:00:00Z',
},
{
link: 'https://example.com/post2',
author: 'Anaother Author',
description: 'Another description',
pubDate: '2024-01-03T00:00:00Z',
category: 'Another Category',
title: 'Another Post',
updated: '2024-01-02T00:00:00Z',
},
],
};
const result = rss3(data);
const expected = {
data: [
{
owner: 'example.com',
id: 'https://example.com/post1',
network: NETWORK,
from: 'example.com',
to: 'example.com',
tag: TAG,
type: TYPE,
direction: 'out',
feeValue: '0',
actions: [
{
tag: TAG,
type: TYPE,
platform: PLATFORM,
from: 'example.com',
to: 'example.com',
metadata: {
authors: [{ name: 'Author Name' }],
description: 'Description of the post',
pub_date: '2024-01-01T00:00:00Z',
tags: ['Category Name'],
title: 'Post Title',
},
related_urls: ['https://example.com/post1'],
},
],
timestamp: 1_704_153_600,
},
{
owner: 'example.com',
id: 'https://example.com/post2',
network: NETWORK,
from: 'example.com',
to: 'example.com',
tag: TAG,
type: TYPE,
direction: 'out',
feeValue: '0',
actions: [
{
tag: TAG,
type: TYPE,
platform: PLATFORM,
from: 'example.com',
to: 'example.com',
metadata: {
authors: [{ name: 'Anaother Author' }],
description: 'Another description',
pub_date: '2024-01-03T00:00:00Z',
tags: ['Another Category'],
title: 'Another Post',
},
related_urls: ['https://example.com/post2'],
},
],
timestamp: 1_704_153_600,
},
],
};
expect(result).toStrictEqual(expected);
});
it('falls back to raw link when URL parsing fails', () => {
const data = {
item: [
{
link: 'not-a-url',
author: 'Author',
description: 'Desc',
pubDate: '2024-01-01T00:00:00Z',
category: 'Category',
title: 'Title',
updated: '2024-01-02T00:00:00Z',
},
],
};
const result = rss3(data);
expect(result.data[0].owner).toBe('not-a-url');
expect(result.data[0].from).toBe('not-a-url');
expect(result.data[0].to).toBe('not-a-url');
});
});