From d34476a8ff7f903a66666875c9aac5a46d065733 Mon Sep 17 00:00:00 2001 From: Viet Nguyen Date: Fri, 23 Feb 2024 16:04:03 +1100 Subject: [PATCH 1/3] ignore case check --- .../openapi/api/helper/GroupsHelper.java | 6 +- .../org/aodn/geonetwork4/controller/Api.java | 150 +++++++++--------- startEsLocal.sh | 2 +- 3 files changed, 81 insertions(+), 77 deletions(-) diff --git a/geonetwork-api/src/main/java/au/org/aodn/geonetwork_api/openapi/api/helper/GroupsHelper.java b/geonetwork-api/src/main/java/au/org/aodn/geonetwork_api/openapi/api/helper/GroupsHelper.java index 6fa0224..f446667 100644 --- a/geonetwork-api/src/main/java/au/org/aodn/geonetwork_api/openapi/api/helper/GroupsHelper.java +++ b/geonetwork-api/src/main/java/au/org/aodn/geonetwork_api/openapi/api/helper/GroupsHelper.java @@ -99,7 +99,11 @@ public void deleteGroups() { ResponseEntity> groups = api.getGroupsWithHttpInfo(Boolean.TRUE, null); if(groups.getStatusCode().is2xxSuccessful()) { Objects.requireNonNull(groups.getBody()) - .forEach(f -> api.deleteGroupWithHttpInfo(f.getId(), true)); + .forEach(f -> { + if (f.getName() != null && !f.getName().equalsIgnoreCase("all") && !f.getName().equalsIgnoreCase("intranet") && !f.getName().equalsIgnoreCase("guest") && !f.getName().equalsIgnoreCase("sample")) { + api.deleteGroupWithHttpInfo(f.getId(), true); + } + }); } } diff --git a/geonetwork/src/main/java/au/org/aodn/geonetwork4/controller/Api.java b/geonetwork/src/main/java/au/org/aodn/geonetwork4/controller/Api.java index 0ccc322..c058c33 100644 --- a/geonetwork/src/main/java/au/org/aodn/geonetwork4/controller/Api.java +++ b/geonetwork/src/main/java/au/org/aodn/geonetwork4/controller/Api.java @@ -101,79 +101,80 @@ public ResponseEntity setup() { setup.deleteAllHarvesters(); setup.insertHarvester( - - "/config/harvesters/catalog_aodn/aad.json", - "/config/harvesters/catalog_aodn/aad_waf.json", -// "/config/harvesters/portal_catalogue_aad.json", - - "/config/harvesters/catalog_aodn/aims.json", -// "/config/harvesters/portal_catalogue_aims.json", -// "/config/harvesters/portal_catalogue_aims_gbr_genomics_database_seawater_illumina_reads.json", -// "/config/harvesters/portal_catalogue_aims_microdebris_contamination.json", -// "/config/harvesters/portal_catalogue_aims_mmp.json", -// "/config/harvesters/portal_catalogue_aims_weather_station.json", - - "/config/harvesters/catalog_aodn/csiro_oceans_atmosphere.json", -// "/config/harvesters/portal_catalogue_csiro_adcp.json", -// "/config/harvesters/portal_catalogue_csiro_catch_operations.json", -// "/config/harvesters/portal_catalogue_csiro_current_meter_mooring.json", -// "/config/harvesters/portal_catalogue_csiro_mnf_voyage_tracks.json", -// "/config/harvesters/portal_catalogue_csiro_o_and_a_ctd_data_overview.json", -// "/config/harvesters/portal_catalogue_csiro_o_and_a_hydrology_data_overview.json", -// "/config/harvesters/portal_catalogue_csiro_rv_franklin_xbt.json", -// "/config/harvesters/portal_catalogue_csiro_rv_investigator_data_overview.json", -// "/config/harvesters/portal_catalogue_csiro_rv_investigator_sst.json", -// "/config/harvesters/portal_catalogue_csiro_rv_southern_surveyor.json", -// "/config/harvesters/portal_catalogue_csiro_sediment_sampling.json", -// "/config/harvesters/portal_catalogue_csiro_wildlife_observations.json", -// "/config/harvesters/portal_catalogue_ga_marine_sediments_mars_database.json", -// "/config/harvesters/catalogue_csiro_southern_surveyor.json", - - "/config/harvesters/catalog_aodn/ga_marine1.json", - "/config/harvesters/catalog_aodn/ga_marine2.json", -// "/config/harvesters/catalogue_ga_mh370.json", -// "/config/harvesters/catalogue_ga_seabed_sediments.json", -// "/config/harvesters/portal_catalogue_ga_mh370_phase_1_150m_bathymetry.json", - - "/config/harvesters/catalog_aodn/imos_geonetwork.json", -// "/config/harvesters/portal_catalogue_imas_aodn_portal.json", -// "/config/harvesters/catalogue_oeh_aodn_portal.json", -// "/config/harvesters/catalogue_imas_aodn_portal.json", -// "/config/harvesters/portal_catalogue_oeh_aodn_portal.json", -// "/config/harvesters/portal_catalogue_uwa_aodn_portal.json" - - "/config/harvesters/catalog_aodn/imos_geonetwork.json", - "/config/harvesters/catalogue_full_from_geo2_to_geo3.json", - "/config/harvesters/portal_catalogue_imos.json", - "/config/harvesters/catalogue_cdu_eretmochelys_imbricata.json", - "/config/harvesters/catalogue_cdu_lepidochelys_olivacea.json", - "/config/harvesters/catalogue_csiro_australian_weekly.json", - "/config/harvesters/catalogue_csiro_wakmatha.json", - "/config/harvesters/catalogue_csiro_world_monthly.json", - "/config/harvesters/catalogue_noaa.json", - "/config/harvesters/catalogue_csiro_the_australian_phytoplankton_database.json", - "/config/harvesters/catalogue_csiro_ocean_acid_recon.json", - "/config/harvesters/catalogue_dsto.json", - "/config/harvesters/catalogue_full.json", - "/config/harvesters/catalogue_imas_aqua_chlorophyll_concentration_monthly.json", - "/config/harvesters/catalogue_imas_aqua_chlorophyll_concentration_weekly.json", - "/config/harvesters/catalogue_imas_seaWIFS_chlorophyll_concentration_monthly.json", - "/config/harvesters/catalogue_imas_seaWIFS_chlorophyll_concentration_weekly.json", - "/config/harvesters/catalogue_mhl_sea_surface_temperature_data.json", - "/config/harvesters/catalogue_mhl_waverider_buoys.json", - "/config/harvesters/catalogue_nsw_oeh_bathy.json", - "/config/harvesters/catalogue_ran.json", - "/config/harvesters/catalogue_wamsi_ningaloo_reef.json", - "/config/harvesters/catalogue_imos.json", - "/config/harvesters/catalogue_imos_portal.json", - - "/config/harvesters/catalogue_tpac_climate_futures.json" - -// "/config/harvesters/portal_catalogue_niwa.json", -// "/config/harvesters/portal_catalogue_systest.json" - -// copy prod to systest -// "/config/harvesters/catalogue_portal.json", + "/config/harvesters/portal_catalogue_imos.json", + "config/harvesters/portal_catalogue_aims.json" +// "/config/harvesters/catalog_aodn/aad.json", +// "/config/harvesters/catalog_aodn/aad_waf.json", +//// "/config/harvesters/portal_catalogue_aad.json", +// +// "/config/harvesters/catalog_aodn/aims.json", +//// "/config/harvesters/portal_catalogue_aims.json", +//// "/config/harvesters/portal_catalogue_aims_gbr_genomics_database_seawater_illumina_reads.json", +//// "/config/harvesters/portal_catalogue_aims_microdebris_contamination.json", +//// "/config/harvesters/portal_catalogue_aims_mmp.json", +//// "/config/harvesters/portal_catalogue_aims_weather_station.json", +// +// "/config/harvesters/catalog_aodn/csiro_oceans_atmosphere.json", +//// "/config/harvesters/portal_catalogue_csiro_adcp.json", +//// "/config/harvesters/portal_catalogue_csiro_catch_operations.json", +//// "/config/harvesters/portal_catalogue_csiro_current_meter_mooring.json", +//// "/config/harvesters/portal_catalogue_csiro_mnf_voyage_tracks.json", +//// "/config/harvesters/portal_catalogue_csiro_o_and_a_ctd_data_overview.json", +//// "/config/harvesters/portal_catalogue_csiro_o_and_a_hydrology_data_overview.json", +//// "/config/harvesters/portal_catalogue_csiro_rv_franklin_xbt.json", +//// "/config/harvesters/portal_catalogue_csiro_rv_investigator_data_overview.json", +//// "/config/harvesters/portal_catalogue_csiro_rv_investigator_sst.json", +//// "/config/harvesters/portal_catalogue_csiro_rv_southern_surveyor.json", +//// "/config/harvesters/portal_catalogue_csiro_sediment_sampling.json", +//// "/config/harvesters/portal_catalogue_csiro_wildlife_observations.json", +//// "/config/harvesters/portal_catalogue_ga_marine_sediments_mars_database.json", +//// "/config/harvesters/catalogue_csiro_southern_surveyor.json", +// +// "/config/harvesters/catalog_aodn/ga_marine1.json", +// "/config/harvesters/catalog_aodn/ga_marine2.json", +//// "/config/harvesters/catalogue_ga_mh370.json", +//// "/config/harvesters/catalogue_ga_seabed_sediments.json", +//// "/config/harvesters/portal_catalogue_ga_mh370_phase_1_150m_bathymetry.json", +// +// "/config/harvesters/catalog_aodn/imos_geonetwork.json", +//// "/config/harvesters/portal_catalogue_imas_aodn_portal.json", +//// "/config/harvesters/catalogue_oeh_aodn_portal.json", +//// "/config/harvesters/catalogue_imas_aodn_portal.json", +//// "/config/harvesters/portal_catalogue_oeh_aodn_portal.json", +//// "/config/harvesters/portal_catalogue_uwa_aodn_portal.json" +// +// "/config/harvesters/catalog_aodn/imos_geonetwork.json", +// "/config/harvesters/catalogue_full_from_geo2_to_geo3.json", +// "/config/harvesters/portal_catalogue_imos.json", +// "/config/harvesters/catalogue_cdu_eretmochelys_imbricata.json", +// "/config/harvesters/catalogue_cdu_lepidochelys_olivacea.json", +// "/config/harvesters/catalogue_csiro_australian_weekly.json", +// "/config/harvesters/catalogue_csiro_wakmatha.json", +// "/config/harvesters/catalogue_csiro_world_monthly.json", +// "/config/harvesters/catalogue_noaa.json", +// "/config/harvesters/catalogue_csiro_the_australian_phytoplankton_database.json", +// "/config/harvesters/catalogue_csiro_ocean_acid_recon.json", +// "/config/harvesters/catalogue_dsto.json", +// "/config/harvesters/catalogue_full.json", +// "/config/harvesters/catalogue_imas_aqua_chlorophyll_concentration_monthly.json", +// "/config/harvesters/catalogue_imas_aqua_chlorophyll_concentration_weekly.json", +// "/config/harvesters/catalogue_imas_seaWIFS_chlorophyll_concentration_monthly.json", +// "/config/harvesters/catalogue_imas_seaWIFS_chlorophyll_concentration_weekly.json", +// "/config/harvesters/catalogue_mhl_sea_surface_temperature_data.json", +// "/config/harvesters/catalogue_mhl_waverider_buoys.json", +// "/config/harvesters/catalogue_nsw_oeh_bathy.json", +// "/config/harvesters/catalogue_ran.json", +// "/config/harvesters/catalogue_wamsi_ningaloo_reef.json", +// "/config/harvesters/catalogue_imos.json", +// "/config/harvesters/catalogue_imos_portal.json", +// +// "/config/harvesters/catalogue_tpac_climate_futures.json" +// +//// "/config/harvesters/portal_catalogue_niwa.json", +//// "/config/harvesters/portal_catalogue_systest.json" +// +//// copy prod to systest +//// "/config/harvesters/catalogue_portal.json", ); setup.insertUsers( @@ -181,8 +182,7 @@ public ResponseEntity setup() { ); ResponseEntity> response = setup.insertGroups( - "/config/groups/aodn.json", - "config/groups/sample.json" + "/config/groups/aodn.json" ); return ResponseEntity.of(Optional.of(response.getStatusCodeValue())); diff --git a/startEsLocal.sh b/startEsLocal.sh index 1504736..f6f29e9 100755 --- a/startEsLocal.sh +++ b/startEsLocal.sh @@ -30,5 +30,5 @@ fi # If you run in EC2, you need to change the docker-es-compose.yml localhost in cert to the hostname of EC2 and install docker # docker-compose and sudo chmod 666 /run/docker.sock -docker-compose -f docker-es-compose.yml up --detach --remove-orphans +docker-compose -f docker-es-compose.yml up --detach --remove-orphans --force-recreate From 73f2b70e3429a1b17ba362585b398f3df11a7666 Mon Sep 17 00:00:00 2001 From: utas-raymondng Date: Tue, 27 Feb 2024 11:28:50 +1100 Subject: [PATCH 2/3] use list to shorten the code --- .../aodn/geonetwork_api/openapi/api/helper/GroupsHelper.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/geonetwork-api/src/main/java/au/org/aodn/geonetwork_api/openapi/api/helper/GroupsHelper.java b/geonetwork-api/src/main/java/au/org/aodn/geonetwork_api/openapi/api/helper/GroupsHelper.java index f446667..484a2ef 100644 --- a/geonetwork-api/src/main/java/au/org/aodn/geonetwork_api/openapi/api/helper/GroupsHelper.java +++ b/geonetwork-api/src/main/java/au/org/aodn/geonetwork_api/openapi/api/helper/GroupsHelper.java @@ -30,6 +30,9 @@ public class GroupsHelper { protected GroupsApi api; protected Logger logger = LogManager.getLogger(TagsHelper.class); + // These are build in group and should not be removed + protected final List buildInGroup = List.of("all", "intranet", "guest","sample"); + @Autowired ObjectMapper objectMapper; @@ -100,7 +103,7 @@ public void deleteGroups() { if(groups.getStatusCode().is2xxSuccessful()) { Objects.requireNonNull(groups.getBody()) .forEach(f -> { - if (f.getName() != null && !f.getName().equalsIgnoreCase("all") && !f.getName().equalsIgnoreCase("intranet") && !f.getName().equalsIgnoreCase("guest") && !f.getName().equalsIgnoreCase("sample")) { + if (f.getName() != null && !buildInGroup.stream().anyMatch(e -> e.equalsIgnoreCase(f.getName()))) { api.deleteGroupWithHttpInfo(f.getId(), true); } }); From 5993ec0f8706e1283322701a4d8b44008dffcf89 Mon Sep 17 00:00:00 2001 From: utas-raymondng Date: Tue, 27 Feb 2024 12:34:46 +1100 Subject: [PATCH 3/3] use list to shorten the code and add test --- geonetwork-api/pom.xml | 5 +++ .../openapi/api/GroupHelperTest.java | 34 +++++++++++++++++++ pom.xml | 10 +++++- 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/geonetwork-api/pom.xml b/geonetwork-api/pom.xml index 6884594..83676c5 100644 --- a/geonetwork-api/pom.xml +++ b/geonetwork-api/pom.xml @@ -46,6 +46,11 @@ json 20230618 + + org.mockito + mockito-core + test + org.xmlunit xmlunit-core diff --git a/geonetwork-api/src/test/java/au/org/aodn/geonetwork_api/openapi/api/GroupHelperTest.java b/geonetwork-api/src/test/java/au/org/aodn/geonetwork_api/openapi/api/GroupHelperTest.java index 5ee13f3..83f644f 100644 --- a/geonetwork-api/src/test/java/au/org/aodn/geonetwork_api/openapi/api/GroupHelperTest.java +++ b/geonetwork-api/src/test/java/au/org/aodn/geonetwork_api/openapi/api/GroupHelperTest.java @@ -7,13 +7,20 @@ import org.apache.logging.log4j.Logger; import org.json.JSONObject; import org.junit.Test; +import org.mockito.Mockito; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.TestPropertySource; import org.springframework.util.ResourceUtils; import java.io.IOException; import java.nio.charset.Charset; +import java.util.List; import java.util.Optional; import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.isNull; +import static org.mockito.Mockito.*; public class GroupHelperTest { @@ -63,4 +70,31 @@ public void verifyUpdateHarvestersOwnerGroup() throws IOException { assertTrue("Own group updated and exist", i.isPresent()); assertEquals("Own group updated id is", i.get().getInt("id"),1234); } + /** + * We do not want to delete any build in group as it cause issues. + * @throws IOException + */ + @Test + public void verfiyDeleteGroupKeepBuildInGroup() throws IOException { + // Check is equalIgnoreCase, so capital letter or not does not matter + Group all = new Group().name("All"); + Group intranet = new Group().name("intranet"); + Group guest = new Group().name("guest"); + Group sample = new Group().name("SamplE"); + + // Should delete this only + Group toBeDeleted = new Group().name("To be deleted").id(1); + + List groupList = List.of(all, intranet, guest, sample, toBeDeleted); + + GroupsApi api = mock(GroupsApi.class); + Mockito.doReturn(ResponseEntity.ok(groupList)) + .when(api) + .getGroupsWithHttpInfo(eq(Boolean.TRUE), isNull()); + + GroupsHelper helper = new GroupsHelper(api); + helper.deleteGroups(); + + verify(api, times(1)).deleteGroupWithHttpInfo(anyInt(), eq(true)); + } } diff --git a/pom.xml b/pom.xml index 05de931..b9744ca 100644 --- a/pom.xml +++ b/pom.xml @@ -33,6 +33,9 @@ 2.2.15 2.0.1.Final 1.12.261 + 0.2.6 + 5.10.0 + true @@ -78,7 +81,12 @@ org.openapitools jackson-databind-nullable - 0.2.6 + ${jackson.nullable.version} + + + org.mockito + mockito-core + ${mockito.version}