diff --git a/src/__tests__/ScrapingService.test.ts b/src/__tests__/ScrapingService.test.ts index 12ca3be..b0ae56d 100644 --- a/src/__tests__/ScrapingService.test.ts +++ b/src/__tests__/ScrapingService.test.ts @@ -94,5 +94,26 @@ describe('ScrapingService', () => { expect(mockFeedRepository.findByUrl).toHaveBeenCalledWith(testUrl); expect(exists).toBe(true); }); + + test('should save feed item only if it does not exist', async () => { + const feedData = { + title: 'New News', + description: 'New description', + url: 'https://example.com/new-news', + source: 'El PaĆ­s' as any, + publishedAt: new Date(), + isManual: false + }; + + const savedFeed = { _id: '2', ...feedData }; + mockFeedRepository.findByUrl.mockResolvedValue(null); + mockFeedRepository.create.mockResolvedValue(savedFeed); + + const result = await scrapingService.saveIfNotExists(feedData); + + expect(mockFeedRepository.findByUrl).toHaveBeenCalledWith(feedData.url); + expect(mockFeedRepository.create).toHaveBeenCalledWith(feedData); + expect(result).toEqual(savedFeed); + }); }); }); \ No newline at end of file diff --git a/src/services/ScrapingService.ts b/src/services/ScrapingService.ts index 0424e58..cb14fbd 100644 --- a/src/services/ScrapingService.ts +++ b/src/services/ScrapingService.ts @@ -24,4 +24,12 @@ export class ScrapingService { const existingFeed = await this.feedRepository.findByUrl(url); return existingFeed !== null; } + + async saveIfNotExists(feedData: Omit): Promise { + const exists = await this.feedExists(feedData.url); + if (exists) { + return null; + } + return await this.saveFeedItem(feedData); + } } \ No newline at end of file