diff --git a/packages/api/src/services/create_page_save_request.ts b/packages/api/src/services/create_page_save_request.ts index 7d2b504a5..f515d1e8c 100644 --- a/packages/api/src/services/create_page_save_request.ts +++ b/packages/api/src/services/create_page_save_request.ts @@ -64,6 +64,7 @@ export const createPageSaveRequest = async ( models: DataModels, pubsub: PubsubClient = createPubSubClient(), articleSavingRequestId = uuidv4(), + archivedAt?: Date | null, priority?: 'low' | 'high' ): Promise => { try { @@ -116,6 +117,7 @@ export const createPageSaveRequest = async ( state: ArticleSavingRequestStatus.Processing, createdAt: new Date(), savedAt: new Date(), + archivedAt, } // create processing page diff --git a/packages/api/src/services/save_page.ts b/packages/api/src/services/save_page.ts index 2215f0761..ebca00339 100644 --- a/packages/api/src/services/save_page.ts +++ b/packages/api/src/services/save_page.ts @@ -140,7 +140,8 @@ export const savePage = async ( articleToSave.url, ctx.models, ctx.pubsub, - input.clientRequestId + input.clientRequestId, + archivedAt ) } catch (e) { return { diff --git a/packages/api/test/resolvers/article.test.ts b/packages/api/test/resolvers/article.test.ts index def6ab376..ceebb1f15 100644 --- a/packages/api/test/resolvers/article.test.ts +++ b/packages/api/test/resolvers/article.test.ts @@ -10,6 +10,7 @@ import { deletePage, deletePagesByParam, getPageById, + getPageByParam, updatePage, } from '../../src/elastic/pages' import { @@ -208,7 +209,13 @@ const searchQuery = (keyword = '') => { ` } -const savePageQuery = (url: string, title: string, originalContent: string) => { +const savePageQuery = ( + url: string, + title: string, + originalContent: string, + state: ArticleSavingRequestStatus | null = null, + labels: string[] | null = null +) => { return ` mutation { savePage( @@ -218,6 +225,12 @@ const savePageQuery = (url: string, title: string, originalContent: string) => { clientRequestId: "${generateFakeUuid()}", title: "${title}", originalContent: "${originalContent}" + state: ${state} + labels: ${ + labels + ? '[' + labels.map((label) => `{ name: "${label}" }`) + ']' + : null + } } ) { ... on SaveSuccess { @@ -611,6 +624,26 @@ describe('Article API', () => { expect(allLinks.body.data.articles.edges[0].node.url).to.eq(url) }) }) + + context('when we also want to save labels and archives the page', () => { + after(async () => { + await deletePagesByParam({ url }, ctx) + }) + + it('saves the labels and archives the page', async () => { + const state = ArticleSavingRequestStatus.Archived + const labels = ['test name', 'test name 2'] + await graphqlRequest( + savePageQuery(url, title, originalContent, state, labels), + authToken + ).expect(200) + await refreshIndex() + + const savedPage = await getPageByParam({ url }) + expect(savedPage?.archivedAt).to.not.be.null + expect(savedPage?.labels?.map((l) => l.name)).to.eql(labels) + }) + }) }) describe('SaveUrl', () => {