mirror of
https://github.com/DIYgod/RSSHub.git
synced 2026-10-29 07:27:22 +08:00
* refactor: typing house-keeping * fix: fix parse date not accepting strict mode * refactor: use npm package * fix: address review
68 lines
2.6 KiB
TypeScript
68 lines
2.6 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import api from '@/api';
|
|
import { route } from '@/api/category/one';
|
|
import type { NamespacesType } from '@/registry';
|
|
import { namespaces } from '@/registry';
|
|
|
|
const findCategory = (requireLang = false) => {
|
|
for (const [namespace, data] of Object.entries(namespaces)) {
|
|
for (const route of Object.values(data.routes)) {
|
|
const categories = route.categories || [];
|
|
if (categories.length > 0) {
|
|
if (requireLang && !data.lang) {
|
|
continue;
|
|
}
|
|
return { namespace, categories, lang: data.lang };
|
|
}
|
|
}
|
|
}
|
|
throw new Error('No categories found in registry data');
|
|
};
|
|
|
|
describe('api/category/one', () => {
|
|
it('returns namespaces that match a category', async () => {
|
|
const { categories } = findCategory();
|
|
const category = categories[0];
|
|
|
|
const response = await api.request(`/category/${category}`);
|
|
expect(response.status).toBe(200);
|
|
const result: NamespacesType = await response.json();
|
|
expect(Object.keys(result)).not.toHaveLength(0);
|
|
|
|
for (const namespace of Object.values(result)) {
|
|
for (const route of Object.values(namespace.routes)) {
|
|
expect(route.categories || []).toContain(category);
|
|
}
|
|
}
|
|
});
|
|
|
|
it('intersects categories and filters by lang', async () => {
|
|
const { namespace, categories, lang } = findCategory(true);
|
|
const [primary, secondary] = categories.length > 1 ? categories : [categories[0], categories[0]];
|
|
const selectedLang = lang || namespaces[namespace].lang;
|
|
|
|
const response = await api.request(`/category/${primary}?categories=${secondary}&lang=${selectedLang}`);
|
|
expect(response.status).toBe(200);
|
|
const result: NamespacesType = await response.json();
|
|
|
|
expect(Object.keys(result)).toContain(namespace);
|
|
for (const ns of Object.values(result)) {
|
|
expect(ns.lang).toBe(selectedLang);
|
|
}
|
|
});
|
|
|
|
it('parses categories query string into array', () => {
|
|
const parsed = route.request?.query?.parse({ categories: 'a,b', lang: 'en' });
|
|
expect(parsed?.categories).toEqual(['a', 'b']);
|
|
expect(parsed?.lang).toBe('en');
|
|
});
|
|
|
|
it('returns empty result for unknown categories', async () => {
|
|
const response = await api.request('/category/rsshub-unknown-category');
|
|
expect(response.status).toBe(200);
|
|
const result = await response.json();
|
|
expect(result).toEqual({});
|
|
});
|
|
});
|