From a9ebcd33e4a3ab4b831db2f591e82c2d8cb49b1d Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Wed, 29 May 2024 17:07:19 +0800 Subject: [PATCH] add mark as seen to the bulk action --- packages/api/src/generated/graphql.ts | 1 + packages/api/src/generated/schema.graphql | 1 + packages/api/src/schema.ts | 1 + packages/api/src/services/library_item.ts | 5 +++ packages/api/test/resolvers/article.test.ts | 45 +++++++++++++++++++++ 5 files changed, 53 insertions(+) diff --git a/packages/api/src/generated/graphql.ts b/packages/api/src/generated/graphql.ts index 0352f71f0..c285dcc47 100644 --- a/packages/api/src/generated/graphql.ts +++ b/packages/api/src/generated/graphql.ts @@ -279,6 +279,7 @@ export enum BulkActionType { Archive = 'ARCHIVE', Delete = 'DELETE', MarkAsRead = 'MARK_AS_READ', + MarkAsSeen = 'MARK_AS_SEEN', MoveToFolder = 'MOVE_TO_FOLDER' } diff --git a/packages/api/src/generated/schema.graphql b/packages/api/src/generated/schema.graphql index 29a98e88c..ccc07cf6f 100644 --- a/packages/api/src/generated/schema.graphql +++ b/packages/api/src/generated/schema.graphql @@ -241,6 +241,7 @@ enum BulkActionType { ARCHIVE DELETE MARK_AS_READ + MARK_AS_SEEN MOVE_TO_FOLDER } diff --git a/packages/api/src/schema.ts b/packages/api/src/schema.ts index c0986f4a3..4338377a0 100755 --- a/packages/api/src/schema.ts +++ b/packages/api/src/schema.ts @@ -2595,6 +2595,7 @@ const schema = gql` MARK_AS_READ ADD_LABELS MOVE_TO_FOLDER + MARK_AS_SEEN } union BulkActionResult = BulkActionSuccess | BulkActionError diff --git a/packages/api/src/services/library_item.ts b/packages/api/src/services/library_item.ts index 80848fc75..4390e6128 100644 --- a/packages/api/src/services/library_item.ts +++ b/packages/api/src/services/library_item.ts @@ -1303,6 +1303,11 @@ export const batchUpdateLibraryItems = async ( savedAt: now, } + break + case BulkActionType.MarkAsSeen: + values = { + seenAt: now, + } break default: throw new Error('Invalid bulk action') diff --git a/packages/api/test/resolvers/article.test.ts b/packages/api/test/resolvers/article.test.ts index c81677a08..5a64d06da 100644 --- a/packages/api/test/resolvers/article.test.ts +++ b/packages/api/test/resolvers/article.test.ts @@ -2322,6 +2322,51 @@ describe('Article API', () => { expect(response.body.data.search.pageInfo.totalCount).to.eql(0) }) }) + + context( + 'when action is MarkAsSeen and query contains a list of item id', + () => { + const items: LibraryItem[] = [] + + before(async () => { + // Create some test items + for (let i = 0; i < 5; i++) { + const item = await createOrUpdateLibraryItem( + { + user, + title: 'test item', + slug: '', + originalUrl: `https://blog.omnivore.app/p/bulk-action-${i}`, + }, + user.id + ) + + items.push(item) + } + }) + + after(async () => { + // Delete all items + await deleteLibraryItemsByUserId(user.id) + }) + + it('marks items as seen', async () => { + const query = `includes:${items.map((i) => i.id).join(',')}` + + const res = await graphqlRequest( + bulkActionQuery(BulkActionType.MarkAsSeen, query), + authToken + ).expect(200) + expect(res.body.data.bulkAction.success).to.be.true + + const response = await graphqlRequest( + searchQuery('is:seen'), + authToken + ).expect(200) + expect(response.body.data.search.pageInfo.totalCount).to.eql(5) + }) + } + ) }) describe('SetFavoriteArticle API', () => {