import React from 'react' import { render, screen } from '@testing-library/react' import '@testing-library/jest-dom/extend-expect' import userEvent from '@testing-library/user-event' import Blog from '../components/Blog' describe('', () => { let container const blog = { title: 'test blog', author: 'test author', url: 'https://link.to.test/blog', likes: 1212, user: { id: '918273645', username: 'testuser1' } } const user = { username: 'testuser1' } const mockHandler = jest.fn() beforeEach(() => { container = render().container }) test('renders title and author but not url or likes', () => { const blogDetails = container.querySelector('.blog-details') expect(blogDetails).toHaveStyle('display: none') }) test('all blog details are render when \'Show\' button is clicked', async () => { const testUser = userEvent.setup() const showButton = screen.getByText('Show') await testUser.click(showButton) const blogDetails = container.querySelector('.blog-details') expect(blogDetails).not.toHaveStyle('display: none') expect(blogDetails).toHaveTextContent('Url: https://link.to.test/blog') expect(blogDetails).toHaveTextContent('Likes: 1212') }) test('clicking the like button two times, calls the updateBlog Handler twice', async () => { const testUser = userEvent.setup() const showButton = screen.getByText('Show') await testUser.click(showButton) const blogDetails = container.querySelector('.blog-details') expect(blogDetails).toHaveTextContent('Url: https://link.to.test/blog') const likeButton = screen.getByText('Like') await testUser.click(likeButton) await testUser.click(likeButton) expect(mockHandler.mock.calls).toHaveLength(2) }) })