/** * * geo-platform * Rich webgis framework * http://geo-platform.org * ==================================================================== * * Copyright (C) 2008-2017 geoSDI Group (CNR IMAA - Potenza - ITALY). * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. This program is distributed in the * hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR * A PARTICULAR PURPOSE. See the GNU General Public License * for more details. You should have received a copy of the GNU General * Public License along with this program. If not, see http://www.gnu.org/licenses/ * * ==================================================================== * * Linking this library statically or dynamically with other modules is * making a combined work based on this library. Thus, the terms and * conditions of the GNU General Public License cover the whole combination. * * As a special exception, the copyright holders of this library give you permission * to link this library with independent modules to produce an executable, regardless * of the license terms of these independent modules, and to copy and distribute * the resulting executable under terms of your choice, provided that you also meet, * for each linked independent module, the terms and conditions of the license of * that module. An independent module is a module which is not derived from or * based on this library. If you modify this library, you may extend this exception * to your version of the library, but you are not obligated to do so. If you do not * wish to do so, delete this exception statement from your version. */ package org.geosdi.geoplatform.initializer; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.geosdi.geoplatform.core.model.GPFolder; import org.geosdi.geoplatform.core.model.GPLayer; import org.geosdi.geoplatform.core.model.GPLayerInfo; import org.geosdi.geoplatform.core.model.GPOrganization; import org.geosdi.geoplatform.core.model.GPProject; import org.geosdi.geoplatform.core.model.GPRasterLayer; import org.geosdi.geoplatform.core.model.GPUser; import org.geosdi.geoplatform.core.model.GPVectorLayer; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.springframework.security.acls.domain.BasePermission; /** * This test is not intended to test the business logic but only the correctness * of the updates on DAOs. * * @author Vincenzo Monteverde <vincenzo.monteverde@geosdi.org> */ public class GPInitializerTest extends BaseInitializerTest { // User private String usernameUserPositionTest = "user_position_test"; private GPUser userPositionTest; // Projects private GPProject userPositionTestProject; // Folders private GPFolder rootFolder; private GPFolder folderA; private GPFolder folderB; // Layers private GPRasterLayer rasterLayer; private GPVectorLayer vectorLayer; // Position of the last leaf in preorder visit (in business tree, equal 0) private int beginPosition = 333000; // Position of the firt child of the root (in business tree, equal total_number_of_element) private int endPosition = -1; // > beginPosition @Before public void setUp() { logger.trace("\n\t@@@ " + getClass().getSimpleName() + ".setUp @@@"); organizationTest = new GPOrganization("geoSDI_dao_test"); organizationDAO.persist(organizationTest); userPositionTest = super.insertUser(usernameUserPositionTest, organizationTest); endPosition = beginPosition + 930; userPositionTestProject = super.createProject("user_project_gp_test", false, 5, new Date(System.currentTimeMillis())); projectDAO.persist(userPositionTestProject); // super.insertBindingUserProject(userPositionTest, userPositionTestProject, BasePermission.ADMINISTRATION.getMask(), true); // rootFolder = super.createFolder("folder_of_" + usernameUserPositionTest, userPositionTestProject, null, beginPosition + 900); // 333930 rootFolder.setNumberOfDescendants(13); rootFolder.setChecked(false); // folderDAO.persist(rootFolder); folderA = super.createFolder("folder_position_test_A", userPositionTestProject, rootFolder, beginPosition + 600); // 333630 folderB = super.createFolder("folder_position_test_B", userPositionTestProject, rootFolder, beginPosition + 300); // 333330 folderA.setNumberOfDescendants(3); folderB.setNumberOfDescendants(9); folderA.setChecked(false); folderB.setChecked(true); // folderDAO.persist(folderA, folderB); rasterLayer = super.createRasterLayer(folderB, userPositionTestProject, beginPosition + 30); // 333030 vectorLayer = super.createVectorLayer(folderB, userPositionTestProject, beginPosition); // 333000 rasterLayer.setTitle(rasterLayer.getTitle() + "_position_test"); vectorLayer.setTitle(vectorLayer.getTitle() + "_position_test"); rasterLayer.setChecked(false); vectorLayer.setChecked(true); // layerDAO.persist(rasterLayer, vectorLayer); } @After public void tearDown() { logger.trace("\n\t@@@ " + getClass().getSimpleName() + ".tearDown @@@"); // Remove user accountDAO.remove(userPositionTest); // Remove project and his folders and layers projectDAO.remove(userPositionTestProject); // Remove organization organizationDAO.remove(organizationTest); } @Test public void testCheckDAOs() { Assert.assertNotNull("accountDAO is NULL", super.accountDAO); Assert.assertNotNull("projectDAO is NULL", super.projectDAO); Assert.assertNotNull("accountProjectsDAO is NULL", super.accountProjectDAO); Assert.assertNotNull("folderDAO is NULL", super.folderDAO); Assert.assertNotNull("layerDAO is NULL", super.layerDAO); // Assert.assertNotNull("styleDAO is NULL", super.styleDAO); } @Test public void testTransactionsOnLayers() { List<String> layerInfoKeywords = new ArrayList<String>(); layerInfoKeywords.add("keyword_test"); GPLayerInfo layerInfo = new GPLayerInfo(); layerInfo.setKeywords(layerInfoKeywords); layerInfo.setQueryable(false); String titleRasterLayer3 = "Raster Layer 3"; String titleVectorLayer3 = "Vector Layer 3"; try { // "folder_position_test_A" ---> "rasterLayer3" GPRasterLayer rasterLayer3 = super.createRasterLayer(folderA, userPositionTestProject, beginPosition); rasterLayer3.setTitle(titleRasterLayer3); // "folder_position_test_A" ---> "vectorLayer3" GPVectorLayer vectorLayer3 = super.createVectorLayer(folderA, userPositionTestProject, beginPosition); vectorLayer3.setTitle(titleVectorLayer3); // "folder_position_test_A" ---> "rasterLayer4" GPRasterLayer rasterLayer4 = super.createRasterLayer(folderA, userPositionTestProject, beginPosition); rasterLayer4.setTitle(null); // "folder_position_test_A" ---> "vectorLayer4" GPVectorLayer vectorLayer4 = super.createVectorLayer(folderA, userPositionTestProject, beginPosition); vectorLayer4.setTitle(null); // ArrayList<GPLayer> layersList = new ArrayList<GPLayer>(); layersList.add(rasterLayer3); layersList.add(vectorLayer3); layersList.add(rasterLayer4); layersList.add(vectorLayer4); GPLayer[] layersArray = layersList.toArray(new GPLayer[layersList.size()]); layerDAO.persist(layersArray); Assert.fail("saveAddedLayersAndTreeModifications must throws an exception"); } catch (Exception ex) { logger.trace("Exception from layerDAO because the layer's title must be NONT NULL: {}", ex.getMessage()); } GPLayer newRasterLayer3 = layerDAO.findByLayerName(titleRasterLayer3); Assert.assertNull("rasterLayer3 must be null", newRasterLayer3); GPLayer newVectorLayer3 = layerDAO.findByLayerName(titleVectorLayer3); Assert.assertNull("rectorLayer3 must be null", newVectorLayer3); } //<editor-fold defaultstate="collapsed" desc="Test of updatePositionsRange"> /** * Test of updatePositionsRange method for Folders */ @Test public void testIncreasePositionsFolders() { logger.trace("\n\t@@@ testIncreasePositionsFolders @@@"); int deltaValue = 1; // Increase boolean check = folderDAO.updatePositionsRange(userPositionTestProject.getId(), beginPosition, endPosition, deltaValue); Assert.assertTrue("Increase Position Folders NOT done", check); GPFolder userFolderUpdated = folderDAO.find(rootFolder.getId()); Assert.assertEquals("Position NOT increased for \"" + rootFolder.getName() + "\"", userFolderUpdated.getPosition(), rootFolder.getPosition() + deltaValue); GPFolder folderAUpdated = folderDAO.find(folderA.getId()); Assert.assertEquals("Position NOT increased for \"" + folderA.getName() + "\"", folderAUpdated.getPosition(), folderA.getPosition() + deltaValue); GPFolder folderBUpdated = folderDAO.find(folderB.getId()); Assert.assertEquals("Position NOT increased for \"" + folderB.getName() + "\"", folderBUpdated.getPosition(), folderB.getPosition() + deltaValue); // No Increase // check = folderDAO.updatePositionsRange(Integer.MAX_VALUE - 1, Integer.MAX_VALUE, deltaValue); // Assert.assertFalse("Increase Position Folders should NOT be done", check); } @Test public void testDecreasePositionsFolders() { logger.trace("\n\t@@@ testDecreasePositionsFolders @@@"); int deltaValue = -1; // Decrease boolean check = folderDAO.updatePositionsRange(userPositionTestProject.getId(), beginPosition, endPosition, deltaValue); Assert.assertTrue("Decrease Position Folders NOT done", check); GPFolder userFolderUpdated = folderDAO.find(rootFolder.getId()); Assert.assertEquals("Position NOT decreased for \"" + rootFolder.getName() + "\"", userFolderUpdated.getPosition(), rootFolder.getPosition() + deltaValue); GPFolder folderAUpdated = folderDAO.find(folderA.getId()); Assert.assertEquals("Position NOT decreased for \"" + folderA.getName() + "\"", folderAUpdated.getPosition(), folderA.getPosition() + deltaValue); GPFolder folderBUpdated = folderDAO.find(folderB.getId()); Assert.assertEquals("Position NOT decreased for \"" + folderB.getName() + "\"", folderBUpdated.getPosition(), folderB.getPosition() + deltaValue); // No Decrease // check = folderDAO.updatePositionsRange(Integer.MAX_VALUE - 1, Integer.MAX_VALUE, deltaValue); // Assert.assertFalse("Decrease Position Folders should NOT be done", check); } /** * Test of updatePositionsRange method for Layers */ @Test public void testIncreasePositionsLayers() { logger.trace("\n\t@@@ testIncreasePositionsLayers @@@"); int deltaValue = 1; // Increase boolean check = layerDAO.updatePositionsRange(userPositionTestProject.getId(), beginPosition, endPosition, deltaValue); Assert.assertTrue("Increase Position Layers NOT done", check); GPLayer rasterLayerUpdated = layerDAO.find(rasterLayer.getId()); Assert.assertEquals("Position NOT increased for \"" + rasterLayer.getName() + "\"", rasterLayerUpdated.getPosition(), rasterLayer.getPosition() + deltaValue); GPLayer vectorLayerUpdated = layerDAO.find(vectorLayer.getId()); Assert.assertEquals("Position NOT increased for \"" + vectorLayer.getName() + "\"", vectorLayerUpdated.getPosition(), vectorLayer.getPosition() + deltaValue); // No Increase // check = layerDAO.updatePositionsRange(Integer.MAX_VALUE - 1, Integer.MAX_VALUE, deltaValue); // Assert.assertFalse("Increase Position Layers should NOT be done", check); } @Test public void testDecreasePositionsLayers() { logger.trace("\n\t@@@ testDecreasePositionsLayers @@@"); int deltaValue = -1; // Decrease boolean check = layerDAO.updatePositionsRange(userPositionTestProject.getId(), beginPosition, endPosition, deltaValue); Assert.assertTrue("Decrease Position Layers NOT done", check); GPLayer rasterLayerUpdated = layerDAO.find(rasterLayer.getId()); Assert.assertEquals("Position NOT decreased for \"" + rasterLayer.getName() + "\"", rasterLayerUpdated.getPosition(), rasterLayer.getPosition() + deltaValue); GPLayer vectorLayerUpdated = layerDAO.find(vectorLayer.getId()); Assert.assertEquals("Position NOT decreased for \"" + vectorLayer.getName() + "\"", vectorLayerUpdated.getPosition(), vectorLayer.getPosition() + deltaValue); // No Decrease // check = layerDAO.updatePositionsRange(Integer.MAX_VALUE - 1, Integer.MAX_VALUE, deltaValue); // Assert.assertFalse("Decrease Position Layers should NOT be done", check); } //</editor-fold> //<editor-fold defaultstate="collapsed" desc="Test of updatePositionsLowerBound"> /** * Test of updatePositionsLowerBound method for Foders */ @Test public void testShiftPositionsFolders() { logger.trace("\n\t@@@ testShiftPositionsFolders @@@"); int deltaValue = 33; // Shift boolean check = folderDAO.updatePositionsLowerBound(userPositionTestProject.getId(), beginPosition, deltaValue); Assert.assertTrue("Shift Position Folders NOT done", check); GPFolder userFolderUpdated = folderDAO.find(rootFolder.getId()); Assert.assertEquals("Shift Position NOT done for \"" + rootFolder.getName() + "\"", userFolderUpdated.getPosition(), rootFolder.getPosition() + deltaValue); GPFolder folderAUpdated = folderDAO.find(folderA.getId()); Assert.assertEquals("Shift Position NOT done for \"" + folderA.getName() + "\"", folderAUpdated.getPosition(), folderA.getPosition() + deltaValue); GPFolder folderBUpdated = folderDAO.find(folderB.getId()); Assert.assertEquals("Shift Position NOT done for \"" + folderB.getName() + "\"", folderBUpdated.getPosition(), folderB.getPosition() + deltaValue); // No Shift // check = folderDAO.updatePositionsLowerBound(Integer.MAX_VALUE, deltaValue); // Assert.assertFalse("Shift Position Folders should NOT be done", check); } /** * Test of updatePositionsLowerBound method for Layers */ @Test public void testShiftPositionsLayers() { logger.trace("\n\t@@@ testShiftPositionsLayers @@@"); int deltaValue = 99; // Shift boolean check = layerDAO.updatePositionsLowerBound(userPositionTestProject.getId(), beginPosition, deltaValue); Assert.assertTrue("Shift Position Layers NOT done", check); GPLayer rasterLayerUpdated = layerDAO.find(rasterLayer.getId()); Assert.assertEquals("Shift Position NOT done for \"" + rasterLayer.getName() + "\"", rasterLayerUpdated.getPosition(), rasterLayer.getPosition() + deltaValue); GPLayer vectorLayerUpdated = layerDAO.find(vectorLayer.getId()); Assert.assertEquals("Shift Position NOT done for \"" + vectorLayer.getName() + "\"", vectorLayerUpdated.getPosition(), vectorLayer.getPosition() + deltaValue); // No Shift // check = layerDAO.updatePositionsLowerBound(Integer.MAX_VALUE, deltaValue); // Assert.assertFalse("Shift Position Layers should NOT be done", check); } //</editor-fold> /** * Test of updateAncestorsDescendants method for Folders */ @Test public void testUpdateAncestorsDescendants() { logger.trace("\n\t@@@ testUpdateAncestorsDescendants @@@"); Map<Long, Integer> descendantsMap = new HashMap<Long, Integer>(); descendantsMap.put(rootFolder.getId(), 37); descendantsMap.put(folderB.getId(), 31); // Update boolean check = folderDAO.updateAncestorsDescendants(descendantsMap); Assert.assertTrue("Update Ancestors Descendants NOT done", check); GPFolder userFolderUpdated = folderDAO.find(rootFolder.getId()); Assert.assertEquals("Ancestors Descendants NOT updated for \"" + rootFolder.getName() + "\"", userFolderUpdated.getNumberOfDescendants(), Integer.parseInt(descendantsMap.get(userFolderUpdated.getId()).toString())); GPFolder folderBUpdated = folderDAO.find(folderB.getId()); Assert.assertEquals("Ancestors Descendants NOT updated for \"" + folderB.getName() + "\"", folderBUpdated.getNumberOfDescendants(), Integer.parseInt(descendantsMap.get(folderBUpdated.getId()).toString())); GPFolder folderAUpdated = folderDAO.find(folderA.getId()); Assert.assertEquals("Ancestors Descendants NOT updated for \"" + folderA.getName() + "\"", folderAUpdated.getNumberOfDescendants(), folderA.getNumberOfDescendants()); // No Update // descendantsMap.clear(); // check = folderDAO.updateAncestorsDescendants(descendantsMap); // Assert.assertFalse("Update Ancestors Descendants should NOT be done (empty map)", check); // // descendantsMap.put(Long.MAX_VALUE, 3); // check = folderDAO.updateAncestorsDescendants(descendantsMap); // Assert.assertFalse("Update Ancestors Descendants should NOT be done (nothing to update)", check); } //<editor-fold defaultstate="collapsed" desc="Test of persistCheckStatus"> /** * Test of persistCheckStatusFolder method for Folders */ @Test public void testPersistCheckStatusFolder() { logger.trace("\n\t@@@ testPersistCheckStatusFolder @@@"); boolean beginIsChecked = folderA.isChecked(); // false // No Swith: false to false boolean checkSave = folderDAO.persistCheckStatusFolder(folderA.getId(), beginIsChecked); Assert.assertTrue("Save Check Status Folder NOT done (Not Swith: false to false)", checkSave); GPFolder folderAUpdated = folderDAO.find(folderA.getId()); Assert.assertEquals("Checked Folder NOT updated (Not Swith: false to false)", folderAUpdated.isChecked(), beginIsChecked); // Switch: false to true checkSave = folderDAO.persistCheckStatusFolder(folderA.getId(), !beginIsChecked); Assert.assertTrue("Save Check Status Folder NOT done (Switch: false to true)", checkSave); folderAUpdated = folderDAO.find(folderA.getId()); Assert.assertEquals("Checked Folder NOT updated for (Not Swith: false to true)", folderAUpdated.isChecked(), !beginIsChecked); // No Swith: true to true checkSave = folderDAO.persistCheckStatusFolder(folderA.getId(), !beginIsChecked); Assert.assertTrue("Save Check Status Folder NOT done (Not Swith: true to true)", checkSave); folderAUpdated = folderDAO.find(folderA.getId()); Assert.assertEquals("Checked Folder NOT updated for (Not Swith: true to true)", folderAUpdated.isChecked(), !beginIsChecked); // Swith: true to false checkSave = folderDAO.persistCheckStatusFolder(folderA.getId(), beginIsChecked); Assert.assertTrue("Save Check Status Folder NOT done (Swith: true to false)", checkSave); folderAUpdated = folderDAO.find(folderA.getId()); Assert.assertEquals("Checked Folder NOT updated for (Swith: true to false)", folderAUpdated.isChecked(), beginIsChecked); // ID Folder NOT correct checkSave = folderDAO.persistCheckStatusFolder(Long.MAX_VALUE, false); Assert.assertFalse("Save Check Status Folder NOT done (ID Folder NOT correct)", checkSave); folderAUpdated = folderDAO.find(folderA.getId()); Assert.assertEquals("Checked Folder NOT updated for (ID Folder NOT correct)", folderAUpdated.isChecked(), beginIsChecked); } /** * Test of persistCheckStatusFolderS method for Folders */ @Test public void testPersistCheckStatusFolderS() { logger.trace("\n\t@@@ testPersistCheckStatusFolderS @@@"); Long[] ids = new Long[]{rootFolder.getId(), folderA.getId(), folderB.getId()}; // Set all folders checked boolean checkSave = folderDAO.persistCheckStatusFolders(true, ids); Assert.assertTrue("Save Check Status Folder to true NOT done", checkSave); GPFolder userFolderUpdated = folderDAO.find(rootFolder.getId()); Assert.assertEquals("NOT checked Folder \"" + rootFolder.getName() + "\"", userFolderUpdated.isChecked(), true); GPFolder folderAUpdated = folderDAO.find(folderA.getId()); Assert.assertEquals("NOT checked Folder \"" + folderA.getName() + "\"", folderAUpdated.isChecked(), true); GPFolder folderBUpdated = folderDAO.find(folderB.getId()); Assert.assertEquals("NOT checked Folder \"" + folderB.getName() + "\"", folderBUpdated.isChecked(), true); // Set all folders unchecked checkSave = folderDAO.persistCheckStatusFolders(false, ids); Assert.assertTrue("Save Check Status Folder to false NOT done", checkSave); userFolderUpdated = folderDAO.find(rootFolder.getId()); Assert.assertEquals("NOT unchecked Folder \"" + rootFolder.getName() + "\"", userFolderUpdated.isChecked(), false); folderAUpdated = folderDAO.find(folderA.getId()); Assert.assertEquals("NOT unchecked Folder \"" + folderA.getName() + "\"", folderAUpdated.isChecked(), false); folderBUpdated = folderDAO.find(folderB.getId()); Assert.assertEquals("NOT unchecked Folder \"" + folderB.getName() + "\"", folderBUpdated.isChecked(), false); } /** * Test of persistCheckStatusLayer method for Layers */ @Test public void testPersistCheckStatusLayer() { logger.trace("\n\t@@@ testPersistCheckStatusLayer @@@"); boolean beginIsChecked = rasterLayer.isChecked(); // false // No Swith: false to false boolean checkSave = layerDAO.persistCheckStatusLayer(rasterLayer.getId(), beginIsChecked); Assert.assertTrue("Save Check Status Layer NOT done (Not Swith: false to false)", checkSave); GPLayer raster = layerDAO.find(rasterLayer.getId()); Assert.assertEquals("Checked Layer NOT updated (Not Swith: false to false)", raster.isChecked(), beginIsChecked); // Switch: false to true checkSave = layerDAO.persistCheckStatusLayer(rasterLayer.getId(), !beginIsChecked); Assert.assertTrue("Save Check Status Layer NOT done (Switch: false to true)", checkSave); raster = layerDAO.find(rasterLayer.getId()); Assert.assertEquals("Checked Layer NOT updated for (Not Swith: false to true)", raster.isChecked(), !beginIsChecked); // No Swith: true to true checkSave = layerDAO.persistCheckStatusLayer(rasterLayer.getId(), !beginIsChecked); Assert.assertTrue("Save Check Status Layer NOT done (Not Swith: true to true)", checkSave); raster = layerDAO.find(rasterLayer.getId()); Assert.assertEquals("Checked Layer NOT updated for (Not Swith: true to true)", raster.isChecked(), !beginIsChecked); // Swith: true to false checkSave = layerDAO.persistCheckStatusLayer(rasterLayer.getId(), beginIsChecked); Assert.assertTrue("Save Check Status Layer NOT done (Swith: true to false)", checkSave); raster = layerDAO.find(rasterLayer.getId()); Assert.assertEquals("Checked Layer NOT updated for (Swith: true to false)", raster.isChecked(), beginIsChecked); // ID Folder NOT correct checkSave = layerDAO.persistCheckStatusLayer(Long.MAX_VALUE, false); Assert.assertFalse("Save Check Status Layer NOT done (ID Folder NOT correct)", checkSave); raster = layerDAO.find(rasterLayer.getId()); Assert.assertEquals("Checked Layer NOT updated for (ID Folder NOT correct)", raster.isChecked(), beginIsChecked); } //</editor-fold> }