@@ -3,15 +3,17 @@ import { EditDatasetTerms } from '@/sections/edit-dataset-terms/EditDatasetTerms
33import { DatasetProvider } from '@/sections/dataset/DatasetProvider'
44import { LicenseRepository } from '@/licenses/domain/repositories/LicenseRepository'
55import { DatasetRepository } from '@/dataset/domain/repositories/DatasetRepository'
6- import { EditDatasetTermsHelper } from '@/sections/edit-dataset-terms/EditDatasetTermsHelper'
6+ import {
7+ EditDatasetTermsHelper ,
8+ EditDatasetTermsTabKey
9+ } from '@/sections/edit-dataset-terms/EditDatasetTermsHelper'
710import { DatasetMother } from '@tests/component/dataset/domain/models/DatasetMother'
811import {
912 TermsOfUseMother ,
1013 TermsOfAccessMother
1114} from '@tests/component/dataset/domain/models/TermsOfUseMother'
1215import { Dataset } from '@/dataset/domain/models/Dataset'
1316import { License } from '@/licenses/domain/models/License'
14-
1517const licenseRepository : LicenseRepository = { } as LicenseRepository
1618const datasetRepository : DatasetRepository = { } as DatasetRepository
1719
@@ -46,6 +48,50 @@ const mockLicenses: License[] = [
4648 }
4749]
4850
51+ describe ( 'EditDatasetTermsHelper' , ( ) => {
52+ describe ( 'defineSelectedTabKey' , ( ) => {
53+ it ( 'should return the correct tab key when a tab query param is present in the URL' , ( ) => {
54+ const searchParams = new URLSearchParams ( )
55+ searchParams . set (
56+ EditDatasetTermsHelper . EDIT_DATASET_TERMS_TAB_QUERY_KEY ,
57+ 'restrictedFilesTerms'
58+ )
59+
60+ const result = EditDatasetTermsHelper . defineSelectedTabKey ( searchParams )
61+
62+ expect ( result ) . to . equal (
63+ EditDatasetTermsHelper . EDIT_DATASET_TERMS_TABS_KEYS . restrictedFilesTerms
64+ )
65+ } )
66+
67+ it ( 'should return the correct tab key for guestBook' , ( ) => {
68+ const searchParams = new URLSearchParams ( )
69+ searchParams . set ( EditDatasetTermsHelper . EDIT_DATASET_TERMS_TAB_QUERY_KEY , 'guestBook' )
70+
71+ const result = EditDatasetTermsHelper . defineSelectedTabKey ( searchParams )
72+
73+ expect ( result ) . to . equal ( EditDatasetTermsHelper . EDIT_DATASET_TERMS_TABS_KEYS . guestBook )
74+ } )
75+
76+ it ( 'should return the dataset terms tab key as default if the tab query param is not present in the URL' , ( ) => {
77+ const searchParams = new URLSearchParams ( )
78+
79+ const result = EditDatasetTermsHelper . defineSelectedTabKey ( searchParams )
80+
81+ expect ( result ) . to . equal ( EditDatasetTermsHelper . EDIT_DATASET_TERMS_TABS_KEYS . datasetTerms )
82+ } )
83+
84+ it ( 'should return the dataset terms tab key as default if the tab query param is invalid' , ( ) => {
85+ const searchParams = new URLSearchParams ( )
86+ searchParams . set ( EditDatasetTermsHelper . EDIT_DATASET_TERMS_TAB_QUERY_KEY , 'doesNotExist' )
87+
88+ const result = EditDatasetTermsHelper . defineSelectedTabKey ( searchParams )
89+
90+ expect ( result ) . to . equal ( EditDatasetTermsHelper . EDIT_DATASET_TERMS_TABS_KEYS . datasetTerms )
91+ } )
92+ } )
93+ } )
94+
4995describe ( 'EditDatasetTerms' , ( ) => {
5096 const withProviders = ( component : ReactNode , dataset : Dataset ) => {
5197 datasetRepository . getByPersistentId = cy . stub ( ) . resolves ( dataset )
@@ -64,6 +110,25 @@ describe('EditDatasetTerms', () => {
64110 licenseRepository . getAvailableStandardLicenses = cy . stub ( ) . resolves ( mockLicenses )
65111 } )
66112
113+ it ( 'renders NotFoundPage when dataset is missing' , ( ) => {
114+ datasetRepository . getByPersistentId = cy . stub ( ) . resolves ( undefined )
115+ datasetRepository . getByPrivateUrlToken = cy . stub ( ) . resolves ( undefined )
116+
117+ cy . customMount (
118+ < DatasetProvider
119+ searchParams = { { persistentId : 'some-persistent-id' , version : 'some-version' } }
120+ repository = { datasetRepository } >
121+ < EditDatasetTerms
122+ defaultActiveTabKey = { EditDatasetTermsHelper . EDIT_DATASET_TERMS_TABS_KEYS . datasetTerms }
123+ licenseRepository = { licenseRepository }
124+ datasetRepository = { datasetRepository }
125+ />
126+ </ DatasetProvider >
127+ )
128+
129+ cy . findByTestId ( 'not-found-page' ) . should ( 'exist' )
130+ } )
131+
67132 describe ( 'Tab Navigation' , ( ) => {
68133 it ( 'renders all three tabs' , ( ) => {
69134 const dataset = DatasetMother . create ( {
@@ -236,6 +301,100 @@ describe('EditDatasetTerms', () => {
236301 'true'
237302 )
238303 } )
304+
305+ it ( 'shows unsaved changes modal when restricted files form is dirty' , ( ) => {
306+ const dataset = DatasetMother . create ( {
307+ license : mockLicenses [ 0 ] ,
308+ termsOfUse : TermsOfUseMother . withoutCustomTerms ( )
309+ } )
310+
311+ cy . customMount (
312+ withProviders (
313+ < EditDatasetTerms
314+ defaultActiveTabKey = {
315+ EditDatasetTermsHelper . EDIT_DATASET_TERMS_TABS_KEYS . restrictedFilesTerms
316+ }
317+ licenseRepository = { licenseRepository }
318+ datasetRepository = { datasetRepository }
319+ /> ,
320+ dataset
321+ )
322+ )
323+
324+ cy . findByLabelText ( 'Terms of Access for Restricted Files' ) . clear ( ) . type ( 'Updated terms' )
325+
326+ cy . findByRole ( 'tab' , { name : 'Dataset Terms' } ) . click ( )
327+
328+ cy . findByText ( 'Unsaved Changes' ) . should ( 'exist' )
329+ } )
330+
331+ it ( 'switches tabs without unsaved modal when active tab is guest book' , ( ) => {
332+ const dataset = DatasetMother . create ( {
333+ license : mockLicenses [ 0 ] ,
334+ termsOfUse : TermsOfUseMother . withoutCustomTerms ( )
335+ } )
336+
337+ cy . customMount (
338+ withProviders (
339+ < EditDatasetTerms
340+ defaultActiveTabKey = { EditDatasetTermsHelper . EDIT_DATASET_TERMS_TABS_KEYS . guestBook }
341+ licenseRepository = { licenseRepository }
342+ datasetRepository = { datasetRepository }
343+ /> ,
344+ dataset
345+ )
346+ )
347+
348+ cy . findByRole ( 'tab' , { name : 'Dataset Terms' } ) . click ( )
349+ cy . findByText ( 'Unsaved Changes' ) . should ( 'not.exist' )
350+ cy . findByRole ( 'tab' , { name : 'Dataset Terms' } ) . should ( 'have.attr' , 'aria-selected' , 'true' )
351+ } )
352+
353+ it ( 'switches tabs without unsaved modal when active tab key is unknown' , ( ) => {
354+ const dataset = DatasetMother . create ( {
355+ license : mockLicenses [ 0 ] ,
356+ termsOfUse : TermsOfUseMother . withoutCustomTerms ( )
357+ } )
358+
359+ cy . customMount (
360+ withProviders (
361+ < EditDatasetTerms
362+ // Force an invalid key to hit the default branch in getCurrentFormDirtyState
363+ defaultActiveTabKey = { 'unknown-tab' as unknown as EditDatasetTermsTabKey }
364+ licenseRepository = { licenseRepository }
365+ datasetRepository = { datasetRepository }
366+ /> ,
367+ dataset
368+ )
369+ )
370+
371+ cy . findByRole ( 'tab' , { name : 'Dataset Terms' } ) . click ( )
372+ cy . findByText ( 'Unsaved Changes' ) . should ( 'not.exist' )
373+ cy . findByRole ( 'tab' , { name : 'Dataset Terms' } ) . should ( 'have.attr' , 'aria-selected' , 'true' )
374+ } )
375+
376+ it ( 'does nothing when selecting the currently active tab' , ( ) => {
377+ const dataset = DatasetMother . create ( {
378+ license : mockLicenses [ 0 ] ,
379+ termsOfUse : TermsOfUseMother . withoutCustomTerms ( )
380+ } )
381+
382+ cy . customMount (
383+ withProviders (
384+ < EditDatasetTerms
385+ defaultActiveTabKey = { EditDatasetTermsHelper . EDIT_DATASET_TERMS_TABS_KEYS . datasetTerms }
386+ licenseRepository = { licenseRepository }
387+ datasetRepository = { datasetRepository }
388+ /> ,
389+ dataset
390+ )
391+ )
392+
393+ cy . get ( 'select' ) . select ( 'CC BY 4.0' )
394+ cy . findByRole ( 'tab' , { name : 'Dataset Terms' } ) . click ( )
395+ cy . findByText ( 'Unsaved Changes' ) . should ( 'not.exist' )
396+ cy . findByRole ( 'tab' , { name : 'Dataset Terms' } ) . should ( 'have.attr' , 'aria-selected' , 'true' )
397+ } )
239398 } )
240399
241400 describe ( 'Dataset Terms Tab Integration' , ( ) => {
0 commit comments