From cbc4832fdca1e4f3882160bc42ce71eee887be69 Mon Sep 17 00:00:00 2001 From: Maxym Borodenko Date: Thu, 5 Sep 2019 10:15:26 +0300 Subject: [PATCH] - Moved conversation to API v0 controller - Added unit test for controllers --- .../server/api/v0/AccessionController.java | 40 ++++-- .../service/worker/AccessionUploader.java | 23 ---- .../genesys/test/base/AbstractApiTest.java | 21 +++ .../catalog/services/CatalogServiceTest.java | 11 +- .../api/v0/AccessionControllerTest.java | 53 +++++++- .../api/v1/AccessionControllerTest.java | 56 ++++++-- .../services/AccessionUploaderTest.java | 128 +++++++----------- 7 files changed, 204 insertions(+), 128 deletions(-) diff --git a/src/main/java/org/genesys2/server/api/v0/AccessionController.java b/src/main/java/org/genesys2/server/api/v0/AccessionController.java index 2043bdb20..f6bd719fe 100644 --- a/src/main/java/org/genesys2/server/api/v0/AccessionController.java +++ b/src/main/java/org/genesys2/server/api/v0/AccessionController.java @@ -231,7 +231,7 @@ public class AccessionController extends ApiBaseController { } catch (DataAccessException | TransactionException | PersistenceException e) { List res = upsert1By1(institute, updates); - LOG.info("Processed {} accessions for {} 1by1 after {} tries in {}ms because of {}", updates.size(), instCode, tryCount + 1, stopWatch.getTime(), e.getMessage()); + LOG.info("Processed {} accessions for {} 1by1 after {} tries in {}ms because of {}", updates.size(), instCode, tryCount + 1, stopWatch.getTime(), e.getMessage()); return res; } catch (PleaseRetryException e) { @@ -309,14 +309,15 @@ public class AccessionController extends ApiBaseController { throw new NotFoundElement(); } + final ArrayNode updates = convertToArrayNode(batch); try { List response = null; try { - response = uploader.deleteAccessions(institute, batch); + response = uploader.deleteAccessions(institute, updates); LOG.info("Deleted {} accessions from {}", response.size(), instCode); } catch (DataAccessException | TransactionException | PersistenceException e) { LOG.info("Retrying delete one by one due to {}", e.getMessage()); - response = deleteAccessions1by1(institute, batch); + response = deleteAccessions1by1(institute, updates); } return response; @@ -325,26 +326,24 @@ public class AccessionController extends ApiBaseController { } } - private List deleteAccessions1by1(FaoInstitute institute, List batch) { + private List deleteAccessions1by1(FaoInstitute institute, ArrayNode updates) { LOG.info("Attempting delete 1 by 1"); - final List batchOfOne = new ArrayList(); + ArrayNode single = new ObjectMapper().createArrayNode(); List response = new ArrayList(); - for (AccessionHeaderJson acceJ : batch) { - + for (JsonNode update : updates) { try { - - batchOfOne.clear(); - batchOfOne.add(acceJ); - AccessionOpResponse accessionResponse = uploader.deleteAccessions(institute, batchOfOne).get(0); + single.removeAll(); + single.add(update); + AccessionOpResponse accessionResponse = uploader.deleteAccessions(institute, single).get(0); response.add(accessionResponse); } catch (Throwable e) { if (LOG.isInfoEnabled()) { - LOG.info("Error deleting {}: {}", acceJ.instCode, e.getMessage()); + LOG.info("Error deleting {}: {}", update.get("instituteCode").asText(), e.getMessage()); } - AccessionOpResponse accessionResponse = new AccessionOpResponse(acceJ.instCode, acceJ.acceNumb, acceJ.genus); + AccessionOpResponse accessionResponse = new AccessionOpResponse(update.get("instituteCode").asText(), update.get("accessionNumber").asText(), update.get("taxonomy").get("genus").asText()); accessionResponse.setError(getDetailedErrorMessage(e)); response.add(accessionResponse); } @@ -414,8 +413,19 @@ public class AccessionController extends ApiBaseController { public Integer maxRecords; public String otherOptions; } - - + + private ArrayNode convertToArrayNode(List updates) { + final ArrayNode arrayNode = mapper.createArrayNode(); + for (AccessionHeaderJson accnJ: updates) { + ObjectNode accession = arrayNode.addObject(); + accession.put("instituteCode", accnJ.getHoldingInstitute()); + accession.put("accessionNumber", accnJ.getAccessionNumber()); + accession.put("doi", accnJ.getDoi()); + ObjectNode taxonNode = accession.putObject("taxonomy"); + taxonNode.put("genus", accnJ.getGenus()); + } + return arrayNode; + } private void upgradeToV2(ArrayNode updates) { for (JsonNode update : updates) { diff --git a/src/main/java/org/genesys2/server/service/worker/AccessionUploader.java b/src/main/java/org/genesys2/server/service/worker/AccessionUploader.java index 03d134d16..c1e8a2fb4 100644 --- a/src/main/java/org/genesys2/server/service/worker/AccessionUploader.java +++ b/src/main/java/org/genesys2/server/service/worker/AccessionUploader.java @@ -673,29 +673,6 @@ public class AccessionUploader implements InitializingBean { return object; } - @Transactional(timeout = 250, isolation = Isolation.READ_UNCOMMITTED, rollbackFor = Throwable.class) - @PreAuthorize("hasRole('ADMINISTRATOR') or hasPermission(#institute, 'WRITE')") - public List deleteAccessions(FaoInstitute institute, List identifiers) { - final ObjectMapper mapper = new ObjectMapper(); - final ArrayNode arrayNode = mapper.createArrayNode(); - - for (AccessionHeaderJson accnJ: identifiers) { - ObjectNode rootNode = mapper.createObjectNode(); - rootNode.put("instituteCode", accnJ.getHoldingInstitute()); - rootNode.put("accessionNumber", accnJ.getAccessionNumber()); - rootNode.put("doi", accnJ.getDoi()); - - ObjectNode taxonNode = mapper.createObjectNode(); - taxonNode.put("genus", accnJ.getGenus()); - - rootNode.set("taxonomy", taxonNode); - - arrayNode.add(rootNode); - } - - return deleteAccessions(institute, arrayNode); - } - @Transactional(timeout = 250, isolation = Isolation.READ_UNCOMMITTED, rollbackFor = Throwable.class) @PreAuthorize("hasRole('ADMINISTRATOR') or hasPermission(#institute, 'WRITE')") public List deleteAccessions(FaoInstitute institute, ArrayNode identifiers) { diff --git a/src/test/java/org/genesys/test/base/AbstractApiTest.java b/src/test/java/org/genesys/test/base/AbstractApiTest.java index 5e89ce492..98bd09acd 100644 --- a/src/test/java/org/genesys/test/base/AbstractApiTest.java +++ b/src/test/java/org/genesys/test/base/AbstractApiTest.java @@ -26,6 +26,8 @@ import java.util.UUID; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; import org.genesys.catalog.model.Partner; import org.genesys.catalog.model.dataset.Dataset; import org.genesys.catalog.model.dataset.DatasetCreator; @@ -221,4 +223,23 @@ public abstract class AbstractApiTest extends AbstractTest { return descriptor; } + protected ArrayNode upsertAccessions(final String instCode, final String acceNumb, final String genus, final String doi) { + ArrayNode updates = objectMapper.createArrayNode(); + updates.add(upsertAccession(instCode, acceNumb, genus, doi)); + return updates; + } + + protected ObjectNode upsertAccession(final String instCode, final String accnNumber, final String genus, final String doi) { + ObjectNode accession = objectMapper.createObjectNode(); + accession.put("instituteCode", instCode); + accession.put("accessionNumber", accnNumber); + if (doi != null) { + accession.put("doi", doi); + } + ObjectNode taxa = accession.putObject("taxonomy"); + taxa.put("genus", genus); + + return accession; + } + } \ No newline at end of file diff --git a/src/test/java/org/genesys/test/catalog/services/CatalogServiceTest.java b/src/test/java/org/genesys/test/catalog/services/CatalogServiceTest.java index 0466984a1..b41d0254d 100644 --- a/src/test/java/org/genesys/test/catalog/services/CatalogServiceTest.java +++ b/src/test/java/org/genesys/test/catalog/services/CatalogServiceTest.java @@ -241,13 +241,20 @@ public abstract class CatalogServiceTest extends AbstractServiceTest { institute = instituteService.getInstitute(instCode); } + ObjectMapper mapper = new ObjectMapper(); + final ArrayNode arrayNode = mapper.createArrayNode(); + ObjectNode rootNode = arrayNode.addObject(); + rootNode.put("instituteCode", instCode); + rootNode.put("accessionNumber", acceNumb); + ObjectNode taxonNode = rootNode.putObject("taxonomy"); + taxonNode.put("genus", genus); + AccessionHeaderJson ah = new AccessionHeaderJson(); ah.instCode = instCode; ah.acceNumb = acceNumb; ah.genus = genus; - List identifiers = Lists.newArrayList(ah); - accessionUploader.deleteAccessions(institute, identifiers); + accessionUploader.deleteAccessions(institute, arrayNode); assert(accessionRepository.findOne(institute, null, acceNumb, genus) == null); } } diff --git a/src/test/java/org/genesys/test/server/api/v0/AccessionControllerTest.java b/src/test/java/org/genesys/test/server/api/v0/AccessionControllerTest.java index f3d1d013b..200e317fb 100644 --- a/src/test/java/org/genesys/test/server/api/v0/AccessionControllerTest.java +++ b/src/test/java/org/genesys/test/server/api/v0/AccessionControllerTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2018 Global Crop Diversity Trust + * Copyright 2019 Global Crop Diversity Trust * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,9 @@ package org.genesys.test.server.api.v0; +import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.Matchers.*; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationConfiguration; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; @@ -29,16 +31,19 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; import org.genesys.test.base.AbstractApiTest; +import org.genesys2.server.api.model.AccessionHeaderJson; import org.genesys2.server.api.v0.AccessionController; import org.genesys2.server.model.genesys.*; import org.genesys2.server.model.genesys.AccessionAlias.AliasType; import org.genesys2.server.model.impl.FaoInstitute; +import org.genesys2.server.persistence.AccessionHistoricRepository; import org.genesys2.server.persistence.AccessionIdRepository; import org.genesys2.server.persistence.AccessionRepository; import org.genesys2.server.persistence.FaoInstituteRepository; import org.genesys2.server.persistence.Taxonomy2Repository; import org.genesys2.server.service.InstituteService; import org.genesys2.server.service.TaxonomyService; +import org.genesys2.server.service.worker.AccessionUploader; import org.junit.After; import org.junit.Before; import org.junit.Rule; @@ -68,6 +73,12 @@ public class AccessionControllerTest extends AbstractApiTest { private static final int STORAGE_10 = 10; private static final int STORAGE_11 = 11; + private static final String ACCENUMB_1 = "A-0001"; + private static final String ACCENUMB_2 = "A-0002"; + + private static final String GENUS_1 = "Hordeum"; + private static final String GENUS_2 = "Musa"; + @Rule public final JUnitRestDocumentation restDocumentation = new JUnitRestDocumentation("target/generated-snippets"); @@ -80,6 +91,8 @@ public class AccessionControllerTest extends AbstractApiTest { @Autowired private AccessionIdRepository accessionIdRepository; @Autowired + private AccessionHistoricRepository accessionHistoricRepository; + @Autowired private FaoInstituteRepository instituteRepository; @Autowired private InstituteService instituteService; @@ -87,6 +100,8 @@ public class AccessionControllerTest extends AbstractApiTest { private Taxonomy2Repository taxonomyRepository; @Autowired private TaxonomyService taxonomyService; + @Autowired + private AccessionUploader accessionUploader; MockMvc mockMvc; @@ -108,8 +123,10 @@ public class AccessionControllerTest extends AbstractApiTest { @Override @Transactional public void cleanup() throws Exception { + accessionHistoricRepository.deleteAll(); accessionRepository.deleteAll(); accessionIdRepository.deleteAll(); + taxonomyRepository.deleteAll(); instituteRepository.deleteAll(); super.cleanup(); @@ -152,6 +169,40 @@ public class AccessionControllerTest extends AbstractApiTest { assertThat(accessionRepository.count(), is(1L)); } + @Test + public void deleteAccessionsTest() throws Exception { + accessionUploader.upsertAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, null)); + accessionUploader.upsertAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_2, GENUS_2, null)); + + Accession storedAccession = accessionRepository.findByInstituteCodeAndAccessionNumber(institute.getCode(), ACCENUMB_1); + assertThat(storedAccession.getAccessionNumber(), is(ACCENUMB_1)); + + Accession storedAccession2 = accessionRepository.findByInstituteCodeAndAccessionNumber(institute.getCode(), ACCENUMB_2); + assertThat(storedAccession2.getAccessionNumber(), is(ACCENUMB_2)); + + AccessionHeaderJson aHS2 = new AccessionHeaderJson(); + aHS2.instCode = storedAccession.getInstCode(); + aHS2.acceNumb = storedAccession.getAccessionNumber(); + aHS2.genus = storedAccession.getGenus(); + + final String s = "[" + verboseMapper.writeValueAsString(aHS2) + "]"; + + /*@formatter:off*/ + mockMvc.perform(post(AccessionController.API_BASE + "/" + institute.getCode() + "/delete-named") + .contentType(MediaType.APPLICATION_JSON) + .content(s)) +// .andDo(MockMvcResultHandlers.print()) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)) + .andExpect(jsonPath("$", not(nullValue()))) + .andExpect(jsonPath("$[0].instCode", is(institute.getCode()))) + .andExpect(jsonPath("$[0].error", nullValue())); + /*@formatter:on*/ + + assertThat(accessionRepository.count(), is(1L)); + assertNotNull(accessionRepository.findByInstituteCodeAndAccessionNumber(institute.getCode(), ACCENUMB_2)); + } + @Test public void getAccessionsTest() throws Exception { diff --git a/src/test/java/org/genesys/test/server/api/v1/AccessionControllerTest.java b/src/test/java/org/genesys/test/server/api/v1/AccessionControllerTest.java index 9594d3e64..0cc4a5bec 100644 --- a/src/test/java/org/genesys/test/server/api/v1/AccessionControllerTest.java +++ b/src/test/java/org/genesys/test/server/api/v1/AccessionControllerTest.java @@ -16,7 +16,9 @@ package org.genesys.test.server.api.v1; +import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.Matchers.*; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertNull; import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationConfiguration; @@ -37,6 +39,7 @@ import org.genesys2.server.model.genesys.*; import org.genesys2.server.model.genesys.AccessionAlias.AliasType; import org.genesys2.server.model.impl.FaoInstitute; import org.genesys2.server.persistence.AccessionGeoRepository; +import org.genesys2.server.persistence.AccessionHistoricRepository; import org.genesys2.server.persistence.AccessionIdRepository; import org.genesys2.server.persistence.AccessionRepository; import org.genesys2.server.persistence.FaoInstituteRepository; @@ -44,6 +47,7 @@ import org.genesys2.server.persistence.Taxonomy2Repository; import org.genesys2.server.service.InstituteService; import org.genesys2.server.service.TaxonomyService; import org.genesys2.server.service.filter.AccessionFilter; +import org.genesys2.server.service.worker.AccessionUploader; import org.junit.After; import org.junit.Before; import org.junit.Rule; @@ -73,6 +77,12 @@ public class AccessionControllerTest extends AbstractApiTest { private static final int STORAGE_10 = 10; private static final int STORAGE_11 = 11; + private static final String ACCENUMB_1 = "A-0001"; + private static final String ACCENUMB_2 = "A-0002"; + + private static final String GENUS_1 = "Hordeum"; + private static final String GENUS_2 = "Musa"; + @Rule public final JUnitRestDocumentation restDocumentation = new JUnitRestDocumentation("target/generated-snippets"); @@ -85,6 +95,8 @@ public class AccessionControllerTest extends AbstractApiTest { @Autowired private AccessionIdRepository accessionIdRepository; @Autowired + private AccessionHistoricRepository accessionHistoricRepository; + @Autowired private AccessionGeoRepository accessionGeoRepository; @Autowired private FaoInstituteRepository instituteRepository; @@ -94,27 +106,21 @@ public class AccessionControllerTest extends AbstractApiTest { private Taxonomy2Repository taxonomyRepository; @Autowired private TaxonomyService taxonomyService; + @Autowired + private AccessionUploader accessionUploader; MockMvc mockMvc; private FaoInstitute institute; private AtomicInteger acceNumb = new AtomicInteger(1); - protected static final ObjectMapper objectMapper; - protected static final ObjectMapper verboseMapper = new ObjectMapper(); - static { - objectMapper = new ObjectMapper(); - objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); - objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); - } - @After @Override @Transactional public void cleanup() throws Exception { + accessionHistoricRepository.deleteAll(); accessionRepository.deleteAll(); accessionIdRepository.deleteAll(); accessionGeoRepository.deleteAll(); @@ -160,6 +166,38 @@ public class AccessionControllerTest extends AbstractApiTest { assertThat(accessionRepository.count(), is(1L)); } + @Test + public void deleteAccessionsTest() throws Exception { + ArrayNode arrayNode = verboseMapper.createArrayNode(); + arrayNode.add(upsertAccession(institute.getCode(), ACCENUMB_1, GENUS_1, null)); + accessionUploader.upsertAccessions(institute, arrayNode); + accessionUploader.upsertAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_2, GENUS_2, null)); + + Accession storedAccession = accessionRepository.findByInstituteCodeAndAccessionNumber(institute.getCode(), ACCENUMB_1); + assertThat(storedAccession.getAccessionNumber(), is(ACCENUMB_1)); + + Accession storedAccession2 = accessionRepository.findByInstituteCodeAndAccessionNumber(institute.getCode(), ACCENUMB_2); + assertThat(storedAccession2.getAccessionNumber(), is(ACCENUMB_2)); + + + final String s = verboseMapper.writeValueAsString(arrayNode); + + /*@formatter:off*/ + mockMvc.perform(post(AccessionUploadController.CONTROLLER_URL + "/" + institute.getCode() + "/delete") + .contentType(MediaType.APPLICATION_JSON) + .content(s)) + .andExpect(status().isOk()) + .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)) + .andExpect(jsonPath("$", not(nullValue()))) + .andExpect(jsonPath("$[0].instCode", is(institute.getCode()))) + .andExpect(jsonPath("$[0].error", nullValue())) + .andExpect(jsonPath("$[0].result.action", equalTo("DELETE"))); + /*@formatter:on*/ + + assertThat(accessionRepository.count(), is(1L)); + assertNotNull(accessionRepository.findByInstituteCodeAndAccessionNumber(institute.getCode(), ACCENUMB_2)); + } + @Test public void taxonomyFilterTest() throws Exception { ObjectNode accessionJson = setUpAccession(); diff --git a/src/test/java/org/genesys/test/server/services/AccessionUploaderTest.java b/src/test/java/org/genesys/test/server/services/AccessionUploaderTest.java index 29c0c77ca..6be2dfd6b 100644 --- a/src/test/java/org/genesys/test/server/services/AccessionUploaderTest.java +++ b/src/test/java/org/genesys/test/server/services/AccessionUploaderTest.java @@ -22,8 +22,6 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; import org.genesys2.server.api.model.AccessionHeaderJson; @@ -117,24 +115,28 @@ public class AccessionUploaderTest extends AbstractServicesTest { super.cleanup(); } - protected ArrayNode upsertAccession(final String instCode, final String acceNumb, final String genus, final String doi) { + protected ArrayNode upsertAccessions(final String instCode, final String acceNumb, final String genus, final String doi) { ArrayNode updates = objectMapper.createArrayNode(); - ObjectNode accession = updates.addObject(); + updates.add(upsertAccession(instCode, acceNumb, genus, doi)); + return updates; + } + + protected ObjectNode upsertAccession(final String instCode, final String accnNumber, final String genus, final String doi) { + ObjectNode accession = objectMapper.createObjectNode(); accession.put("instituteCode", instCode); - accession.put("accessionNumber", acceNumb); - ObjectNode taxa = accession.putObject("taxonomy"); - taxa.put("genus", genus); - + accession.put("accessionNumber", accnNumber); if (doi != null) { accession.put("doi", doi); } - - return updates; + ObjectNode taxa = accession.putObject("taxonomy"); + taxa.put("genus", genus); + + return accession; } @Test public void testBasicInsert() { - List op = accessionUploader.upsertAccessions(institute, upsertAccession(institute.getCode(), ACCENUMB_1, GENUS_1, null)); + List op = accessionUploader.upsertAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, null)); assertThat(op.get(0).getError(), nullValue()); Accession a = accessionRepository.findOne(institute, null, ACCENUMB_1, GENUS_1); @@ -154,7 +156,7 @@ public class AccessionUploaderTest extends AbstractServicesTest { testBasicInsert(); Accession a1 = accessionRepository.findOne(institute, null, ACCENUMB_1, GENUS_1); - List op = accessionUploader.upsertAccessions(institute, upsertAccession(institute.getCode(), ACCENUMB_1, GENUS_1, null)); + List op = accessionUploader.upsertAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, null)); assertThat(op.get(0).getError(), nullValue()); Accession a2 = accessionRepository.findOne(institute, null, ACCENUMB_1, GENUS_1); @@ -173,7 +175,7 @@ public class AccessionUploaderTest extends AbstractServicesTest { testBasicInsert(); accessionRepository.findOne(institute, null, ACCENUMB_1, GENUS_1); - List op = accessionUploader.upsertAccessions(institute, upsertAccession(institute2.getCode(), ACCENUMB_1, GENUS_1, null)); + List op = accessionUploader.upsertAccessions(institute, upsertAccessions(institute2.getCode(), ACCENUMB_1, GENUS_1, null)); assertThat(op.get(0).getError(), is("Accession does not belong to institute " + institute.getCode())); } @@ -183,7 +185,7 @@ public class AccessionUploaderTest extends AbstractServicesTest { */ @Test public void testInsertWithDOI() { - accessionUploader.upsertAccessions(institute, upsertAccession(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1)); + accessionUploader.upsertAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1)); assertThat(accessionRepository.count(), is(1l)); Accession a2 = accessionRepository.findOne(institute, null, ACCENUMB_1, GENUS_1); assertThat(a2.getDoi(), is(DOI_1)); @@ -194,12 +196,12 @@ public class AccessionUploaderTest extends AbstractServicesTest { */ @Test public void testUpdateDOI() { - List op = accessionUploader.upsertAccessions(institute, upsertAccession(institute.getCode(), ACCENUMB_1, GENUS_1, null)); + List op = accessionUploader.upsertAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, null)); accessionRepository.findOne(institute, null, ACCENUMB_1, GENUS_1); assertThat(accessionRepository.count(), is(1l)); assertThat(op.get(0).getError(), nullValue()); - ArrayNode batch = upsertAccession(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1); + ArrayNode batch = upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1); op = accessionUploader.upsertAccessions(institute, batch); assertThat(op.get(0).getError(), nullValue()); @@ -213,12 +215,12 @@ public class AccessionUploaderTest extends AbstractServicesTest { */ @Test public void testDontUpdateDOI() { - accessionUploader.upsertAccessions(institute, upsertAccession(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1)); + accessionUploader.upsertAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1)); Accession a1 = accessionRepository.findOne(institute, null, ACCENUMB_1, GENUS_1); assertThat(accessionRepository.count(), is(1l)); assertThat(a1.getDoi(), is(DOI_1)); - List op = accessionUploader.upsertAccessions(institute, upsertAccession(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1 + 1)); + List op = accessionUploader.upsertAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1 + 1)); assertThat(accessionRepository.count(), is(1l)); assertThat(op.size(), is(1)); assertThat(op.get(0).getError(), notNullValue()); @@ -231,11 +233,11 @@ public class AccessionUploaderTest extends AbstractServicesTest { */ @Test public void testFailUpdateWithoutDOI() { - accessionUploader.upsertAccessions(institute, upsertAccession(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1)); + accessionUploader.upsertAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1)); Accession a1 = accessionRepository.findByDoi(DOI_1); assertThat(a1.getDoi(), is(DOI_1)); - List op = accessionUploader.upsertAccessions(institute, upsertAccession(institute.getCode(), ACCENUMB_1, GENUS_1, null)); + List op = accessionUploader.upsertAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, null)); assertThat(accessionRepository.count(), is(1l)); assertThat(op.size(), is(1)); assertThat(op.get(0).getError(), notNullValue()); @@ -248,10 +250,10 @@ public class AccessionUploaderTest extends AbstractServicesTest { */ @Test public void testUpdateBasicsUsingDOI() { - accessionUploader.upsertAccessions(institute, upsertAccession(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1)); + accessionUploader.upsertAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1)); Accession a1 = accessionRepository.findOne(institute, null, ACCENUMB_1, GENUS_1); - accessionUploader.upsertAccessions(institute, upsertAccession(institute.getCode(), ACCENUMB_2, GENUS_2, DOI_1)); + accessionUploader.upsertAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_2, GENUS_2, DOI_1)); assertThat(accessionRepository.count(), is(1l)); Accession a2 = accessionRepository.findByDoi(DOI_1); assertThat(a2.getId(), equalTo(a1.getId())); @@ -266,10 +268,10 @@ public class AccessionUploaderTest extends AbstractServicesTest { */ @Test public void testUpdateTaxonomysUsingDOI() { - accessionUploader.upsertAccessions(institute, upsertAccession(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1)); + accessionUploader.upsertAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1)); // update taxonomy - ArrayNode json = upsertAccession(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1); + ArrayNode json = upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1); ObjectNode taxa = (ObjectNode) json.get(0).get("taxonomy"); taxa.put(Api1Constants.Accession.GENUS, GENUS_2); taxa.put(Api1Constants.Accession.SPECIES, "species"); @@ -290,18 +292,18 @@ public class AccessionUploaderTest extends AbstractServicesTest { */ @Test public void testFailCrossUpdateUsingDOI() { - accessionUploader.upsertAccessions(institute, upsertAccession(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1)); + accessionUploader.upsertAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1)); Accession a1 = accessionRepository.findByDoi(DOI_1); assertThat(a1, notNullValue()); - List op = accessionUploader.upsertAccessions(institute2, upsertAccession(institute2.getCode(), ACCENUMB_1, GENUS_1, DOI_1)); + List op = accessionUploader.upsertAccessions(institute2, upsertAccessions(institute2.getCode(), ACCENUMB_1, GENUS_1, DOI_1)); assertThat(op.get(0).getError(), is("Accession does not belong to institute " + institute2.getCode())); } @Test public void testTaxonomyNotModified() { // upload accesion with species - ArrayNode json = upsertAccession(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1); + ArrayNode json = upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1); ObjectNode taxa = (ObjectNode) json.get(0).get("taxonomy"); taxa.put(Api1Constants.Accession.SPECIES, "species"); taxa.put(Api1Constants.Accession.SPAUTHOR, "M."); @@ -312,7 +314,7 @@ public class AccessionUploaderTest extends AbstractServicesTest { assertThat(a1.getTaxonomy().getSpAuthor(), equalTo("M.")); // Update without providing taxonomy details - accessionUploader.upsertAccessions(institute, upsertAccession(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1)); + accessionUploader.upsertAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1)); Accession a1a = accessionRepository.findOne(institute, DOI_1, ACCENUMB_1, GENUS_1); assertThat(a1a.getTaxonomy().getSpecies(), equalTo("species")); @@ -321,18 +323,15 @@ public class AccessionUploaderTest extends AbstractServicesTest { @Test public void testDeleteAccessions() { - accessionUploader.upsertAccessions(institute, upsertAccession(institute.getCode(), ACCENUMB_1, GENUS_1, null)); + accessionUploader.upsertAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, null)); Accession a1 = accessionRepository.findByInstituteCodeAndAccessionNumber(institute.getCode(), ACCENUMB_1); assertThat(a1.getAccessionNumber(), is(ACCENUMB_1)); - assertNull(a1.getDoi()); - + assertNull(a1.getDoi()); - AccessionHeaderJson aHS = new AccessionHeaderJson(); - aHS.instCode = institute.getCode(); - aHS.acceNumb = ACCENUMB_1; - aHS.genus = GENUS_1; + final ArrayNode arrayNode = objectMapper.createArrayNode(); + arrayNode.add(upsertAccession(institute.getCode(), ACCENUMB_1, GENUS_1, null)); - accessionUploader.deleteAccessions(institute, Collections.singletonList(aHS)); + accessionUploader.deleteAccessions(institute, arrayNode); AccessionHistoric accessionHistoric = accessionHistoricRepository.findOneByUuid(a1.getUuid()); assertNotNull(accessionHistoric); @@ -344,68 +343,46 @@ public class AccessionUploaderTest extends AbstractServicesTest { @Test public void testDeleteAccessionsWithDoiShouldFail() { - accessionUploader.upsertAccessions(institute, upsertAccession(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1)); + accessionUploader.upsertAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1)); Accession a1 = accessionRepository.findByInstituteCodeAndAccessionNumber(institute.getCode(), ACCENUMB_1); assertThat(a1.getAccessionNumber(), is(ACCENUMB_1)); assertThat(a1.getDoi(), is(DOI_1)); - AccessionHeaderJson aHS = new AccessionHeaderJson(); - aHS.instCode = institute.getCode(); - aHS.acceNumb = ACCENUMB_1; - aHS.genus = GENUS_1; - - List responses = accessionUploader.deleteAccessions(institute, Collections.singletonList(aHS)); + List responses = accessionUploader.deleteAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, null)); assertEquals("Accessions with doi cannot be deleted", responses.get(0).getError()); } @Test public void testDeleteAccessionsWithDoiAsInputShouldFail() { - accessionUploader.upsertAccessions(institute, upsertAccession(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1)); + accessionUploader.upsertAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1)); Accession a1 = accessionRepository.findByInstituteCodeAndAccessionNumber(institute.getCode(), ACCENUMB_1); assertThat(a1.getAccessionNumber(), is(ACCENUMB_1)); assertThat(a1.getDoi(), is(DOI_1)); - AccessionHeaderJson aHS = new AccessionHeaderJson(); - aHS.doi = DOI_1; - aHS.instCode = institute.getCode(); - aHS.acceNumb = ACCENUMB_1; - aHS.genus = GENUS_1; - - List responses = accessionUploader.deleteAccessions(institute, Collections.singletonList(aHS)); + List responses = accessionUploader.deleteAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, DOI_1)); assertEquals("Accessions with doi cannot be deleted", responses.get(0).getError()); } @Test(expected = org.genesys2.server.exception.InvalidApiUsageException.class) public void testDeleteAccessionsWithIncorrectInstituteShouldFail() { - accessionUploader.upsertAccessions(institute, upsertAccession(institute.getCode(), ACCENUMB_1, GENUS_1, null)); + accessionUploader.upsertAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, null)); Accession a1 = accessionRepository.findByInstituteCodeAndAccessionNumber(institute.getCode(), ACCENUMB_1); assertThat(a1.getAccessionNumber(), is(ACCENUMB_1)); assertNull(a1.getDoi()); - - AccessionHeaderJson aHS = new AccessionHeaderJson(); - aHS.instCode = institute.getCode(); - aHS.acceNumb = ACCENUMB_1; - aHS.genus = GENUS_1; - - accessionUploader.deleteAccessions(institute2, Collections.singletonList(aHS)); + accessionUploader.deleteAccessions(institute2, upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, null)); fail(); } @Test public void testDeleteAccessionsShouldNotDeleteAccessionsFromAnotherInstitute() { - accessionUploader.upsertAccessions(institute, upsertAccession(institute.getCode(), ACCENUMB_1, GENUS_1, null)); + accessionUploader.upsertAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, null)); Accession a1 = accessionRepository.findByInstituteCodeAndAccessionNumber(institute.getCode(), ACCENUMB_1); assertThat(a1.getAccessionNumber(), is(ACCENUMB_1)); assertNull(a1.getDoi()); - AccessionHeaderJson aHS = new AccessionHeaderJson(); - aHS.instCode = institute2.getCode(); - aHS.acceNumb = ACCENUMB_1; - aHS.genus = GENUS_1; - - accessionUploader.deleteAccessions(institute2, Collections.singletonList(aHS)); + accessionUploader.deleteAccessions(institute2, upsertAccessions(institute2.getCode(), ACCENUMB_1, GENUS_1, null)); AccessionHistoric accessionHistoric = accessionHistoricRepository.findOneByUuid(a1.getUuid()); assertNull(accessionHistoric); @@ -416,8 +393,8 @@ public class AccessionUploaderTest extends AbstractServicesTest { @Test public void testDeleteAccessionsShouldOneWithoutDOI() { - accessionUploader.upsertAccessions(institute, upsertAccession(institute.getCode(), ACCENUMB_1, GENUS_1, null)); - accessionUploader.upsertAccessions(institute, upsertAccession(institute.getCode(), ACCENUMB_2, GENUS_2, DOI_1)); + accessionUploader.upsertAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_1, GENUS_1, null)); + accessionUploader.upsertAccessions(institute, upsertAccessions(institute.getCode(), ACCENUMB_2, GENUS_2, DOI_1)); Accession accWithoutDoi = accessionRepository.findByInstituteCodeAndAccessionNumber(institute.getCode(), ACCENUMB_1); assertThat(accWithoutDoi.getAccessionNumber(), is(ACCENUMB_1)); @@ -432,16 +409,11 @@ public class AccessionUploaderTest extends AbstractServicesTest { aHS1.acceNumb = ACCENUMB_1; aHS1.genus = GENUS_1; - AccessionHeaderJson aHS2 = new AccessionHeaderJson(); - aHS2.instCode = institute.getCode(); - aHS2.acceNumb = ACCENUMB_2; - aHS2.genus = GENUS_2; - - List headers = new ArrayList<>(2); - headers.add(aHS1); - headers.add(aHS2); + final ArrayNode arrayNode = objectMapper.createArrayNode(); + arrayNode.add(upsertAccession(institute.getCode(), ACCENUMB_1, GENUS_1, null)); + arrayNode.add(upsertAccession(institute.getCode(), ACCENUMB_2, GENUS_2, null)); - List responses = accessionUploader.deleteAccessions(institute, headers); + List responses = accessionUploader.deleteAccessions(institute, arrayNode); assertEquals(responses.get(1).getError(), "Accessions with doi cannot be deleted"); AccessionHistoric accession1Historic = accessionHistoricRepository.findOneByUuid(accWithoutDoi.getUuid()); @@ -457,7 +429,7 @@ public class AccessionUploaderTest extends AbstractServicesTest { */ @Test public void testReportInvalidJsonField() { - ArrayNode batch = upsertAccession(institute2.getCode(), ACCENUMB_1, GENUS_1, DOI_1); + ArrayNode batch = upsertAccessions(institute2.getCode(), ACCENUMB_1, GENUS_1, DOI_1); ObjectNode a1= (ObjectNode) batch.get(0); a1.put("someInvalidField", 1.0); List op = accessionUploader.upsertAccessions(institute2, batch); -- GitLab