@@ -1555,6 +1555,204 @@ describe('DatasetsRepository', () => {
15551555 } , 180000 )
15561556 } )
15571557
1558+ describe ( 'getDatasetVersions' , ( ) => {
1559+ const testDatasetVersionsCollectionAlias = 'testDatasetVersionsCollection'
1560+
1561+ beforeAll ( async ( ) => {
1562+ await createCollectionViaApi ( testDatasetVersionsCollectionAlias )
1563+ await publishCollectionViaApi ( testDatasetVersionsCollectionAlias )
1564+ await setStorageDriverViaApi ( testDatasetVersionsCollectionAlias , 'LocalStack' )
1565+ } )
1566+
1567+ afterAll ( async ( ) => {
1568+ await deleteCollectionViaApi ( testDatasetVersionsCollectionAlias )
1569+ } )
1570+
1571+ test ( 'should return dataset versions when dataset exists' , async ( ) => {
1572+ const testDatasetIds = await createDataset . execute (
1573+ TestConstants . TEST_NEW_DATASET_DTO ,
1574+ testDatasetVersionsCollectionAlias
1575+ )
1576+
1577+ const actual = await sut . getDatasetVersions ( testDatasetIds . numericId )
1578+
1579+ expect ( actual . versions . length ) . toBeGreaterThan ( 0 )
1580+ expect ( actual . totalCount ) . toBeGreaterThan ( 0 )
1581+ expect ( actual . versions [ 0 ] . versionState ) . toBe ( 'DRAFT' )
1582+ expect ( actual . versions [ 0 ] . latestVersionPublishingState ) . toBe ( 'DRAFT' )
1583+ expect ( actual . versions [ 0 ] . isInReviewState ) . toBe ( false )
1584+
1585+ await deleteUnpublishedDatasetViaApi ( testDatasetIds . numericId )
1586+ } )
1587+
1588+ test ( 'should return dataset versions correctly after first publish' , async ( ) => {
1589+ const testDatasetIds = await createDataset . execute (
1590+ TestConstants . TEST_NEW_DATASET_DTO ,
1591+ testDatasetVersionsCollectionAlias
1592+ )
1593+ await publishDataset . execute ( testDatasetIds . numericId , VersionUpdateType . MAJOR )
1594+
1595+ await waitForNoLocks ( testDatasetIds . numericId , 10 )
1596+
1597+ const actual = await sut . getDatasetVersions ( testDatasetIds . numericId )
1598+
1599+ expect ( actual . versions . length ) . toBeGreaterThan ( 0 )
1600+ expect ( actual . totalCount ) . toBeGreaterThan ( 0 )
1601+ expect ( actual . versions [ 0 ] . versionNumber ) . toBe ( 1 )
1602+ expect ( actual . versions [ 0 ] . versionMinorNumber ) . toBe ( 0 )
1603+ expect ( actual . versions [ 0 ] . versionState ) . toBe ( 'RELEASED' )
1604+ expect ( actual . versions [ 0 ] . isInReviewState ) . toBe ( false )
1605+
1606+ await deletePublishedDatasetViaApi ( testDatasetIds . persistentId )
1607+ } )
1608+
1609+ test ( 'should return dataset versions correctly after deaccessioned' , async ( ) => {
1610+ const testDatasetIds = await createDataset . execute (
1611+ TestConstants . TEST_NEW_DATASET_DTO ,
1612+ testDatasetVersionsCollectionAlias
1613+ )
1614+ await publishDataset . execute ( testDatasetIds . numericId , VersionUpdateType . MAJOR )
1615+
1616+ await waitForNoLocks ( testDatasetIds . numericId , 10 )
1617+
1618+ await deaccessionDatasetViaApi ( testDatasetIds . numericId , '1.0' )
1619+
1620+ const actual = await sut . getDatasetVersions ( testDatasetIds . numericId )
1621+
1622+ expect ( actual . versions . length ) . toBeGreaterThan ( 0 )
1623+ expect ( actual . totalCount ) . toBeGreaterThan ( 0 )
1624+ expect ( actual . versions [ 0 ] . versionNumber ) . toBe ( 1 )
1625+ expect ( actual . versions [ 0 ] . versionMinorNumber ) . toBe ( 0 )
1626+ expect ( actual . versions [ 0 ] . versionState ) . toBe ( 'DEACCESSIONED' )
1627+ expect ( actual . versions [ 0 ] . isInReviewState ) . toBe ( false )
1628+
1629+ await deletePublishedDatasetViaApi ( testDatasetIds . persistentId )
1630+ } )
1631+
1632+ test ( 'should return dataset versions correctly after 1st publish and metadata fields update' , async ( ) => {
1633+ const testDatasetIds = await createDataset . execute (
1634+ TestConstants . TEST_NEW_DATASET_DTO ,
1635+ testDatasetVersionsCollectionAlias
1636+ )
1637+ await publishDataset . execute ( testDatasetIds . numericId , VersionUpdateType . MAJOR )
1638+
1639+ await waitForNoLocks ( testDatasetIds . numericId , 10 )
1640+
1641+ const metadataBlocksRepository = new MetadataBlocksRepository ( )
1642+ const citationMetadataBlock = await metadataBlocksRepository . getMetadataBlockByName (
1643+ 'citation'
1644+ )
1645+
1646+ await sut . updateDataset (
1647+ testDatasetIds . numericId ,
1648+ {
1649+ license : createDatasetLicenseModel ( true ) ,
1650+ metadataBlockValues : [
1651+ {
1652+ name : 'citation' ,
1653+ fields : {
1654+ title : 'Updated Dataset Title'
1655+ }
1656+ }
1657+ ]
1658+ } ,
1659+ [ citationMetadataBlock ]
1660+ )
1661+
1662+ const actual = await sut . getDatasetVersions ( testDatasetIds . numericId )
1663+
1664+ expect ( actual . versions . length ) . toEqual ( 2 )
1665+ expect ( actual . totalCount ) . toEqual ( 2 )
1666+ expect ( actual . versions [ 0 ] . versionState ) . toBe ( 'DRAFT' )
1667+ expect ( actual . versions [ 0 ] . isInReviewState ) . toBe ( false )
1668+
1669+ expect ( actual . versions [ 1 ] . versionNumber ) . toBe ( 1 )
1670+ expect ( actual . versions [ 1 ] . versionMinorNumber ) . toBe ( 0 )
1671+ expect ( actual . versions [ 1 ] . versionState ) . toBe ( 'RELEASED' )
1672+
1673+ await deletePublishedDatasetViaApi ( testDatasetIds . persistentId )
1674+ } )
1675+
1676+ test ( 'should return error when dataset does not exist' , async ( ) => {
1677+ const expectedError = new ReadError (
1678+ `[404] Dataset with ID ${ nonExistentTestDatasetId } not found.`
1679+ )
1680+
1681+ await expect ( sut . getDatasetVersions ( nonExistentTestDatasetId ) ) . rejects . toThrow (
1682+ expectedError
1683+ )
1684+ } )
1685+
1686+ test ( 'should return dataset versions with pagination' , async ( ) => {
1687+ const testDatasetIds = await createDataset . execute (
1688+ TestConstants . TEST_NEW_DATASET_DTO ,
1689+ testDatasetVersionsCollectionAlias
1690+ )
1691+
1692+ await publishDataset . execute ( testDatasetIds . numericId , VersionUpdateType . MAJOR )
1693+ await waitForNoLocks ( testDatasetIds . numericId , 10 )
1694+
1695+ const metadataBlocksRepository = new MetadataBlocksRepository ( )
1696+ const citationMetadataBlock = await metadataBlocksRepository . getMetadataBlockByName (
1697+ 'citation'
1698+ )
1699+
1700+ for ( let i = 1 ; i <= 21 ; i ++ ) {
1701+ await sut . updateDataset (
1702+ testDatasetIds . numericId ,
1703+ {
1704+ metadataBlockValues : [
1705+ {
1706+ name : 'citation' ,
1707+ fields : {
1708+ title : `Updated Dataset Title - Version ${ i } `
1709+ }
1710+ }
1711+ ]
1712+ } ,
1713+ [ citationMetadataBlock ]
1714+ )
1715+
1716+ await publishDataset . execute ( testDatasetIds . numericId , VersionUpdateType . MINOR )
1717+ await waitForNoLocks ( testDatasetIds . numericId , 10 )
1718+ }
1719+
1720+ const firstPage = await sut . getDatasetVersions ( testDatasetIds . numericId , 5 , 0 )
1721+
1722+ expect ( firstPage . versions . length ) . toBe ( 5 )
1723+ expect ( firstPage . totalCount ) . toBe ( 22 )
1724+ expect ( firstPage . versions [ 0 ] . versionNumber ) . toBe ( 1 )
1725+ expect ( firstPage . versions [ 0 ] . versionMinorNumber ) . toBe ( 21 )
1726+ expect ( firstPage . versions [ 4 ] . versionNumber ) . toBe ( 1 )
1727+ expect ( firstPage . versions [ 4 ] . versionMinorNumber ) . toBe ( 17 )
1728+
1729+ // Test pagination with limit=5, offset=5 (second page)
1730+ const secondPage = await sut . getDatasetVersions ( testDatasetIds . numericId , 5 , 5 )
1731+ expect ( secondPage . versions . length ) . toBe ( 5 )
1732+ expect ( secondPage . totalCount ) . toBe ( 22 )
1733+ expect ( firstPage . versions [ 0 ] . versionNumber ) . toBe ( 1 )
1734+ expect ( firstPage . versions [ 0 ] . versionMinorNumber ) . toBe ( 16 )
1735+ expect ( firstPage . versions [ 4 ] . versionNumber ) . toBe ( 1 )
1736+ expect ( firstPage . versions [ 4 ] . versionMinorNumber ) . toBe ( 12 )
1737+
1738+ // Test pagination with limit=5, offset=10 (third page)
1739+ const thirdPage = await sut . getDatasetVersions ( testDatasetIds . numericId , 5 , 10 )
1740+ expect ( thirdPage . versions . length ) . toBe ( 5 )
1741+ expect ( thirdPage . totalCount ) . toBe ( 22 )
1742+ expect ( firstPage . versions [ 0 ] . versionNumber ) . toBe ( 1 )
1743+ expect ( firstPage . versions [ 0 ] . versionMinorNumber ) . toBe ( 11 )
1744+ expect ( firstPage . versions [ 4 ] . versionNumber ) . toBe ( 1 )
1745+ expect ( firstPage . versions [ 4 ] . versionMinorNumber ) . toBe ( 7 )
1746+
1747+ // Test that all versions are returned without pagination
1748+ const allVersions = await sut . getDatasetVersions ( testDatasetIds . numericId )
1749+ expect ( allVersions . versions . length ) . toBe ( 22 ) // 1 initial + 21 updates
1750+ expect ( allVersions . totalCount ) . toBe ( 22 )
1751+
1752+ await deletePublishedDatasetViaApi ( testDatasetIds . persistentId )
1753+ } , 180000 )
1754+ } )
1755+
15581756 describe ( 'getDatasetDownloadCount' , ( ) => {
15591757 const testGetDatasetDownloadCountCollectionAlias = 'testGetDatasetDownloadCountCollection'
15601758 let testDatasetIds : CreatedDatasetIdentifiers
0 commit comments