Files
RSSHub/lib/utils/route-limit.test.ts
DIYgod 525efe953c fix(core): preserve ordering and validate common entry limits
Affected files:
- lib/middleware/parameter.test.ts
- lib/middleware/parameter.ts
- lib/utils/route-limit.test.ts
- lib/utils/route-limit.ts
2026-10-14 15:07:45 +08:00

31 lines
1.5 KiB
TypeScript

import { Context } from 'hono';
import { describe, expect, it } from 'vitest';
import { getRouteLimit, hasItemFilters } from './route-limit';
const context = (query: string) => new Context(new Request(`https://rsshub.example/feed?${query}`));
describe('route candidate limits', () => {
it('retains the existing default and explicit unfiltered limits', () => {
expect(getRouteLimit(context(''), 20)).toBe(20);
expect(getRouteLimit(context('limit=3'), 20)).toBe(3);
expect(getRouteLimit(context('limit=50'), 20)).toBe(50);
expect(getRouteLimit(context(''))).toBeUndefined();
});
it.each(['filter', 'filter_title', 'filter_description', 'filter_author', 'filter_category', 'filterout', 'filterout_title', 'filterout_description', 'filterout_author', 'filterout_category', 'filter_time'])(
'retains the default candidate pool for active %s',
(key) => {
expect(getRouteLimit(context(`limit=3&${key}=value`), 20)).toBe(20);
expect(getRouteLimit(context(`limit=50&${key}=value`), 20)).toBe(50);
expect(getRouteLimit(context(`limit=3&${key}=value`))).toBeUndefined();
}
);
it.each(['filter_case_sensitive=false', 'filter_title=', 'filterout=', 'filter_time='])('preserves small explicit limits without an active item filter: %s', (query) => {
const ctx = context(`limit=3&${query}`);
expect(hasItemFilters(ctx)).toBe(false);
expect(getRouteLimit(ctx, 20)).toBe(3);
});
});