Skip to content

Commit 286f2f7

Browse files
committed
fix: test coverage
1 parent 095bffd commit 286f2f7

4 files changed

Lines changed: 103 additions & 3 deletions

File tree

tests/component/sections/homepage/Usage.spec.tsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,20 @@ describe('Usage', () => {
5656
.and('have.attr', 'rel', 'noreferrer noopener')
5757
})
5858

59+
it('falls back to Dataverse when config dataverse name is missing', () => {
60+
Cypress.env('branding', {})
61+
applyTestAppConfig()
62+
63+
cy.customMount(<Usage collectionId={collectionId} />)
64+
65+
cy.findByRole('heading', {
66+
name: 'Publishing your data is easy on Dataverse!'
67+
}).should('be.visible')
68+
cy.findByText(
69+
'Dataverse is a repository for research data. Deposit data and code here.'
70+
).should('be.visible')
71+
})
72+
5973
it('falls back to the default support URL when config support URL is missing', () => {
6074
Cypress.env('homepage', {})
6175
applyTestAppConfig()

tests/component/sections/layout/footer/Footer.spec.tsx

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ describe('Footer component', () => {
1212
const currentYear = new Date().getFullYear().toString()
1313
const defaultFooterEnv = Cypress.env('footer') as AppConfig['footer']
1414

15+
afterEach(() => {
16+
Cypress.env('footer', defaultFooterEnv)
17+
applyTestAppConfig()
18+
})
19+
1520
it('should render footer content', () => {
1621
cy.customMount(FooterMother.withDataverseVersion(sandbox, testVersion))
1722

@@ -33,9 +38,16 @@ describe('Footer component', () => {
3338
cy.wrap(dataverseInfoRepository.getVersion).should('have.been.called')
3439
})
3540

36-
it('should open privacy policy link in new tab', () => {
37-
Cypress.env('footer', defaultFooterEnv)
41+
it('should fall back to Dataverse Project when copyright holder is not configured', () => {
42+
Cypress.env('footer', { privacyPolicyUrl: defaultFooterEnv?.privacyPolicyUrl })
3843
applyTestAppConfig()
44+
45+
cy.customMount(FooterMother.withDataverseVersion(sandbox, testVersion))
46+
47+
cy.contains(`Copyright © ${currentYear}, Dataverse Project`).should('exist')
48+
})
49+
50+
it('should open privacy policy link in new tab', () => {
3951
cy.customMount(FooterMother.withDataverseVersion(sandbox))
4052

4153
cy.findByText('Privacy Policy')

tests/component/sections/shared/file-uploader/useUploadLimit.spec.tsx

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { act, renderHook, waitFor } from '@testing-library/react'
2+
import { ReadError } from '@iqss/dataverse-client-javascript'
23
import { useUploadLimit } from '@/sections/shared/file-uploader/file-upload-input/useUploadLimit'
34
import { DatasetRepository } from '@/dataset/domain/repositories/DatasetRepository'
45

@@ -43,4 +44,46 @@ describe('useUploadLimit', () => {
4344
expect(result.current.uploadLimit).to.deep.equal({})
4445
})
4546
})
47+
48+
describe('Error handling', () => {
49+
it('returns the ReadError message when upload limits fetch fails with ReadError', async () => {
50+
const fetchUploadLimits = cy.stub().rejects(new ReadError('Error message'))
51+
52+
const { result } = renderHook(() =>
53+
useUploadLimit(DATASET_PERSISTENT_ID, datasetRepository, fetchUploadLimits)
54+
)
55+
56+
await act(() => {
57+
expect(result.current.isLoadingUploadLimits).to.deep.equal(true)
58+
return expect(result.current.errorUploadLimits).to.deep.equal(null)
59+
})
60+
61+
await act(() => {
62+
expect(result.current.isLoadingUploadLimits).to.deep.equal(false)
63+
expect(result.current.uploadLimit).to.deep.equal({})
64+
return expect(result.current.errorUploadLimits).to.deep.equal('Error message')
65+
})
66+
})
67+
68+
it('returns the default error message when upload limits fetch fails with a non-ReadError', async () => {
69+
const fetchUploadLimits = cy.stub().rejects('Error message')
70+
71+
const { result } = renderHook(() =>
72+
useUploadLimit(DATASET_PERSISTENT_ID, datasetRepository, fetchUploadLimits)
73+
)
74+
75+
await act(() => {
76+
expect(result.current.isLoadingUploadLimits).to.deep.equal(true)
77+
return expect(result.current.errorUploadLimits).to.deep.equal(null)
78+
})
79+
80+
await act(() => {
81+
expect(result.current.isLoadingUploadLimits).to.deep.equal(false)
82+
expect(result.current.uploadLimit).to.deep.equal({})
83+
return expect(result.current.errorUploadLimits).to.deep.equal(
84+
'Something went wrong getting the upload limits. Try again later.'
85+
)
86+
})
87+
})
88+
})
4689
})

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

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { DatasetTemplates } from '../../../../src/sections/templates/DatasetTemp
22
import { CollectionRepository } from '../../../../src/collection/domain/repositories/CollectionRepository'
33
import { TemplateRepository } from '../../../../src/templates/domain/repositories/TemplateRepository'
44
import { MetadataBlockInfoRepository } from '../../../../src/metadata-block-info/domain/repositories/MetadataBlockInfoRepository'
5-
import { ReadError } from '@iqss/dataverse-client-javascript'
5+
import { ReadError, WriteError } from '@iqss/dataverse-client-javascript'
66
import { CollectionMother } from '../../collection/domain/models/CollectionMother'
77
import { TemplateMother } from './TemplateMother'
88
import { NotImplementedModalProvider } from '../../../../src/sections/not-implemented/NotImplementedModalProvider'
@@ -538,6 +538,37 @@ describe('Dataset Templates', () => {
538538
cy.findByText(/Something went wrong copying the template. Try again later./i).should('exist')
539539
cy.wrap(templateRepository.getTemplatesByCollectionId).should('have.been.calledOnce')
540540
})
541+
542+
it('shows the generic error toast when creating the template fails with WriteError', () => {
543+
const templateWithMetadata = TemplateMother.create({
544+
id: 10,
545+
name: 'Template Copy',
546+
collectionAlias: 'root',
547+
datasetMetadataBlocks: [
548+
{
549+
name: 'citation',
550+
fields: {
551+
title: 'My Title'
552+
}
553+
}
554+
]
555+
})
556+
557+
templateRepository.getTemplatesByCollectionId = cy.stub().resolves([templateWithMetadata])
558+
templateRepository.getTemplate = cy.stub().resolves(templateWithMetadata)
559+
templateRepository.createTemplate = cy.stub().rejects(new WriteError('Write error message'))
560+
metadataBlockInfoRepository.getByCollectionId = cy
561+
.stub()
562+
.resolves([CitationMetadataBlockInfoMother.get()])
563+
564+
mountDatasetTemplates()
565+
566+
cy.findByRole('button', { name: 'Copy' }).click({ force: true })
567+
568+
cy.findByText(/Something went wrong copying the template. Try again later./i).should('exist')
569+
cy.wrap(templateRepository.createTemplate).should('have.been.calledOnce')
570+
cy.wrap(templateRepository.getTemplatesByCollectionId).should('have.been.calledOnce')
571+
})
541572
})
542573

543574
describe('Preview Template', () => {

0 commit comments

Comments
 (0)