// eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-nocheck import { LiveBlogWrapper } from '../index' import { dispatchEvent } from '../dispatchEvent' jest.mock('../dispatchEvent') const post1 = { id: '1', title: 'Post 1 Title', bodyHTML: '

Post 1 body

', publishedDate: '2020-10-09T10:00:00.000Z', articleUrl: 'https://www.ft.com', showShareButtons: true, showShareLinkButton: true, } const post2 = { id: '2', title: 'Post 2 Title', bodyHTML: '

Post 2 body

', publishedDate: '2020-10-09T11:00:00.000Z', articleUrl: 'https://www.ft.com', showShareButtons: true, showShareLinkButton: true, } describe('x-live-blog-wrapper', () => { it('has a displayName', () => { expect(LiveBlogWrapper.displayName).toContain('BaseLiveBlogWrapper') }) // TODO: CI-1975 we can no longer use Enzyme as it doesn't support Node 18+, so these will get rewritten to use react testing library // it('renders initial posts', () => { // const posts = [post1, post2] // const liveBlogWrapper = render() // expect(liveBlogWrapper.html()).toContain('Post 1 Title') // expect(liveBlogWrapper.html()).toContain('Post 1 body') // expect(liveBlogWrapper.html()).toContain('Post 2 Title') // expect(liveBlogWrapper.html()).toContain('Post 2 body') // }) // it('orders posts by date - new posts on top', () => { // const posts = [post1, post2] // const liveBlogWrapper = render() // const articles = liveBlogWrapper.find('article') // expect(articles.at(0).html()).toContain('Post 2 Title') // expect(articles.at(1).html()).toContain('Post 1 Title') // }) // it('renders an ad slot element at the given position', () => { // const posts = [post1, post2] // const liveBlogWrapper = render() // const articles = liveBlogWrapper.find('article') // expect(articles.at(0).html()).not.toContain('Ads') // expect(articles.at(1).html()).toContain('Ads') // }) }) describe('liveBlogWrapperActions', () => { let posts let actions beforeEach(() => { posts = [post1, post2] // liveBlogActions are not exported from the module, but we can access them via // the props of LiveBlogWrapper component. const liveBlogWrapper = LiveBlogWrapper({}) actions = liveBlogWrapper.props.actions }) afterEach(() => { dispatchEvent.mockReset() }) it('inserts a new post to the top of the list', () => { const target = 'target' const post3 = { id: '3', } // insertPost function returns another function that takes the list of component props // as an argument and returns the updated props. actions.insertPost(post3, target)({ posts }) expect(posts.length).toEqual(3) expect(posts[0].id).toEqual('3') expect(dispatchEvent).toHaveBeenCalledWith( 'target', 'LiveBlogWrapper.INSERT_POST', { post: post3, } ) }) it('does not insert a new post if a duplicate', () => { // Clone an existing post to check if gets inserted again. const duplicatePost = { ...posts[0] } // insertPost function returns another function that takes the list of component props // as an argument and returns the updated props. actions.insertPost(duplicatePost)({ posts }) expect(posts.length).toEqual(2) expect(posts[0].id).toEqual('1') expect(dispatchEvent).not.toHaveBeenCalled() }) })