diff --git a/packages/shared/src/components/Feed.spec.tsx b/packages/shared/src/components/Feed.spec.tsx index 08c8acc04a..44bb5a32ba 100644 --- a/packages/shared/src/components/Feed.spec.tsx +++ b/packages/shared/src/components/Feed.spec.tsx @@ -364,6 +364,49 @@ describe('Feed logged in', () => { expect(await screen.findAllByTestId('postItem')).not.toHaveLength(0); }); + it('should skip malformed normalized post items without crashing', async () => { + const warn = jest + .spyOn(console, 'warn') + .mockImplementation(() => undefined); + + renderComponent([ + { + request: { + query: ANONYMOUS_FEED_QUERY, + variables, + }, + result: { + data: { + page: { + pageInfo: defaultFeedPage.pageInfo, + edges: [ + { + node: { + itemType: 'post', + feedMeta: null, + }, + }, + { + node: { + itemType: 'post', + feedMeta: null, + post: defaultFeedPage.edges[0].node, + }, + }, + ], + }, + }, + }, + }, + ]); + + await waitForNock(); + expect(await screen.findAllByTestId('postItem')).toHaveLength(1); + expect(warn).toHaveBeenCalledWith( + 'Skipping malformed normalized feed item type: post', + ); + }); + it('should send upvote mutation', async () => { let mutationCalled = false; renderComponent([ diff --git a/packages/shared/src/graphql/feed.ts b/packages/shared/src/graphql/feed.ts index 940540a1f2..cbb30f0663 100644 --- a/packages/shared/src/graphql/feed.ts +++ b/packages/shared/src/graphql/feed.ts @@ -113,7 +113,7 @@ export const getFeedApiItemPost = ( item: FeedApiItem | FeedV2Item | Post, ): Post | null => { if (isFeedApiPostItem(item)) { - return item.post; + return item.post ?? null; } if (isFeedV2PostItem(item)) { diff --git a/packages/shared/src/hooks/useFeed.ts b/packages/shared/src/hooks/useFeed.ts index 1b25456204..cc14f563c8 100644 --- a/packages/shared/src/hooks/useFeed.ts +++ b/packages/shared/src/hooks/useFeed.ts @@ -103,6 +103,15 @@ const getPostFeedItemOrWarn = ( item: FeedItemData['page']['edges'][number]['node'], ): Post | null => { if (item.itemType === 'post') { + if (!item.post) { + // eslint-disable-next-line no-console + console.warn( + `Skipping malformed normalized feed item type: ${item.itemType}`, + ); + + return null; + } + return item.post; }