diff --git a/packages/api/src/services/save_page.ts b/packages/api/src/services/save_page.ts index ad8d6d81c..3e82374d7 100644 --- a/packages/api/src/services/save_page.ts +++ b/packages/api/src/services/save_page.ts @@ -36,6 +36,7 @@ const FORCE_PUPPETEER_URLS = [ TWEET_URL_REGEX, /^((?:https?:)?\/\/)?((?:www|m)\.)?((?:youtube\.com|youtu.be))(\/(?:[\w-]+\?v=|embed\/|v\/)?)([\w-]+)(\S+)?$/, ] +const ALREADY_PARSED_SOURCES = ['puppeteer-parse', 'csv-importer', 'rss-feeder'] const createSlug = (url: string, title?: Maybe | undefined) => { const { pathname } = new URL(url) @@ -52,7 +53,7 @@ const createSlug = (url: string, title?: Maybe | undefined) => { const shouldParseInBackend = (input: SavePageInput): boolean => { return ( - input.source !== 'puppeteer-parse' && + ALREADY_PARSED_SOURCES.indexOf(input.source) === -1 && FORCE_PUPPETEER_URLS.some((regex) => regex.test(input.url)) ) } @@ -99,7 +100,7 @@ export const savePage = async ( await createPageSaveRequest({ userId: user.id, url: itemToSave.originalUrl, - articleSavingRequestId: clientRequestId, + articleSavingRequestId: clientRequestId || undefined, state: input.state || undefined, labels: input.labels || undefined, }) diff --git a/packages/api/test/resolvers/article.test.ts b/packages/api/test/resolvers/article.test.ts index 7cb3cdcbe..17d7518d0 100644 --- a/packages/api/test/resolvers/article.test.ts +++ b/packages/api/test/resolvers/article.test.ts @@ -185,15 +185,17 @@ const savePageQuery = ( title: string, originalContent: string, state: ArticleSavingRequestStatus | null = null, - labels: string[] | null = null + labels: string[] | null = null, + clientRequestId = generateFakeUuid(), + source = 'puppeteer-parse' ) => { return ` mutation { savePage( input: { url: "${url}", - source: "test", - clientRequestId: "${generateFakeUuid()}", + source: "${source}", + clientRequestId: "${clientRequestId}", title: "${title}", originalContent: "${originalContent}" state: ${state} @@ -605,6 +607,29 @@ describe('Article API', () => { expect(savedItem?.labels?.map((l) => l.name)).to.eql(labels) }) }) + + context('when the source is rss-feeder', () => { + const source = 'rss-feeder' + const stub = sinon.stub(createTask, 'enqueueParseRequest') + + before(() => { + url = 'https://blog.omnivore.app/new-url-3' + }) + + after(async () => { + await deleteLibraryItemByUrl(url, user.id) + sinon.restore() + }) + + it('does not parse in the backend', async () => { + await graphqlRequest( + savePageQuery(url, title, originalContent, null, null, '', source), + authToken + ).expect(200) + + expect(stub).not.to.have.been.called + }) + }) }) describe('SaveUrl', () => {