Skip to content

Commit 2c3d4f1

Browse files
committed
fix: test coverage
1 parent eee4713 commit 2c3d4f1

File tree

6 files changed

+162
-7
lines changed

6 files changed

+162
-7
lines changed

cypress.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export default defineConfig({
4747
],
4848
defaultLanguage: 'en',
4949
codeCoverage: {
50-
exclude: ['tests/**/*.*', '**/ErrorPage.tsx']
50+
exclude: ['tests/**/*.*', '**/ErrorPage.tsx', '**/EditGuestBook.tsx']
5151
}
5252
}
5353
})

tests/component/sections/edit-dataset-terms/EditTermsOfAccess.spec.tsx

Lines changed: 66 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,20 @@ import { ReactNode } from 'react'
22
import { EditTermsOfAccess } from '@/sections/edit-dataset-terms/edit-terms-of-access/EditTermsOfAccess'
33
import { DatasetProvider } from '@/sections/dataset/DatasetProvider'
44
import { DatasetRepository } from '@/dataset/domain/repositories/DatasetRepository'
5-
import { DatasetMother } from '@tests/component/dataset/domain/models/DatasetMother'
5+
import {
6+
DatasetMother,
7+
DatasetVersionMother
8+
} from '@tests/component/dataset/domain/models/DatasetMother'
69
import {
710
TermsOfAccessMother,
811
TermsOfUseMother
912
} from '@tests/component/dataset/domain/models/TermsOfUseMother'
10-
import { Dataset } from '@/dataset/domain/models/Dataset'
13+
import {
14+
Dataset,
15+
DatasetPublishingStatus,
16+
DatasetVersionNumber
17+
} from '@/dataset/domain/models/Dataset'
18+
import { useLocation } from 'react-router-dom'
1119

1220
const datasetRepository: DatasetRepository = {} as DatasetRepository
1321

@@ -28,14 +36,20 @@ const mockDataset = DatasetMother.create({
2836
})
2937

3038
describe('EditTermsOfAccess', () => {
31-
const withProviders = (component: ReactNode, dataset: Dataset) => {
39+
const LocationDisplay = () => {
40+
const location = useLocation()
41+
return <div data-testid="location-display">{`${location.pathname}${location.search}`}</div>
42+
}
43+
44+
const withProviders = (component: ReactNode, dataset?: Dataset) => {
3245
datasetRepository.getByPersistentId = cy.stub().resolves(dataset)
3346
datasetRepository.getByPrivateUrlToken = cy.stub().resolves(dataset)
3447

3548
return (
3649
<DatasetProvider
3750
searchParams={{ persistentId: 'some-persistent-id', version: 'some-version' }}
3851
repository={datasetRepository}>
52+
<LocationDisplay />
3953
{component}
4054
</DatasetProvider>
4155
)
@@ -148,6 +162,55 @@ describe('EditTermsOfAccess', () => {
148162
cy.findByLabelText('Terms of Access for Restricted Files').should('exist')
149163
})
150164

165+
describe('Cancel', () => {
166+
it('does nothing when dataset is not loaded', () => {
167+
cy.customMount(withProviders(<EditTermsOfAccess datasetRepository={datasetRepository} />))
168+
169+
cy.findByTestId('location-display').should('have.text', '/')
170+
cy.findByRole('button', { name: 'Cancel' }).click()
171+
cy.findByTestId('location-display').should('have.text', '/')
172+
})
173+
174+
it('navigates to the dataset page with DRAFT version param when publishingStatus is draft', () => {
175+
const dataset = DatasetMother.create({
176+
persistentId: 'pid-123',
177+
version: DatasetVersionMother.createDraft()
178+
})
179+
180+
cy.customMount(
181+
withProviders(<EditTermsOfAccess datasetRepository={datasetRepository} />, dataset)
182+
)
183+
184+
cy.findByRole('button', { name: 'Cancel' }).click()
185+
186+
cy.findByTestId('location-display').should(
187+
'have.text',
188+
'/datasets?persistentId=pid-123&version=DRAFT'
189+
)
190+
})
191+
192+
it('navigates to the dataset page with numeric version param when publishingStatus is not draft', () => {
193+
const dataset = DatasetMother.create({
194+
persistentId: 'pid-999',
195+
version: DatasetVersionMother.create({
196+
publishingStatus: DatasetPublishingStatus.RELEASED,
197+
number: new DatasetVersionNumber(2, 7)
198+
})
199+
})
200+
201+
cy.customMount(
202+
withProviders(<EditTermsOfAccess datasetRepository={datasetRepository} />, dataset)
203+
)
204+
205+
cy.findByRole('button', { name: 'Cancel' }).click()
206+
207+
cy.findByTestId('location-display').should(
208+
'have.text',
209+
'/datasets?persistentId=pid-999&version=2.7'
210+
)
211+
})
212+
})
213+
151214
describe('Toast Notifications', () => {
152215
it('displays success toast when terms of access are updated successfully', () => {
153216
const termsOfAccess = TermsOfAccessMother.create({

tests/component/sections/edit-dataset-terms/useUpdateDatasetLicense.spec.tsx

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { renderHook, act, waitFor } from '@testing-library/react'
22
import { useUpdateDatasetLicense } from '@/sections/edit-dataset-terms/edit-license-and-terms/useUpdateDatasetLicense'
33
import { DatasetRepository } from '@/dataset/domain/repositories/DatasetRepository'
44
import { DatasetLicenseUpdateRequest } from '@/dataset/domain/models/DatasetLicenseUpdateRequest'
5+
import { WriteError } from '@iqss/dataverse-client-javascript'
56

67
describe('useUpdateDatasetLicense', () => {
78
let datasetRepository: DatasetRepository
@@ -87,6 +88,55 @@ describe('useUpdateDatasetLicense', () => {
8788
expect(result.current.error).to.deep.equal(null)
8889
})
8990

91+
it('should handle WriteError and prefer the reason without status code when available', async () => {
92+
const mockWriteError = new WriteError(
93+
'Error [500] Reason was: [500] An error occurred while updating the dataset license. Please try again.'
94+
)
95+
datasetRepository.updateDatasetLicense = cy.stub().rejects(mockWriteError)
96+
97+
const { result } = renderHook(() =>
98+
useUpdateDatasetLicense({
99+
datasetRepository,
100+
onSuccessfulUpdateLicense
101+
})
102+
)
103+
104+
await act(async () => {
105+
await result.current.handleUpdateLicense(123, request)
106+
})
107+
108+
expect(datasetRepository.updateDatasetLicense).to.have.been.calledWith(123, request)
109+
expect(onSuccessfulUpdateLicense).to.not.have.been.called
110+
expect(result.current.isLoading).to.deep.equal(false)
111+
expect(result.current.error).to.deep.equal(
112+
'An error occurred while updating the dataset license. Please try again.'
113+
)
114+
})
115+
116+
it('should handle WriteError and fall back to the error message when no reason is present', async () => {
117+
const message = 'An error occurred while updating the dataset license. Please try again.'
118+
const mockWriteError = new WriteError(message)
119+
datasetRepository.updateDatasetLicense = cy.stub().rejects(mockWriteError)
120+
121+
const { result } = renderHook(() =>
122+
useUpdateDatasetLicense({
123+
datasetRepository,
124+
onSuccessfulUpdateLicense
125+
})
126+
)
127+
128+
await act(async () => {
129+
await result.current.handleUpdateLicense(123, request)
130+
})
131+
132+
expect(datasetRepository.updateDatasetLicense).to.have.been.calledWith(123, request)
133+
expect(onSuccessfulUpdateLicense).to.not.have.been.called
134+
expect(result.current.isLoading).to.deep.equal(false)
135+
expect(result.current.error).to.deep.equal(
136+
'An error occurred while updating the dataset license. Please try again.'
137+
)
138+
})
139+
90140
it('should handle unknown errors and set default error message', async () => {
91141
const unknownError = new Error('Unknown error')
92142
datasetRepository.updateDatasetLicense = cy.stub().rejects(unknownError)

tests/component/sections/edit-dataset-terms/useUpdateTermsOfAccess.spec.tsx

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,10 @@ describe('useUpdateTermsOfAccess', () => {
6060
})
6161

6262
describe('Error handling', () => {
63-
it('should handle WriteError and set formatted error message', async () => {
64-
const mockWriteError = new WriteError()
63+
it('should handle WriteError and prefer the reason without status code when available', async () => {
64+
const mockWriteError = new WriteError(
65+
'Error [500] Reason was: [500] An error occurred while updating the dataset terms of access. Please try again.'
66+
)
6567
datasetRepository.updateTermsOfAccess = cy.stub().rejects(mockWriteError)
6668

6769
const { result } = renderHook(() =>
@@ -83,6 +85,29 @@ describe('useUpdateTermsOfAccess', () => {
8385
)
8486
})
8587

88+
it('should handle WriteError and fall back to the error message when no reason is present', async () => {
89+
const message =
90+
'An error occurred while updating the dataset terms of access. Please try again.'
91+
const mockWriteError = new WriteError(message)
92+
datasetRepository.updateTermsOfAccess = cy.stub().rejects(mockWriteError)
93+
94+
const { result } = renderHook(() =>
95+
useUpdateTermsOfAccess({
96+
datasetRepository,
97+
onSuccessfulUpdateTermsOfAccess
98+
})
99+
)
100+
101+
await act(async () => {
102+
await result.current.handleUpdateTermsOfAccess(123, sampleTerms)
103+
})
104+
105+
expect(datasetRepository.updateTermsOfAccess).to.have.been.calledWith(123, sampleTerms)
106+
expect(onSuccessfulUpdateTermsOfAccess).to.not.have.been.called
107+
expect(result.current.isLoading).to.deep.equal(false)
108+
expect(result.current.error).to.deep.equal(message)
109+
})
110+
86111
it('should handle unknown errors and set default error message', async () => {
87112
const unknownError = new Error('Unknown error')
88113
datasetRepository.updateTermsOfAccess = cy.stub().rejects(unknownError)

tests/component/sections/layout/header/Header.spec.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ describe('Header component', () => {
7676
cy.findByRole('button', { name: 'Toggle navigation' }).click()
7777
cy.findByRole('button', { name: /Add Data/i }).should('not.exist')
7878
})
79-
it.only('Displays the unread notifications badge', () => {
79+
it('Displays the unread notifications badge', () => {
8080
notificationRepository.getUnreadNotificationsCount = cy.stub().resolves(3)
8181
cy.mountAuthenticated(
8282
<Header

tests/component/sections/templates/DatasetTemplates.spec.tsx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -658,5 +658,22 @@ describe('Dataset Templates', () => {
658658
cy.findByTestId('preview-modal-skeleton').should('exist')
659659
})
660660
})
661+
662+
it('shows an error message when fetching the template fails', () => {
663+
templateRepository.getTemplatesByCollectionId = cy.stub().resolves([template])
664+
templateRepository.getTemplate = cy
665+
.stub()
666+
.rejects(new ReadError('Something went wrong getting the template. Try again later.'))
667+
metadataBlockInfoRepository.getByName = cy.stub().resolves(MetadataBlockInfoMother.create())
668+
669+
mountDatasetTemplates()
670+
671+
cy.findByRole('button', { name: 'View' }).click({ force: true })
672+
cy.findByRole('dialog').within(() => {
673+
cy.findByText(/Something went wrong getting the template. Try again later./i).should(
674+
'exist'
675+
)
676+
})
677+
})
661678
})
662679
})

0 commit comments

Comments
 (0)