test to save only if feed item does not exist
This commit is contained in:
@ -94,5 +94,26 @@ describe('ScrapingService', () => {
|
|||||||
expect(mockFeedRepository.findByUrl).toHaveBeenCalledWith(testUrl);
|
expect(mockFeedRepository.findByUrl).toHaveBeenCalledWith(testUrl);
|
||||||
expect(exists).toBe(true);
|
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);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
@ -24,4 +24,12 @@ export class ScrapingService {
|
|||||||
const existingFeed = await this.feedRepository.findByUrl(url);
|
const existingFeed = await this.feedRepository.findByUrl(url);
|
||||||
return existingFeed !== null;
|
return existingFeed !== null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async saveIfNotExists(feedData: Omit<IFeed, '_id' | 'createdAt' | 'updatedAt'>): Promise<IFeed | null> {
|
||||||
|
const exists = await this.feedExists(feedData.url);
|
||||||
|
if (exists) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return await this.saveFeedItem(feedData);
|
||||||
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user