import { RSSFetcher, RSSFeedConfig, RSSDocument } from '../rssFetcher';
import Parser from 'rss-parser';

jest.mock('rss-parser');

const mockFeed = {
  items: [
    {
      title: 'Test Title',
      link: 'https://example.com/post',
      content: 'Test content',
      pubDate: '2024-06-12',
      creator: 'Author',
      categories: ['cat1', 'cat2'],
    },
  ],
};

(Parser as jest.Mock).mockImplementation(() => ({
  parseURL: jest.fn().mockResolvedValue(mockFeed),
}));

describe('RSSFetcher', () => {
  it('should fetch and convert RSS feed items', async () => {
    const config: RSSFeedConfig[] = [
      { url: 'https://example.com/rss', interval: '* * * * *' },
    ];
    const fetcher = new RSSFetcher(config);
    // @ts-ignore
    const docs: RSSDocument[] = mockFeed.items.map(item => fetcher['toDocument'](item, config[0].url));
    expect(docs[0].title).toBe('Test Title');
    expect(docs[0].link).toBe('https://example.com/post');
    expect(docs[0].content).toBe('Test content');
    expect(docs[0].pubDate).toBe('2024-06-12');
    expect(docs[0].author).toBe('Author');
    expect(docs[0].categories).toEqual(['cat1', 'cat2']);
    expect(docs[0].source).toBe('https://example.com/rss');
  });
});
