diff --git a/logicaldoc-core/src/main/java/com/logicaldoc/core/document/HibernateVersionDAO.java b/logicaldoc-core/src/main/java/com/logicaldoc/core/document/HibernateVersionDAO.java index fea3433c1..817691bb8 100644 --- a/logicaldoc-core/src/main/java/com/logicaldoc/core/document/HibernateVersionDAO.java +++ b/logicaldoc-core/src/main/java/com/logicaldoc/core/document/HibernateVersionDAO.java @@ -23,7 +23,7 @@ import com.logicaldoc.util.io.FileUtil; /** - * Hibernate implementation of DocumentDAO + * Hibernate implementation of VersionDAO * * @author Marco Meschieri - LogicalDOC * @since 3.0 @@ -145,11 +145,10 @@ private void deleteOldestVersions(List versions, int maxVersions) { if (versions.size() <= maxVersions) return; - // Meke sure to sort the versions by descending version spec + // Make sure to sort the versions by descending version spec Collections.sort(versions, Collections.reverseOrder()); - List oldestVersionsToDelete = versions.stream().skip(Math.max(0, versions.size() - maxVersions)) - .toList(); + List oldestVersionsToDelete = versions.stream().skip(maxVersions).toList(); for (Version versionToDelete : oldestVersionsToDelete) deleteVersion(versionToDelete, PersistentObject.DELETED_CODE_DEFAULT); } diff --git a/logicaldoc-core/src/test/java/com/logicaldoc/core/document/HibernateVersionDAOTest.java b/logicaldoc-core/src/test/java/com/logicaldoc/core/document/HibernateVersionDAOTest.java index 37d7b1843..08747e7eb 100644 --- a/logicaldoc-core/src/test/java/com/logicaldoc/core/document/HibernateVersionDAOTest.java +++ b/logicaldoc-core/src/test/java/com/logicaldoc/core/document/HibernateVersionDAOTest.java @@ -16,6 +16,8 @@ import com.logicaldoc.core.AbstractCoreTestCase; import com.logicaldoc.core.PersistenceException; import com.logicaldoc.core.security.user.User; +import com.logicaldoc.core.store.Storer; +import com.logicaldoc.util.Context; import com.logicaldoc.util.plugin.PluginException; /** @@ -27,7 +29,7 @@ public class HibernateVersionDAOTest extends AbstractCoreTestCase { // Instance under test - private VersionDAO dao; + private VersionDAO testSubject; private DocumentDAO docDao; @@ -37,46 +39,46 @@ public void setUp() throws FileNotFoundException, IOException, SQLException, Plu // Retrieve the instance under test from spring context. Make sure that // it is an HibernateVersionDAO - dao = (VersionDAO) context.getBean("VersionDAO"); + testSubject = (VersionDAO) context.getBean("VersionDAO"); docDao = (DocumentDAO) context.getBean("DocumentDAO"); } @Test public void testFindByDocumentId() throws PersistenceException { - List versions = dao.findByDocId(1); + List versions = testSubject.findByDocId(1); assertEquals(2, versions.size()); - assertTrue(versions.contains(dao.findByVersion(1, "0.1"))); - assertTrue(versions.contains(dao.findByVersion(1, "0.2"))); + assertTrue(versions.contains(testSubject.findByVersion(1, "0.1"))); + assertTrue(versions.contains(testSubject.findByVersion(1, "0.2"))); - versions = dao.findByDocId(2); + versions = testSubject.findByDocId(2); assertEquals(0, versions.size()); - versions = dao.findByDocId(99); + versions = testSubject.findByDocId(99); assertEquals(0, versions.size()); } @Test public void testFindByVersion() throws PersistenceException { - Version version = dao.findByVersion(1, "0.2"); + Version version = testSubject.findByVersion(1, "0.2"); assertNotNull(version); assertEquals("0.2", version.getVersion()); - version = dao.findByVersion(1, "xxxx"); + version = testSubject.findByVersion(1, "xxxx"); assertNull(version); } @Test public void testFindByFileVersion() throws PersistenceException { - Version version = dao.findByFileVersion(1, "0.1"); + Version version = testSubject.findByFileVersion(1, "0.1"); assertNotNull(version); assertEquals("0.1", version.getFileVersion()); - version = dao.findByVersion(1, "30"); + version = testSubject.findByVersion(1, "30"); assertNull(version); } @Test - public void testStore() throws PersistenceException, InterruptedException { + public void testStore() throws PersistenceException, InterruptedException, IOException { Document doc = docDao.findById(1); docDao.initialize(doc); assertEquals("1.0", doc.getVersion()); @@ -85,14 +87,102 @@ public void testStore() throws PersistenceException, InterruptedException { user.setUsername("admin"); user.setName("xx"); user.setFirstName("xx"); + + assertEquals(2, testSubject.findByDocId(doc.getId()).size()); + Storer storer = (Storer) Context.get().getBean(Storer.class); + for (Version ver : testSubject.findByDocId(doc.getId())) { + String res = storer.getResourceName(doc.getId(), ver.getFileVersion(), null); + storer.store(this.getClass().getResourceAsStream("/data.sql"), doc.getId(), res); + } + for (Version ver : testSubject.findByDocId(doc.getId())) { + String res = storer.getResourceName(doc.getId(), ver.getFileVersion(), null); + storer.exists(doc.getId(), res); + } + Version version = Version.create(doc, user, "", DocumentEvent.STORED.toString(), true); - dao.store(version); - - assertEquals("1.0", dao.findById(version.getId()).getVersion()); - + testSubject.store(version); + assertEquals("1.0", testSubject.findById(version.getId()).getVersion()); + + String resourceName = storer.getResourceName(doc.getId(), version.getFileVersion(), null); + storer.store(this.getClass().getResourceAsStream("/data.sql"), doc.getId(), resourceName); + + assertEquals(2, testSubject.findByDocId(doc.getId()).size()); + for (Version ver : testSubject.findByDocId(doc.getId())) { + String res = storer.getResourceName(doc.getId(), ver.getFileVersion(), null); + storer.exists(doc.getId(), res); + } + version = Version.create(doc, user, "", DocumentEvent.CHANGED.toString(), true); - dao.store(version); - + testSubject.store(version); assertEquals("2.0", version.getVersion()); + + resourceName = storer.getResourceName(doc.getId(), version.getFileVersion(), null); + storer.store(this.getClass().getResourceAsStream("/data.sql"), doc.getId(), resourceName); + + assertEquals(2, testSubject.findByDocId(doc.getId()).size()); + for (Version ver : testSubject.findByDocId(doc.getId())) { + String res = storer.getResourceName(doc.getId(), ver.getFileVersion(), null); + storer.exists(doc.getId(), res); + } + + version = Version.create(doc, user, "", DocumentEvent.CHECKEDIN.toString(), false); + testSubject.store(version); + assertEquals("2.1", version.getVersion()); + + resourceName = storer.getResourceName(doc.getId(), version.getFileVersion(), null); + storer.store(this.getClass().getResourceAsStream("/data.sql"), doc.getId(), resourceName); + + assertEquals(2, testSubject.findByDocId(doc.getId()).size()); + for (Version ver : testSubject.findByDocId(doc.getId())) { + String res = storer.getResourceName(doc.getId(), ver.getFileVersion(), null); + storer.exists(doc.getId(), res); + } + } + + @Test + public void testStoreMaxVersions() throws PersistenceException, InterruptedException, IOException { + Context.get().getProperties().setProperty("document.maxversions", "6"); + + Document doc = docDao.findById(1); + docDao.initialize(doc); + assertEquals("1.0", doc.getVersion()); + User user = new User(); + user.setId(1); + user.setUsername("admin"); + user.setName("xx"); + user.setFirstName("xx"); + + assertEquals(2, testSubject.findByDocId(doc.getId()).size()); + + Version version1 = Version.create(doc, user, "", DocumentEvent.STORED.toString(), true); + testSubject.store(version1); + + Storer storer = (Storer) Context.get().getBean(Storer.class); + String resourceName = storer.getResourceName(doc.getId(), version1.getFileVersion(), null); + storer.store(this.getClass().getResourceAsStream("/data.sql"), doc.getId(), resourceName); + + Version version2 = Version.create(doc, user, "", DocumentEvent.CHANGED.toString(), false); + testSubject.store(version2); + resourceName = storer.getResourceName(doc.getId(), version2.getFileVersion(), null); + storer.store(this.getClass().getResourceAsStream("/data.sql"), doc.getId(), resourceName); + assertTrue(storer.exists(doc.getId(), resourceName)); + + assertEquals(4, testSubject.findByDocId(doc.getId()).size()); + + Version version3 = Version.create(doc, user, "", DocumentEvent.CHECKEDIN.toString(), true); + testSubject.store(version3); + resourceName = storer.getResourceName(doc.getId(), version3.getFileVersion(), null); + storer.store(this.getClass().getResourceAsStream("/data.sql"), doc.getId(), resourceName); + assertTrue(storer.exists(doc.getId(), resourceName)); + + assertEquals(5, testSubject.findByDocId(doc.getId()).size()); + + Version version4 = Version.create(doc, user, "", DocumentEvent.CHECKEDIN.toString(), false); + testSubject.store(version4); + resourceName = storer.getResourceName(doc.getId(), version4.getFileVersion(), null); + storer.store(this.getClass().getResourceAsStream("/data.sql"), doc.getId(), resourceName); + assertTrue(storer.exists(doc.getId(), resourceName)); + + assertEquals(6, testSubject.findByDocId(doc.getId()).size()); } } \ No newline at end of file