diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d129ff33..2d112c6f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,3 +14,4 @@ jobs: node-version: 16.15 with-mutation-tests: true publish-coverage: true + force-install: true diff --git a/.github/workflows/deploy-preview.yml b/.github/workflows/deploy-preview.yml index b958cc37..76b02a48 100644 --- a/.github/workflows/deploy-preview.yml +++ b/.github/workflows/deploy-preview.yml @@ -19,7 +19,7 @@ jobs: node-version: 16.15 - name: Build run: | - npm ci && \ + npm ci --force && \ node ./scripts/set-homepage.js /shlink-web-client/${GITHUB_HEAD_REF#refs/heads/} && \ rm src/service-worker.ts && \ npm run build diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml index 1ab257a4..52d82e65 100644 --- a/.github/workflows/publish-release.yml +++ b/.github/workflows/publish-release.yml @@ -16,7 +16,7 @@ jobs: with: node-version: 16.15 - name: Generate release assets - run: npm ci && VERSION=${GITHUB_REF#refs/tags/v} npm run build:dist + run: npm ci --force && VERSION=${GITHUB_REF#refs/tags/v} npm run build:dist - name: Publish release with assets uses: docker://antonyurchenko/git-release:latest env: diff --git a/test/short-urls/Paginator.test.tsx b/test/short-urls/Paginator.test.tsx index 0e611429..a7a12ab5 100644 --- a/test/short-urls/Paginator.test.tsx +++ b/test/short-urls/Paginator.test.tsx @@ -1,15 +1,17 @@ -import { shallow, ShallowWrapper } from 'enzyme'; -import { PaginationItem, PaginationLink } from 'reactstrap'; +import { render, screen } from '@testing-library/react'; import { Mock } from 'ts-mockery'; +import { MemoryRouter } from 'react-router-dom'; import { Paginator } from '../../src/short-urls/Paginator'; import { ShlinkPaginator } from '../../src/api/types'; import { ELLIPSIS } from '../../src/utils/helpers/pagination'; describe('', () => { - let wrapper: ShallowWrapper; const buildPaginator = (pagesCount?: number) => Mock.of({ pagesCount, currentPage: 1 }); - - afterEach(() => wrapper?.unmount()); + const setUp = (paginator?: ShlinkPaginator, currentQueryString?: string) => render( + + + , + ); it.each([ [undefined], @@ -17,8 +19,8 @@ describe('', () => { [buildPaginator(0)], [buildPaginator(1)], ])('renders nothing if the number of pages is below 2', (paginator) => { - wrapper = shallow(); - expect(wrapper.text()).toEqual(''); + const { container } = setUp(paginator); + expect(container.firstChild).toBeNull(); }); it.each([ @@ -33,11 +35,12 @@ describe('', () => { expectedPages, expectedEllipsis, ) => { - wrapper = shallow(); - const items = wrapper.find(PaginationItem); - const ellipsis = items.filterWhere((item) => item.find(PaginationLink).prop('children') === ELLIPSIS); + setUp(paginator); - expect(items).toHaveLength(expectedPages); + const links = screen.getAllByRole('link'); + const ellipsis = screen.queryAllByText(ELLIPSIS); + + expect(links).toHaveLength(expectedPages); expect(ellipsis).toHaveLength(expectedEllipsis); }); @@ -45,10 +48,10 @@ describe('', () => { const paginator = buildPaginator(3); const currentQueryString = '?foo=bar'; - wrapper = shallow(); - const links = wrapper.find(PaginationLink); + setUp(paginator, currentQueryString); + const links = screen.getAllByRole('link'); expect(links).toHaveLength(5); - links.forEach((link) => expect(link.prop('to')).toContain(currentQueryString)); + links.forEach((link) => expect(link).toHaveAttribute('href', expect.stringContaining(currentQueryString))); }); });