From 030d6f836a694e0561993bb1523e3b29ebd11ac0 Mon Sep 17 00:00:00 2001 From: jorizci Date: Fri, 22 Jun 2018 09:17:47 +0100 Subject: [PATCH 1/6] Cucumber first test --- accession-commons-jpa/pom.xml | 16 ++++ .../accession/BagCucumberIntegrationTest.java | 28 +++++++ .../accession/BagCucumberStepDefinitions.java | 78 +++++++++++++++++++ ...stJpaDatabaseServiceTestConfiguration.java | 6 ++ .../src/test/resources/features/bag.feature | 19 +++++ 5 files changed, 147 insertions(+) create mode 100644 accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/BagCucumberIntegrationTest.java create mode 100644 accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/BagCucumberStepDefinitions.java create mode 100644 accession-commons-jpa/src/test/resources/features/bag.feature diff --git a/accession-commons-jpa/pom.xml b/accession-commons-jpa/pom.xml index 9fabaff5..eec425db 100644 --- a/accession-commons-jpa/pom.xml +++ b/accession-commons-jpa/pom.xml @@ -31,6 +31,22 @@ h2 test + + io.cucumber + cucumber-java8 + 3.0.2 + + + io.cucumber + cucumber-junit + 3.0.2 + test + + + io.cucumber + cucumber-spring + 3.0.2 + diff --git a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/BagCucumberIntegrationTest.java b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/BagCucumberIntegrationTest.java new file mode 100644 index 00000000..c10cb3ac --- /dev/null +++ b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/BagCucumberIntegrationTest.java @@ -0,0 +1,28 @@ +/* + * + * Copyright 2018 EMBL - European Bioinformatics Institute + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package uk.ac.ebi.ampt2d.commons.accession; + +import cucumber.api.CucumberOptions; +import cucumber.api.junit.Cucumber; +import org.junit.runner.RunWith; + +@RunWith(Cucumber.class) +@CucumberOptions(features = "src/test/resources/features/bag.feature", plugin = {"pretty", "html:target/cucumber"}) +public class BagCucumberIntegrationTest { + +} diff --git a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/BagCucumberStepDefinitions.java b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/BagCucumberStepDefinitions.java new file mode 100644 index 00000000..a362a9f6 --- /dev/null +++ b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/BagCucumberStepDefinitions.java @@ -0,0 +1,78 @@ +/* + * + * Copyright 2018 EMBL - European Bioinformatics Institute + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package uk.ac.ebi.ampt2d.commons.accession; + +import cucumber.api.java.en.Given; +import cucumber.api.java.en.Then; +import cucumber.api.java.en.When; +import org.junit.Assert; +import org.junit.Ignore; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; +import uk.ac.ebi.ampt2d.commons.accession.core.AccessioningService; +import uk.ac.ebi.ampt2d.commons.accession.core.models.AccessionWrapper; +import uk.ac.ebi.ampt2d.test.TestModel; +import uk.ac.ebi.ampt2d.test.configuration.TestJpaDatabaseServiceTestConfiguration; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@Ignore +@RunWith(SpringRunner.class) +@SpringBootTest(classes = {TestJpaDatabaseServiceTestConfiguration.class}) +public class BagCucumberStepDefinitions { + + @Autowired + private AccessioningService accessioningService; + + private List> lastGetOrCreateOperation; + + @Given("^the bag is empty$") + public void the_bag_is_empty() { + + } + + @When("^I put (\\d+) (\\w+) in the bag$") + public void i_put_something_in_the_bag(final int quantity, final String something) { + + } + + @Then("^the bag should contain only (\\d+) (\\w+)$") + public void the_bag_should_contain_only_something(final int quantity, final String something) { + } + + @Then("^the bag should contain (\\d+) (\\w+)$") + public void the_bag_should_contain_something(final int quantity, final String something) { + } + + @When("^I submit (\\w+,*)+ to accessioning service$") + public void iSubmitObjectsToAccessioningService(String objects) throws Throwable { + List models = Arrays.stream(objects.split(",")).map(TestModel::of).collect(Collectors.toList()); + lastGetOrCreateOperation = accessioningService.getOrCreate(models); + } + + @Then("^I should receive accessions (\\w+,*)+$") + public void iShouldReceiveAccessions(String objects) throws Throwable { + final String[] split = objects.split(","); + Assert.assertEquals(split.length, lastGetOrCreateOperation.size()); + lastGetOrCreateOperation + } +} diff --git a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/configuration/TestJpaDatabaseServiceTestConfiguration.java b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/configuration/TestJpaDatabaseServiceTestConfiguration.java index 0d5d7670..44d34a99 100644 --- a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/configuration/TestJpaDatabaseServiceTestConfiguration.java +++ b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/configuration/TestJpaDatabaseServiceTestConfiguration.java @@ -19,6 +19,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.domain.EntityScan; +import org.springframework.boot.test.autoconfigure.core.AutoConfigureCache; +import org.springframework.boot.test.autoconfigure.orm.jpa.AutoConfigureDataJpa; +import org.springframework.boot.test.autoconfigure.orm.jpa.AutoConfigureTestEntityManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @@ -50,6 +53,9 @@ @EnableJpaRepositories(basePackages = {"uk.ac.ebi.ampt2d.test.persistence", "uk.ac.ebi.ampt2d.commons.accession.persistence.jpa.repositories" }) +@AutoConfigureCache +@AutoConfigureDataJpa +@AutoConfigureTestEntityManager public class TestJpaDatabaseServiceTestConfiguration { @Autowired diff --git a/accession-commons-jpa/src/test/resources/features/bag.feature b/accession-commons-jpa/src/test/resources/features/bag.feature new file mode 100644 index 00000000..bfed401e --- /dev/null +++ b/accession-commons-jpa/src/test/resources/features/bag.feature @@ -0,0 +1,19 @@ +Feature: Accession generation + + Scenario Outline: I want to receive unique accession for my newly submitted / created objects, so they are + identifiable in the system. + When I submit to accessioning service + Then I should receive accessions + Examples: + | objects | accessions | + | A | id-service-A | + | B,C | id-service-B,id-service-C | + | D,E,F | id-service-D,id-service-E,id-service-F | + + + Scenario: Putting few things in the bag + Given the bag is empty + When I put 1 potato in the bag + And I put 2 cucumber in the bag + Then the bag should contain 1 potato + And the bag should contain 2 cucumber \ No newline at end of file From 167353ba61440fda23b7da629f80d547f91aab39 Mon Sep 17 00:00:00 2001 From: jorizci Date: Tue, 26 Jun 2018 10:42:52 +0100 Subject: [PATCH 2/6] Added testers for cucumber * Added submodule with common test functionality * Added integration test for jpa and mongo --- .../core/models/AccessionVersionsWrapper.java | 11 ++ accession-commons-jpa/pom.xml | 13 +- .../AccessioningIntegrationTests.java | 37 +++++ .../AccessioningServiceStepDefinitions.java | 135 +++++++++++++++ .../accession/BagCucumberStepDefinitions.java | 78 --------- .../core/BasicAccessioningServiceTest.java | 2 +- ...aseJpaAccessionedObjectRepositoryTest.java | 2 +- ...ringDataRepositoryDatabaseServiceTest.java | 2 +- .../BasicRestControllerTestConfiguration.java | 2 +- .../CucumberTestConfiguration.java | 110 +++++++++++++ ...stJpaDatabaseServiceTestConfiguration.java | 2 +- .../ampt2d/test/persistence/TestEntity.java | 2 +- .../TestInactiveAccessionEntity.java | 7 +- .../test/resources/features/accession.feature | 28 ++++ .../src/test/resources/features/bag.feature | 19 --- .../src/test/resources/features/merge.feature | 37 +++++ .../resources/features/modification.feature | 40 +++++ .../test/resources/features/retrieval.feature | 33 ++++ accession-commons-mongodb/pom.xml | 23 +++ .../AccessioningIntegrationTests.java | 37 +++++ .../AccessioningServiceStepDefinitions.java | 154 ++++++++++++++++++ .../BasicMongoDbHistoryServiceTest.java | 100 +++++------- .../MongoDbCucumberTestConfiguration.java | 99 +++++++++++ .../MongoDbTestConfiguration.java | 7 +- .../persistence/document/TestDocument.java | 2 +- .../document/TestEventDocument.java | 2 +- .../document/TestInactiveSubDocument.java | 2 +- .../TestMongoDbInactiveAccessionService.java | 2 +- .../test/resources/features/accession.feature | 28 ++++ .../src/test/resources/features/merge.feature | 37 +++++ .../resources/features/modification.feature | 40 +++++ .../test/resources/features/retrieval.feature | 33 ++++ .../pom.xml | 6 + .../core/BasicMonotonicAccessioningTest.java | 4 +- ...notonicAccessioningWithInitValuesTest.java | 2 +- ...tonicDatabaseServiceTestConfiguration.java | 2 +- .../test/persistence/TestMonotonicEntity.java | 2 +- .../TestMonotonicInactiveAccessionEntity.java | 2 +- .../service/TestMonotonicDatabaseService.java | 2 +- accession-commons-test/pom.xml | 82 ++++++++++ .../ac/ebi/ampt2d/test/models}/TestModel.java | 2 +- .../ebi/ampt2d/test/rest/BasicRestModel.java | 3 +- .../test/rest/MockTestAccessionGenerator.java | 6 +- .../rest/MockTestAccessioningService.java | 2 +- .../ebi/ampt2d/test/rest/TestController.java | 2 +- .../ampt2d/test/testers}/AccessionTester.java | 3 +- .../AccessionVersionWrapperTester.java | 70 ++++++++ .../AccessionWrapperCollectionTester.java | 78 +++++++++ .../testers/AccessioningServiceTester.java | 114 +++++++++++++ .../ampt2d/test/testers}/HistoryTester.java | 10 +- .../ampt2d/test/testers/IMethodTester.java | 12 +- .../test/testers/MethodResponseTester.java | 57 +++++++ .../ebi/ampt2d/test/testers/MethodTester.java | 51 ++++++ .../ampt2d/test/utils/ThrowingSupplier.java | 12 +- .../test/utils/VoidThrowingSupplier.java | 12 +- pom.xml | 1 + 56 files changed, 1447 insertions(+), 216 deletions(-) create mode 100644 accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningIntegrationTests.java create mode 100644 accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningServiceStepDefinitions.java delete mode 100644 accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/BagCucumberStepDefinitions.java create mode 100644 accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/configuration/CucumberTestConfiguration.java create mode 100644 accession-commons-jpa/src/test/resources/features/accession.feature delete mode 100644 accession-commons-jpa/src/test/resources/features/bag.feature create mode 100644 accession-commons-jpa/src/test/resources/features/merge.feature create mode 100644 accession-commons-jpa/src/test/resources/features/modification.feature create mode 100644 accession-commons-jpa/src/test/resources/features/retrieval.feature create mode 100644 accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningIntegrationTests.java create mode 100644 accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningServiceStepDefinitions.java create mode 100644 accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/configuration/MongoDbCucumberTestConfiguration.java create mode 100644 accession-commons-mongodb/src/test/resources/features/accession.feature create mode 100644 accession-commons-mongodb/src/test/resources/features/merge.feature create mode 100644 accession-commons-mongodb/src/test/resources/features/modification.feature create mode 100644 accession-commons-mongodb/src/test/resources/features/retrieval.feature create mode 100644 accession-commons-test/pom.xml rename {accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test => accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/models}/TestModel.java (95%) rename {accession-commons-jpa/src/test => accession-commons-test/src/main}/java/uk/ac/ebi/ampt2d/test/rest/BasicRestModel.java (95%) rename {accession-commons-jpa/src/test => accession-commons-test/src/main}/java/uk/ac/ebi/ampt2d/test/rest/MockTestAccessionGenerator.java (98%) rename {accession-commons-jpa/src/test => accession-commons-test/src/main}/java/uk/ac/ebi/ampt2d/test/rest/MockTestAccessioningService.java (96%) rename {accession-commons-jpa/src/test => accession-commons-test/src/main}/java/uk/ac/ebi/ampt2d/test/rest/TestController.java (96%) rename {accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test => accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers}/AccessionTester.java (97%) create mode 100644 accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/AccessionVersionWrapperTester.java create mode 100644 accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/AccessionWrapperCollectionTester.java create mode 100644 accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/AccessioningServiceTester.java rename {accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test => accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers}/HistoryTester.java (92%) rename accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/BagCucumberIntegrationTest.java => accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/IMethodTester.java (65%) create mode 100644 accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/MethodResponseTester.java create mode 100644 accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/MethodTester.java rename accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/TestModel.java => accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/utils/ThrowingSupplier.java (80%) rename accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/test/TestModel.java => accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/utils/VoidThrowingSupplier.java (80%) diff --git a/accession-commons-core/src/main/java/uk/ac/ebi/ampt2d/commons/accession/core/models/AccessionVersionsWrapper.java b/accession-commons-core/src/main/java/uk/ac/ebi/ampt2d/commons/accession/core/models/AccessionVersionsWrapper.java index d8b16598..9e95dc63 100644 --- a/accession-commons-core/src/main/java/uk/ac/ebi/ampt2d/commons/accession/core/models/AccessionVersionsWrapper.java +++ b/accession-commons-core/src/main/java/uk/ac/ebi/ampt2d/commons/accession/core/models/AccessionVersionsWrapper.java @@ -23,6 +23,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -65,4 +66,14 @@ public ACCESSION getAccession() { public List> getModelWrappers() { return data; } + + public Optional> getVersion(int version) { + for (AccessionWrapper wrapper : data) { + if (wrapper.getVersion() == version) { + return Optional.of(wrapper); + } + } + return Optional.empty(); + } + } \ No newline at end of file diff --git a/accession-commons-jpa/pom.xml b/accession-commons-jpa/pom.xml index eec425db..2c0b041c 100644 --- a/accession-commons-jpa/pom.xml +++ b/accession-commons-jpa/pom.xml @@ -22,6 +22,12 @@ accession-commons-core 0.5-SNAPSHOT + + uk.ac.ebi.ampt2d + accession-commons-test + 0.5-SNAPSHOT + test + org.springframework.boot spring-boot-starter-data-jpa @@ -34,18 +40,19 @@ io.cucumber cucumber-java8 - 3.0.2 + 2.4.0 + test io.cucumber cucumber-junit - 3.0.2 + 2.4.0 test io.cucumber cucumber-spring - 3.0.2 + 2.4.0 diff --git a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningIntegrationTests.java b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningIntegrationTests.java new file mode 100644 index 00000000..26f9cc14 --- /dev/null +++ b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningIntegrationTests.java @@ -0,0 +1,37 @@ +/* + * + * Copyright 2018 EMBL - European Bioinformatics Institute + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package uk.ac.ebi.ampt2d.commons.accession; + +import cucumber.api.CucumberOptions; +import cucumber.api.junit.Cucumber; +import org.junit.runner.RunWith; + +@RunWith(Cucumber.class) +@CucumberOptions( + features = { + "src/test/resources/features/accession.feature", + "src/test/resources/features/modification.feature", + "src/test/resources/features/merge.feature", + "src/test/resources/features/retrieval.feature"}, + plugin = { + "pretty", + "html:target/cucumber"}, + tags = {"not @ignore"}) +public class AccessioningIntegrationTests { + +} diff --git a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningServiceStepDefinitions.java b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningServiceStepDefinitions.java new file mode 100644 index 00000000..e1c3f93c --- /dev/null +++ b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningServiceStepDefinitions.java @@ -0,0 +1,135 @@ +/* + * + * Copyright 2018 EMBL - European Bioinformatics Institute + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package uk.ac.ebi.ampt2d.commons.accession; + +import cucumber.api.java.en.And; +import cucumber.api.java.en.Given; +import cucumber.api.java.en.Then; +import cucumber.api.java.en.When; +import org.junit.Ignore; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit4.SpringRunner; +import uk.ac.ebi.ampt2d.commons.accession.core.exceptions.AccessionDoesNotExistException; +import uk.ac.ebi.ampt2d.commons.accession.core.exceptions.AccessionMergedException; +import uk.ac.ebi.ampt2d.test.configuration.CucumberTestConfiguration; +import uk.ac.ebi.ampt2d.test.models.TestModel; +import uk.ac.ebi.ampt2d.test.testers.AccessioningServiceTester; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@Ignore +@RunWith(SpringRunner.class) +@SpringBootTest(classes = {CucumberTestConfiguration.class}) +@DirtiesContext +public class AccessioningServiceStepDefinitions { + + @Autowired + private AccessioningServiceTester tester; + + @Given("^already accessioned ([\\w-,]+)$") + @When("^user submits ([\\w-,]+) to accessioning service$") + public void submitObjectsToAccessioningService(String objects) { + tester.getOrCreate(toModels(objects)); + } + + @Then("^user received accessions: ([\\w-,]+)$") + public void iShouldReceiveAccessions(String objects) { + final String[] accessions = objects.split(","); + tester.getSingleVersionResults().assertAccessions(accessions); + } + + @When("^user sends patch (\\w+) for accession ([\\w-]+)$") + public void userSendsPatchInputForAccessionAccession(String patchData, String accession) { + tester.patch(accession, TestModel.of(patchData)); + } + + @Then("^user should receive version list for ([\\w-]+) with (\\d+) version$") + public void userShouldReceivePatchForAccessionsWithVersion(String accession, int totalVersions) { + tester.getLastMultipleVersionResult().assertAccession(accession).assertTotalVersions(totalVersions); + } + + @And("^patch must have versions increased$") + public void patchMustHaveVersionsIncreased() { + tester.getLastMultipleVersionResult().assertVersionAreIncreased(); + } + + @Then("^user receives accession does not exist$") + public void userReceivesAccessionDoesNotExistError() { + tester.getLastMethodResponse().assertThrow(AccessionDoesNotExistException.class); + } + + @When("^user updates ([\\w-]+) patch (\\d+) with ([\\w-]+)$") + public void userUpdatesAccessionWithInput(String accession, int patch, String newData) { + tester.update(accession, patch, newData); + } + + + @And("^hash of version (\\d+) should be ([\\w-]+)$") + public void hashOfVersionShouldBeHash(int version, String hash) { + tester.getLastMultipleVersionResult().assertHash(version, hash); + } + + @When("^user merges ([\\w-]+) with ([\\w-]+) reason: ([\\w ]+)$") + public void userMergesAWithB(String accessionA, String accessionB, String reason) { + tester.merge(accessionA, accessionB, reason); + } + + @Then("^user receives an unknown error$") + public void weShouldHaveAUnknownError() { + tester.getLastMethodResponse().assertThrow(UnknownError.class); + } + + @Then("^user operation finished correctly$") + public void lastProcessFinishedOk() { + tester.getLastMethodResponse().assertNoException(); + } + + @Then("^user receives an accession already merged error$") + public void weShouldHaveAAccessionAlreadyMerged() { + tester.getLastMethodResponse().assertThrow(AccessionMergedException.class); + } + + @When("^user retrieves objects: ([\\w-,]+)$") + public void userRetrievesObjectA(String values) { + tester.get(toModels(values)); + } + + private List toModels(String values) { + return Arrays.stream(values.split(",")).map(TestModel::of).collect(Collectors.toList()); + } + + @Then("^user receives (\\d+) elements$") + public void userReceivesANumberOfElements(int numberOfElements) { + tester.getSingleVersionResults().assertSize(numberOfElements); + } + + @And("^user received a response with values: ([\\w-,]+)$") + public void userReceivedAResponseWithObject(String values) { + tester.getSingleVersionResults().assertAccessionValues(values.split(",")); + } + + @When("^user retrieves accessions: ([\\w-,]+)$") + public void userRetrievesAccessionsIdServiceA(String accessionIds) { + tester.getAccessions(accessionIds.split(",")); + } +} diff --git a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/BagCucumberStepDefinitions.java b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/BagCucumberStepDefinitions.java deleted file mode 100644 index a362a9f6..00000000 --- a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/BagCucumberStepDefinitions.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * - * Copyright 2018 EMBL - European Bioinformatics Institute - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -package uk.ac.ebi.ampt2d.commons.accession; - -import cucumber.api.java.en.Given; -import cucumber.api.java.en.Then; -import cucumber.api.java.en.When; -import org.junit.Assert; -import org.junit.Ignore; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; -import uk.ac.ebi.ampt2d.commons.accession.core.AccessioningService; -import uk.ac.ebi.ampt2d.commons.accession.core.models.AccessionWrapper; -import uk.ac.ebi.ampt2d.test.TestModel; -import uk.ac.ebi.ampt2d.test.configuration.TestJpaDatabaseServiceTestConfiguration; - -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -@Ignore -@RunWith(SpringRunner.class) -@SpringBootTest(classes = {TestJpaDatabaseServiceTestConfiguration.class}) -public class BagCucumberStepDefinitions { - - @Autowired - private AccessioningService accessioningService; - - private List> lastGetOrCreateOperation; - - @Given("^the bag is empty$") - public void the_bag_is_empty() { - - } - - @When("^I put (\\d+) (\\w+) in the bag$") - public void i_put_something_in_the_bag(final int quantity, final String something) { - - } - - @Then("^the bag should contain only (\\d+) (\\w+)$") - public void the_bag_should_contain_only_something(final int quantity, final String something) { - } - - @Then("^the bag should contain (\\d+) (\\w+)$") - public void the_bag_should_contain_something(final int quantity, final String something) { - } - - @When("^I submit (\\w+,*)+ to accessioning service$") - public void iSubmitObjectsToAccessioningService(String objects) throws Throwable { - List models = Arrays.stream(objects.split(",")).map(TestModel::of).collect(Collectors.toList()); - lastGetOrCreateOperation = accessioningService.getOrCreate(models); - } - - @Then("^I should receive accessions (\\w+,*)+$") - public void iShouldReceiveAccessions(String objects) throws Throwable { - final String[] split = objects.split(","); - Assert.assertEquals(split.length, lastGetOrCreateOperation.size()); - lastGetOrCreateOperation - } -} diff --git a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/core/BasicAccessioningServiceTest.java b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/core/BasicAccessioningServiceTest.java index ca6cf0cb..67703fda 100644 --- a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/core/BasicAccessioningServiceTest.java +++ b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/core/BasicAccessioningServiceTest.java @@ -31,8 +31,8 @@ import uk.ac.ebi.ampt2d.commons.accession.core.exceptions.HashAlreadyExistsException; import uk.ac.ebi.ampt2d.commons.accession.core.models.AccessionVersionsWrapper; import uk.ac.ebi.ampt2d.commons.accession.core.models.AccessionWrapper; -import uk.ac.ebi.ampt2d.test.TestModel; import uk.ac.ebi.ampt2d.test.configuration.TestJpaDatabaseServiceTestConfiguration; +import uk.ac.ebi.ampt2d.test.models.TestModel; import uk.ac.ebi.ampt2d.test.persistence.TestRepository; import java.util.Arrays; diff --git a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/persistence/jpa/repositories/BaseJpaAccessionedObjectRepositoryTest.java b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/persistence/jpa/repositories/BaseJpaAccessionedObjectRepositoryTest.java index 26ed2f64..f250f0ef 100644 --- a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/persistence/jpa/repositories/BaseJpaAccessionedObjectRepositoryTest.java +++ b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/persistence/jpa/repositories/BaseJpaAccessionedObjectRepositoryTest.java @@ -24,8 +24,8 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import uk.ac.ebi.ampt2d.commons.accession.core.models.AccessionWrapper; -import uk.ac.ebi.ampt2d.test.TestModel; import uk.ac.ebi.ampt2d.test.configuration.TestJpaDatabaseServiceTestConfiguration; +import uk.ac.ebi.ampt2d.test.models.TestModel; import uk.ac.ebi.ampt2d.test.persistence.TestEntity; import uk.ac.ebi.ampt2d.test.persistence.TestRepository; diff --git a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/persistence/jpa/services/JpaBasicSpringDataRepositoryDatabaseServiceTest.java b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/persistence/jpa/services/JpaBasicSpringDataRepositoryDatabaseServiceTest.java index a3587a7b..78e8cd57 100644 --- a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/persistence/jpa/services/JpaBasicSpringDataRepositoryDatabaseServiceTest.java +++ b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/persistence/jpa/services/JpaBasicSpringDataRepositoryDatabaseServiceTest.java @@ -34,8 +34,8 @@ import uk.ac.ebi.ampt2d.commons.accession.core.models.AccessionWrapper; import uk.ac.ebi.ampt2d.commons.accession.core.models.EventType; import uk.ac.ebi.ampt2d.commons.accession.core.models.SaveResponse; -import uk.ac.ebi.ampt2d.test.TestModel; import uk.ac.ebi.ampt2d.test.configuration.TestJpaDatabaseServiceTestConfiguration; +import uk.ac.ebi.ampt2d.test.models.TestModel; import uk.ac.ebi.ampt2d.test.persistence.TestInactiveAccessionEntity; import uk.ac.ebi.ampt2d.test.persistence.TestInactiveAccessionRepository; import uk.ac.ebi.ampt2d.test.persistence.TestRepository; diff --git a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/configuration/BasicRestControllerTestConfiguration.java b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/configuration/BasicRestControllerTestConfiguration.java index 980d3f35..412f65ee 100644 --- a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/configuration/BasicRestControllerTestConfiguration.java +++ b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/configuration/BasicRestControllerTestConfiguration.java @@ -35,7 +35,7 @@ import uk.ac.ebi.ampt2d.commons.accession.persistence.services.InactiveAccessionService; import uk.ac.ebi.ampt2d.commons.accession.persistence.jpa.repositories.BasicJpaAccessionedObjectCustomRepositoryImpl; import uk.ac.ebi.ampt2d.commons.accession.persistence.jpa.service.BasicJpaInactiveAccessionService; -import uk.ac.ebi.ampt2d.test.TestModel; +import uk.ac.ebi.ampt2d.test.models.TestModel; import uk.ac.ebi.ampt2d.test.persistence.TestEntity; import uk.ac.ebi.ampt2d.test.persistence.TestInactiveAccessionEntity; import uk.ac.ebi.ampt2d.test.persistence.TestInactiveAccessionRepository; diff --git a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/configuration/CucumberTestConfiguration.java b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/configuration/CucumberTestConfiguration.java new file mode 100644 index 00000000..022ed530 --- /dev/null +++ b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/configuration/CucumberTestConfiguration.java @@ -0,0 +1,110 @@ +/* + * + * Copyright 2018 EMBL - European Bioinformatics Institute + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package uk.ac.ebi.ampt2d.test.configuration; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.domain.EntityScan; +import org.springframework.boot.test.autoconfigure.core.AutoConfigureCache; +import org.springframework.boot.test.autoconfigure.orm.jpa.AutoConfigureDataJpa; +import org.springframework.boot.test.autoconfigure.orm.jpa.AutoConfigureTestEntityManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Scope; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import uk.ac.ebi.ampt2d.commons.accession.core.AccessioningService; +import uk.ac.ebi.ampt2d.commons.accession.core.BasicAccessioningService; +import uk.ac.ebi.ampt2d.commons.accession.core.DatabaseService; +import uk.ac.ebi.ampt2d.commons.accession.generators.SingleAccessionGenerator; +import uk.ac.ebi.ampt2d.commons.accession.hashing.SHA1HashingFunction; +import uk.ac.ebi.ampt2d.commons.accession.persistence.jpa.repositories.BasicJpaAccessionedObjectCustomRepositoryImpl; +import uk.ac.ebi.ampt2d.commons.accession.persistence.jpa.service.BasicJpaInactiveAccessionService; +import uk.ac.ebi.ampt2d.commons.accession.persistence.repositories.IAccessionedObjectCustomRepository; +import uk.ac.ebi.ampt2d.commons.accession.persistence.services.BasicSpringDataRepositoryDatabaseService; +import uk.ac.ebi.ampt2d.commons.accession.persistence.services.InactiveAccessionService; +import uk.ac.ebi.ampt2d.test.models.TestModel; +import uk.ac.ebi.ampt2d.test.persistence.TestEntity; +import uk.ac.ebi.ampt2d.test.persistence.TestInactiveAccessionEntity; +import uk.ac.ebi.ampt2d.test.persistence.TestInactiveAccessionRepository; +import uk.ac.ebi.ampt2d.test.persistence.TestRepository; +import uk.ac.ebi.ampt2d.test.persistence.TestStringHistoryRepository; +import uk.ac.ebi.ampt2d.test.persistence.TestStringOperationEntity; +import uk.ac.ebi.ampt2d.test.testers.AccessioningServiceTester; + +@Configuration +@ComponentScan(basePackageClasses = IAccessionedObjectCustomRepository.class) +@EnableJpaAuditing +@ComponentScan(basePackageClasses = BasicJpaAccessionedObjectCustomRepositoryImpl.class) +@EntityScan("uk.ac.ebi.ampt2d.test.persistence") +@EnableJpaRepositories(basePackages = {"uk.ac.ebi.ampt2d.test.persistence", + "uk.ac.ebi.ampt2d.commons.accession.persistence.jpa.repositories" +}) +@AutoConfigureCache +@AutoConfigureDataJpa +@AutoConfigureTestEntityManager +public class CucumberTestConfiguration { + + @Autowired + private TestRepository repository; + + @Autowired + private TestStringHistoryRepository historyRepository; + + @Autowired + private TestInactiveAccessionRepository testInactiveAccessionRepository; + + @Bean + public DatabaseService databaseService() { + return new BasicSpringDataRepositoryDatabaseService<>( + repository, + TestEntity::new, + inactiveService() + ); + } + + @Bean + public InactiveAccessionService inactiveService() { + return new BasicJpaInactiveAccessionService<>( + historyRepository, + TestInactiveAccessionEntity::new, + testInactiveAccessionRepository, + TestStringOperationEntity::new + ); + } + + @Bean + public AccessioningService accessioningService() { + return new BasicAccessioningService<>( + SingleAccessionGenerator.ofHashAccessionGenerator( + TestModel::getValue, + s -> "id-service-" + s + ), + databaseService(), + TestModel::getValue, + new SHA1HashingFunction() + ); + } + + @Bean + @Scope("cucumber-glue") + public AccessioningServiceTester accessioningServiceTester() { + return new AccessioningServiceTester(accessioningService()); + } + +} diff --git a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/configuration/TestJpaDatabaseServiceTestConfiguration.java b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/configuration/TestJpaDatabaseServiceTestConfiguration.java index 44d34a99..c803f703 100644 --- a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/configuration/TestJpaDatabaseServiceTestConfiguration.java +++ b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/configuration/TestJpaDatabaseServiceTestConfiguration.java @@ -37,7 +37,7 @@ import uk.ac.ebi.ampt2d.commons.accession.persistence.services.InactiveAccessionService; import uk.ac.ebi.ampt2d.commons.accession.persistence.jpa.repositories.BasicJpaAccessionedObjectCustomRepositoryImpl; import uk.ac.ebi.ampt2d.commons.accession.persistence.jpa.service.BasicJpaInactiveAccessionService; -import uk.ac.ebi.ampt2d.test.TestModel; +import uk.ac.ebi.ampt2d.test.models.TestModel; import uk.ac.ebi.ampt2d.test.persistence.TestEntity; import uk.ac.ebi.ampt2d.test.persistence.TestInactiveAccessionEntity; import uk.ac.ebi.ampt2d.test.persistence.TestInactiveAccessionRepository; diff --git a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/persistence/TestEntity.java b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/persistence/TestEntity.java index fe6d43e5..4051db6c 100644 --- a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/persistence/TestEntity.java +++ b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/persistence/TestEntity.java @@ -19,7 +19,7 @@ import uk.ac.ebi.ampt2d.commons.accession.core.models.AccessionWrapper; import uk.ac.ebi.ampt2d.commons.accession.persistence.jpa.entities.AccessionedEntity; -import uk.ac.ebi.ampt2d.test.TestModel; +import uk.ac.ebi.ampt2d.test.models.TestModel; import javax.persistence.Entity; diff --git a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/persistence/TestInactiveAccessionEntity.java b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/persistence/TestInactiveAccessionEntity.java index 9ac88cb0..d60c813a 100644 --- a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/persistence/TestInactiveAccessionEntity.java +++ b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/persistence/TestInactiveAccessionEntity.java @@ -18,7 +18,7 @@ package uk.ac.ebi.ampt2d.test.persistence; import uk.ac.ebi.ampt2d.commons.accession.persistence.jpa.entities.InactiveAccessionEntity; -import uk.ac.ebi.ampt2d.test.TestModel; +import uk.ac.ebi.ampt2d.test.models.TestModel; import javax.persistence.Entity; import java.time.LocalDateTime; @@ -41,11 +41,6 @@ public String getValue() { return something; } - @Override - public String getAccession() { - return null; - } - @Override public String getHashedMessage() { return null; diff --git a/accession-commons-jpa/src/test/resources/features/accession.feature b/accession-commons-jpa/src/test/resources/features/accession.feature new file mode 100644 index 00000000..aaea86d6 --- /dev/null +++ b/accession-commons-jpa/src/test/resources/features/accession.feature @@ -0,0 +1,28 @@ +Feature: Accession generation + + Scenario Outline: I want to receive unique accession for my newly submitted / created objects, so they are + identifiable in the system. + When user submits to accessioning service + Then user received accessions: + Examples: + | input | accessions | + | A | id-service-A | + | B,C | id-service-B,id-service-C | + | D,E,F | id-service-D,id-service-E,id-service-F | + + Scenario Outline: I want to receive accessions for a mix of new and pre-existing objects. + Given already accessioned + When user submits to accessioning service + Then user received accessions: + Examples: + | objects | input | accessions | + | B | A | id-service-A | + | A | A | id-service-A | + | C | B,C | id-service-B,id-service-C | + | A,B,C,E | D,E,F | id-service-D,id-service-E,id-service-F | + + @ignore + Scenario: I want to generate accession in a space, based on clustering accessions from another existing space. + When user provides a list of ss accessions + Then user receives a rs list of accessions + And all rs must have at least one ss accessioned \ No newline at end of file diff --git a/accession-commons-jpa/src/test/resources/features/bag.feature b/accession-commons-jpa/src/test/resources/features/bag.feature deleted file mode 100644 index bfed401e..00000000 --- a/accession-commons-jpa/src/test/resources/features/bag.feature +++ /dev/null @@ -1,19 +0,0 @@ -Feature: Accession generation - - Scenario Outline: I want to receive unique accession for my newly submitted / created objects, so they are - identifiable in the system. - When I submit to accessioning service - Then I should receive accessions - Examples: - | objects | accessions | - | A | id-service-A | - | B,C | id-service-B,id-service-C | - | D,E,F | id-service-D,id-service-E,id-service-F | - - - Scenario: Putting few things in the bag - Given the bag is empty - When I put 1 potato in the bag - And I put 2 cucumber in the bag - Then the bag should contain 1 potato - And the bag should contain 2 cucumber \ No newline at end of file diff --git a/accession-commons-jpa/src/test/resources/features/merge.feature b/accession-commons-jpa/src/test/resources/features/merge.feature new file mode 100644 index 00000000..ac9050f3 --- /dev/null +++ b/accession-commons-jpa/src/test/resources/features/merge.feature @@ -0,0 +1,37 @@ +Feature: Accession merge + + Scenario: I want to merge an object but the destination object does not exist. + Given already accessioned A + When user merges id-service-A with id-service-B reason: because i say so + Then user receives an unknown error + + Scenario: I want to merge an object but the origin object does not exist. + Given already accessioned B + When user merges id-service-A with id-service-B reason: because i say so + Then user receives an unknown error + + Scenario: I want to merge an object but none of the two exist. + When user merges id-service-A with id-service-B reason: because i say so + Then user receives an unknown error + + Scenario: I want to merge an object + Given already accessioned A + And already accessioned B + When user merges id-service-A with id-service-B reason: because i say so + Then user operation finished correctly + + Scenario: I want to merge an object but the object has been already merged + Given already accessioned A + And already accessioned B + And already accessioned C + And user merges id-service-B with id-service-C reason: because i say so + When user merges id-service-A with id-service-B reason: because i say so + Then user receives an accession already merged error + + Scenario: I want to merge an object to another and then to a third one + Given already accessioned A + And already accessioned B + And already accessioned C + When user merges id-service-A with id-service-B reason: because i say so + When user merges id-service-B with id-service-C reason: because i say so + Then user operation finished correctly \ No newline at end of file diff --git a/accession-commons-jpa/src/test/resources/features/modification.feature b/accession-commons-jpa/src/test/resources/features/modification.feature new file mode 100644 index 00000000..579d3ae2 --- /dev/null +++ b/accession-commons-jpa/src/test/resources/features/modification.feature @@ -0,0 +1,40 @@ +Feature: Accession modification + + Scenario Outline: I want to create a new patch of an existing object, in order to register improvements made to it + without losing access to the old information. + Given already accessioned + When user sends patch for accession + Then user should receive version list for with 2 version + And patch must have versions increased + Examples: + | objects | input | accession | + | A | AA | id-service-A | + | B | BB | id-service-B | + | A,B,C,E | AA | id-service-A | + + Scenario: I want to create a new patch of a non existing object + When user sends patch AA for accession id-service-A + Then user receives accession does not exist + + Scenario Outline: I want to update the fields that identify uniquely an object. + without losing access to the old information. + Given already accessioned + When user updates patch with + Then user should receive version list for with 1 version + And hash of version 1 should be + Examples: + | objects | input | accession | patch | hash | + | A | AA | id-service-A | 1 | 801C34269F74ED383FC97DE33604B8A905ADB635 | + | B | BB | id-service-B | 1 | 71C9DB717578B9EE49A59E69375C16C0627DFFEF | + | A,B,C,E | AA | id-service-A | 1 | 801C34269F74ED383FC97DE33604B8A905ADB635 | + + Scenario: I want to update the fields that identify uniquely an object, but we already have an object with the + same values. + Given already accessioned A,B + When user updates id-service-A patch 1 with B + Then user receives an unknown error + + Scenario: I want to update an object that does not exist + When user updates id-service-A patch 1 with AB + Then user receives accession does not exist + diff --git a/accession-commons-jpa/src/test/resources/features/retrieval.feature b/accession-commons-jpa/src/test/resources/features/retrieval.feature new file mode 100644 index 00000000..bda8d0cd --- /dev/null +++ b/accession-commons-jpa/src/test/resources/features/retrieval.feature @@ -0,0 +1,33 @@ +Feature: Accession retrieval + + Scenario: I want to get the accession of an object that is not in the system. + When user retrieves objects: A + Then user receives 0 elements + + Scenario: I want to get the accession of an object that it is on the system. + Given already accessioned A + When user retrieves objects: A + Then user receives 1 elements + And user received a response with values: A + And user received accessions: id-service-A + + Scenario: I want to get accessions of a mixture of objects that may or not be on the system. + Given already accessioned A + Given already accessioned C + Given already accessioned E + When user retrieves objects: A,B,C,D,E + Then user receives 3 elements + And user received a response with values: A,C,E + And user received accessions: id-service-A,id-service-C,id-service-E + + Scenario: I want to get a specific accession that doesn't exist in the system. + When user retrieves accessions: id-service-A + Then user receives accession does not exist + + Scenario: I want to retrieve an accession that exists in the system + Given already accessioned A + Given already accessioned B + When user retrieves accessions: id-service-A,id-service-B + Then user receives 2 elements + And user received a response with values: A,B + And user received accessions: id-service-A,id-service-B \ No newline at end of file diff --git a/accession-commons-mongodb/pom.xml b/accession-commons-mongodb/pom.xml index cbee815e..a78ff364 100644 --- a/accession-commons-mongodb/pom.xml +++ b/accession-commons-mongodb/pom.xml @@ -17,6 +17,12 @@ + + uk.ac.ebi.ampt2d + accession-commons-test + 0.5-SNAPSHOT + test + uk.ac.ebi.ampt2d accession-commons-core @@ -32,6 +38,23 @@ 1.0.0-rc.5 test + + io.cucumber + cucumber-java8 + 2.4.0 + test + + + io.cucumber + cucumber-junit + 2.4.0 + test + + + io.cucumber + cucumber-spring + 2.4.0 + diff --git a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningIntegrationTests.java b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningIntegrationTests.java new file mode 100644 index 00000000..26f9cc14 --- /dev/null +++ b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningIntegrationTests.java @@ -0,0 +1,37 @@ +/* + * + * Copyright 2018 EMBL - European Bioinformatics Institute + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package uk.ac.ebi.ampt2d.commons.accession; + +import cucumber.api.CucumberOptions; +import cucumber.api.junit.Cucumber; +import org.junit.runner.RunWith; + +@RunWith(Cucumber.class) +@CucumberOptions( + features = { + "src/test/resources/features/accession.feature", + "src/test/resources/features/modification.feature", + "src/test/resources/features/merge.feature", + "src/test/resources/features/retrieval.feature"}, + plugin = { + "pretty", + "html:target/cucumber"}, + tags = {"not @ignore"}) +public class AccessioningIntegrationTests { + +} diff --git a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningServiceStepDefinitions.java b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningServiceStepDefinitions.java new file mode 100644 index 00000000..5e1f6f25 --- /dev/null +++ b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningServiceStepDefinitions.java @@ -0,0 +1,154 @@ +/* + * + * Copyright 2018 EMBL - European Bioinformatics Institute + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package uk.ac.ebi.ampt2d.commons.accession; + +import com.lordofthejars.nosqlunit.mongodb.MongoDbConfigurationBuilder; +import com.lordofthejars.nosqlunit.mongodb.MongoDbRule; +import cucumber.api.java.Before; +import cucumber.api.java.en.And; +import cucumber.api.java.en.Given; +import cucumber.api.java.en.Then; +import cucumber.api.java.en.When; +import org.junit.Ignore; +import org.junit.Rule; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.ApplicationContext; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit4.SpringRunner; +import uk.ac.ebi.ampt2d.commons.accession.core.exceptions.AccessionDoesNotExistException; +import uk.ac.ebi.ampt2d.commons.accession.core.exceptions.AccessionMergedException; +import uk.ac.ebi.ampt2d.test.configuration.MongoDbCucumberTestConfiguration; +import uk.ac.ebi.ampt2d.test.models.TestModel; +import uk.ac.ebi.ampt2d.test.rule.FixSpringMongoDbRule; +import uk.ac.ebi.ampt2d.test.testers.AccessioningServiceTester; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@Ignore +@RunWith(SpringRunner.class) +@SpringBootTest(classes = {MongoDbCucumberTestConfiguration.class}) +@DirtiesContext +public class AccessioningServiceStepDefinitions { + + @Rule + public MongoDbRule mongoDbRule = new FixSpringMongoDbRule(MongoDbConfigurationBuilder.mongoDb() + .databaseName("accession-test").build()); + + //Required for nosql unit + @Autowired + private ApplicationContext applicationContext; + + @Autowired + private AccessioningServiceTester tester; + + @Before + public void doSomethingBefore() { + mongoDbRule.getDatabaseOperation().deleteAll(); + } + + @Given("^already accessioned ([\\w-,]+)$") + @When("^user submits ([\\w-,]+) to accessioning service$") + public void submitObjectsToAccessioningService(String objects) { + tester.getOrCreate(toModels(objects)); + } + + @Then("^user received accessions: ([\\w-,]+)$") + public void iShouldReceiveAccessions(String objects) { + final String[] accessions = objects.split(","); + tester.getSingleVersionResults().assertAccessions(accessions); + } + + @When("^user sends patch (\\w+) for accession ([\\w-]+)$") + public void userSendsPatchInputForAccessionAccession(String patchData, String accession) { + tester.patch(accession, TestModel.of(patchData)); + } + + @Then("^user should receive version list for ([\\w-]+) with (\\d+) version$") + public void userShouldReceivePatchForAccessionsWithVersion(String accession, int totalVersions) { + tester.getLastMultipleVersionResult().assertAccession(accession).assertTotalVersions(totalVersions); + } + + @And("^patch must have versions increased$") + public void patchMustHaveVersionsIncreased() { + tester.getLastMultipleVersionResult().assertVersionAreIncreased(); + } + + @Then("^user receives accession does not exist$") + public void userReceivesAccessionDoesNotExistError() { + tester.getLastMethodResponse().assertThrow(AccessionDoesNotExistException.class); + } + + @When("^user updates ([\\w-]+) patch (\\d+) with ([\\w-]+)$") + public void userUpdatesAccessionWithInput(String accession, int patch, String newData) { + tester.update(accession, patch, newData); + } + + + @And("^hash of version (\\d+) should be ([\\w-]+)$") + public void hashOfVersionShouldBeHash(int version, String hash) { + tester.getLastMultipleVersionResult().assertHash(version, hash); + } + + @When("^user merges ([\\w-]+) with ([\\w-]+) reason: ([\\w ]+)$") + public void userMergesAWithB(String accessionA, String accessionB, String reason) { + tester.merge(accessionA, accessionB, reason); + } + + @Then("^user receives an unknown error$") + public void weShouldHaveAUnknownError() { + tester.getLastMethodResponse().assertThrow(UnknownError.class); + } + + @Then("^user operation finished correctly$") + public void lastProcessFinishedOk() { + tester.getLastMethodResponse().assertNoException(); + } + + @Then("^user receives an accession already merged error$") + public void weShouldHaveAAccessionAlreadyMerged() { + tester.getLastMethodResponse().assertThrow(AccessionMergedException.class); + } + + @When("^user retrieves objects: ([\\w-,]+)$") + public void userRetrievesObjectA(String values) { + tester.get(toModels(values)); + } + + private List toModels(String values) { + return Arrays.stream(values.split(",")).map(TestModel::of).collect(Collectors.toList()); + } + + @Then("^user receives (\\d+) elements$") + public void userReceivesANumberOfElements(int numberOfElements) { + tester.getSingleVersionResults().assertSize(numberOfElements); + } + + @And("^user received a response with values: ([\\w-,]+)$") + public void userReceivedAResponseWithObject(String values) { + tester.getSingleVersionResults().assertAccessionValues(values.split(",")); + } + + @When("^user retrieves accessions: ([\\w-,]+)$") + public void userRetrievesAccessionsIdServiceA(String accessionIds) { + tester.getAccessions(accessionIds.split(",")); + } +} diff --git a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/persistence/mongodb/service/BasicMongoDbHistoryServiceTest.java b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/persistence/mongodb/service/BasicMongoDbHistoryServiceTest.java index 7e3b9107..d30626fe 100644 --- a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/persistence/mongodb/service/BasicMongoDbHistoryServiceTest.java +++ b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/persistence/mongodb/service/BasicMongoDbHistoryServiceTest.java @@ -30,22 +30,18 @@ import org.springframework.test.context.junit4.SpringRunner; import uk.ac.ebi.ampt2d.commons.accession.core.AccessioningService; import uk.ac.ebi.ampt2d.commons.accession.core.HistoryService; -import uk.ac.ebi.ampt2d.commons.accession.core.exceptions.AccessionCouldNotBeGeneratedException; -import uk.ac.ebi.ampt2d.commons.accession.core.exceptions.AccessionDeprecatedException; import uk.ac.ebi.ampt2d.commons.accession.core.exceptions.AccessionDoesNotExistException; -import uk.ac.ebi.ampt2d.commons.accession.core.exceptions.AccessionMergedException; -import uk.ac.ebi.ampt2d.commons.accession.core.exceptions.HashAlreadyExistsException; -import uk.ac.ebi.ampt2d.test.AccessionTester; -import uk.ac.ebi.ampt2d.test.HistoryTester; -import uk.ac.ebi.ampt2d.test.TestModel; import uk.ac.ebi.ampt2d.test.configuration.MongoDbTestConfiguration; +import uk.ac.ebi.ampt2d.test.models.TestModel; import uk.ac.ebi.ampt2d.test.rule.FixSpringMongoDbRule; +import uk.ac.ebi.ampt2d.test.testers.AccessioningServiceTester; +import uk.ac.ebi.ampt2d.test.testers.HistoryTester; -import static uk.ac.ebi.ampt2d.test.HistoryTester.assertEventIsCreated; -import static uk.ac.ebi.ampt2d.test.HistoryTester.assertEventIsDeprecated; -import static uk.ac.ebi.ampt2d.test.HistoryTester.assertEventIsMerged; -import static uk.ac.ebi.ampt2d.test.HistoryTester.assertEventIsPatch; -import static uk.ac.ebi.ampt2d.test.HistoryTester.assertEventIsUpdated; +import static uk.ac.ebi.ampt2d.test.testers.HistoryTester.assertEventIsCreated; +import static uk.ac.ebi.ampt2d.test.testers.HistoryTester.assertEventIsDeprecated; +import static uk.ac.ebi.ampt2d.test.testers.HistoryTester.assertEventIsMerged; +import static uk.ac.ebi.ampt2d.test.testers.HistoryTester.assertEventIsPatch; +import static uk.ac.ebi.ampt2d.test.testers.HistoryTester.assertEventIsUpdated; @RunWith(SpringRunner.class) @SpringBootTest(classes = {MongoDbTestConfiguration.class}) @@ -73,8 +69,9 @@ public void testNoHistory() throws AccessionDoesNotExistException { @UsingDataSet(loadStrategy = LoadStrategyEnum.DELETE_ALL) @Test - public void testHistoryNoOperations() throws AccessionDoesNotExistException, AccessionCouldNotBeGeneratedException { - getAccessionTester().accession("test-1"); + public void testHistoryNoOperations() throws AccessionDoesNotExistException { + getAccessionTester() + .getOrCreate("test-1"); getHistoryTester("id-test-1") .assertTotalEvents(1) .assertEvent(0, assertEventIsCreated()); @@ -82,11 +79,10 @@ public void testHistoryNoOperations() throws AccessionDoesNotExistException, Acc @UsingDataSet(loadStrategy = LoadStrategyEnum.DELETE_ALL) @Test - public void testHistoryUpdate() throws AccessionDoesNotExistException, AccessionCouldNotBeGeneratedException, - AccessionMergedException, AccessionDeprecatedException, HashAlreadyExistsException { + public void testHistoryUpdate() throws AccessionDoesNotExistException { getAccessionTester() - .accession("test-2") - .update(1, "test-2-update-1"); + .getOrCreate("test-2") + .update("id-test-2", 1, "test-2-update-1"); getHistoryTester("id-test-2").assertTotalEvents(2) .assertEvent(0, assertEventIsCreated()) .assertEvent(1, assertEventIsUpdated("test-2-update-1", 1)); @@ -94,11 +90,10 @@ public void testHistoryUpdate() throws AccessionDoesNotExistException, Accession @UsingDataSet(loadStrategy = LoadStrategyEnum.DELETE_ALL) @Test - public void testHistoryPatch() throws AccessionDoesNotExistException, AccessionCouldNotBeGeneratedException, - AccessionMergedException, AccessionDeprecatedException, HashAlreadyExistsException { + public void testHistoryPatch() throws AccessionDoesNotExistException { getAccessionTester() - .accession("test-3") - .patch("test-3-patch-2"); + .getOrCreate("test-3") + .patch("id-test-3", "test-3-patch-2"); getHistoryTester("id-test-3") .assertTotalEvents(2) .assertEvent(0, assertEventIsCreated()) @@ -107,12 +102,11 @@ public void testHistoryPatch() throws AccessionDoesNotExistException, AccessionC @UsingDataSet(loadStrategy = LoadStrategyEnum.DELETE_ALL) @Test - public void testHistoryMultiplePatch() throws AccessionDoesNotExistException, AccessionCouldNotBeGeneratedException, - AccessionMergedException, AccessionDeprecatedException, HashAlreadyExistsException { + public void testHistoryMultiplePatch() throws AccessionDoesNotExistException { getAccessionTester() - .accession("test-3") - .patch("test-3-patch-2") - .patch("test-3-patch-3"); + .getOrCreate("test-3") + .patch("id-test-3", "test-3-patch-2") + .patch("id-test-3", "test-3-patch-3"); getHistoryTester("id-test-3") .assertTotalEvents(3) .assertEvent(0, assertEventIsCreated()) @@ -122,13 +116,12 @@ public void testHistoryMultiplePatch() throws AccessionDoesNotExistException, Ac @UsingDataSet(loadStrategy = LoadStrategyEnum.DELETE_ALL) @Test - public void testHistoryPatchAndUpdate() throws AccessionDoesNotExistException, - AccessionCouldNotBeGeneratedException, - AccessionMergedException, AccessionDeprecatedException, HashAlreadyExistsException { + public void testHistoryPatchAndUpdate() throws AccessionDoesNotExistException { getAccessionTester() - .accession("test-4") - .patch("test-4-patch-2") - .update(2, "test-4-update-patch-2"); + .getOrCreate("test-4") + .patch("id-test-4", "test-4-patch-2") + .update("id-test-4", 2, "test-4-update-patch-2"); + getHistoryTester("id-test-4") .assertTotalEvents(3) .assertEvent(0, assertEventIsCreated()) @@ -138,12 +131,11 @@ public void testHistoryPatchAndUpdate() throws AccessionDoesNotExistException, @UsingDataSet(loadStrategy = LoadStrategyEnum.DELETE_ALL) @Test - public void testDeprecate() throws AccessionDoesNotExistException, - AccessionCouldNotBeGeneratedException, - AccessionMergedException, AccessionDeprecatedException, HashAlreadyExistsException { + public void testDeprecate() throws AccessionDoesNotExistException { getAccessionTester() - .accession("test-5") - .deprecate(); + .getOrCreate("test-5") + .deprecate("id-test-5", "reason") + .getLastMethodResponse().assertNoException(); getHistoryTester("id-test-5") .assertTotalEvents(2) .assertEvent(0, assertEventIsCreated()) @@ -152,14 +144,12 @@ public void testDeprecate() throws AccessionDoesNotExistException, @UsingDataSet(loadStrategy = LoadStrategyEnum.DELETE_ALL) @Test - public void testMerge() throws AccessionDoesNotExistException, - AccessionCouldNotBeGeneratedException, - AccessionMergedException, AccessionDeprecatedException, HashAlreadyExistsException { - getAccessionTester() - .accession("test-merge-1"); + public void testMerge() throws AccessionDoesNotExistException { getAccessionTester() - .accession("test-6") - .merge("id-test-merge-1"); + .getOrCreate("test-merge-1") + .getOrCreate("test-6") + .merge("id-test-6", "id-test-merge-1", "reason") + .getLastMethodResponse().assertNoException(); getHistoryTester("id-test-6") .assertTotalEvents(2) .assertEvent(0, assertEventIsCreated()) @@ -168,16 +158,14 @@ public void testMerge() throws AccessionDoesNotExistException, @UsingDataSet(loadStrategy = LoadStrategyEnum.DELETE_ALL) @Test - public void testComplexCase() throws AccessionDoesNotExistException, - AccessionCouldNotBeGeneratedException, - AccessionMergedException, AccessionDeprecatedException, HashAlreadyExistsException { + public void testComplexCase() throws AccessionDoesNotExistException { getAccessionTester() - .accession("test-7") - .update(1, "test-7-update-1") - .patch("test-7-patch-2") - .update(2, "test-7-update-patch-2") - .update(2, "test-7-update-b-patch-2") - .deprecate(); + .getOrCreate("test-7") + .update("id-test-7", 1, "test-7-update-1") + .patch("id-test-7", "test-7-patch-2") + .update("id-test-7", 2, "test-7-update-patch-2") + .update("id-test-7", 2, "test-7-update-b-patch-2") + .deprecate("id-test-7", "reason"); getHistoryTester("id-test-7") .assertTotalEvents(6) @@ -193,8 +181,8 @@ private HistoryTester.HistoryAccessionTester getHistoryTester(String id) throws return new HistoryTester(historyService).accession(id); } - public AccessionTester getAccessionTester() { - return new AccessionTester(accessioningService); + public AccessioningServiceTester getAccessionTester() { + return new AccessioningServiceTester(accessioningService); } } diff --git a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/configuration/MongoDbCucumberTestConfiguration.java b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/configuration/MongoDbCucumberTestConfiguration.java new file mode 100644 index 00000000..11aebc92 --- /dev/null +++ b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/configuration/MongoDbCucumberTestConfiguration.java @@ -0,0 +1,99 @@ +/* + * + * Copyright 2018 EMBL - European Bioinformatics Institute + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package uk.ac.ebi.ampt2d.test.configuration; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.domain.EntityScan; +import org.springframework.boot.test.autoconfigure.data.mongo.AutoConfigureDataMongo; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Scope; +import org.springframework.data.mongodb.config.EnableMongoAuditing; +import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; +import uk.ac.ebi.ampt2d.commons.accession.core.AccessioningService; +import uk.ac.ebi.ampt2d.commons.accession.core.BasicAccessioningService; +import uk.ac.ebi.ampt2d.commons.accession.core.DatabaseService; +import uk.ac.ebi.ampt2d.commons.accession.core.HistoryService; +import uk.ac.ebi.ampt2d.commons.accession.generators.SingleAccessionGenerator; +import uk.ac.ebi.ampt2d.commons.accession.hashing.SHA1HashingFunction; +import uk.ac.ebi.ampt2d.commons.accession.persistence.services.BasicHistoryService; +import uk.ac.ebi.ampt2d.commons.accession.persistence.services.BasicSpringDataRepositoryDatabaseService; +import uk.ac.ebi.ampt2d.test.models.TestModel; +import uk.ac.ebi.ampt2d.test.persistence.document.TestDocument; +import uk.ac.ebi.ampt2d.test.persistence.document.TestEventDocument; +import uk.ac.ebi.ampt2d.test.persistence.document.TestInactiveSubDocument; +import uk.ac.ebi.ampt2d.test.persistence.repository.TestOperationRepository; +import uk.ac.ebi.ampt2d.test.persistence.repository.TestRepository; +import uk.ac.ebi.ampt2d.test.persistence.service.TestMongoDbInactiveAccessionService; +import uk.ac.ebi.ampt2d.test.testers.AccessioningServiceTester; + +@Configuration +@EntityScan(basePackages = {"uk.ac.ebi.ampt2d.test.persistence.document"}) +@EnableMongoRepositories(basePackages = {"uk.ac.ebi.ampt2d.test.persistence.repository", + "uk.ac.ebi.ampt2d.commons.accession.persistence.mongodb.repository"}) +@EnableMongoAuditing +@AutoConfigureDataMongo +public class MongoDbCucumberTestConfiguration { + + @Autowired + private TestRepository testRepository; + + @Autowired + private TestOperationRepository testOperationRepository; + + @Bean + public TestMongoDbInactiveAccessionService testMongoDbInactiveAccessionService() { + return new TestMongoDbInactiveAccessionService( + testOperationRepository, + TestInactiveSubDocument::new, + TestEventDocument::new + ); + } + + @Bean + public DatabaseService testMongoDbService() { + return new BasicSpringDataRepositoryDatabaseService<>( + testRepository, + TestDocument::new, + testMongoDbInactiveAccessionService() + ); + } + + @Bean + public HistoryService testMongoDbHistoryService() { + return new BasicHistoryService<>(testRepository, testMongoDbInactiveAccessionService()); + } + + @Bean + public AccessioningService testMongoDbAccessioningService() { + return new BasicAccessioningService<>( + new SingleAccessionGenerator<>(o -> + "id-service-" + o.getValue()), + testMongoDbService(), + TestModel::getValue, + new SHA1HashingFunction() + ); + } + + @Bean + @Scope("cucumber-glue") + public AccessioningServiceTester accessioningServiceTester() { + return new AccessioningServiceTester(testMongoDbAccessioningService()); + } + +} diff --git a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/configuration/MongoDbTestConfiguration.java b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/configuration/MongoDbTestConfiguration.java index 4a9a42f7..9ac71f71 100644 --- a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/configuration/MongoDbTestConfiguration.java +++ b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/configuration/MongoDbTestConfiguration.java @@ -32,10 +32,10 @@ import uk.ac.ebi.ampt2d.commons.accession.hashing.SHA1HashingFunction; import uk.ac.ebi.ampt2d.commons.accession.persistence.services.BasicHistoryService; import uk.ac.ebi.ampt2d.commons.accession.persistence.services.BasicSpringDataRepositoryDatabaseService; -import uk.ac.ebi.ampt2d.test.TestModel; +import uk.ac.ebi.ampt2d.test.models.TestModel; import uk.ac.ebi.ampt2d.test.persistence.document.TestDocument; -import uk.ac.ebi.ampt2d.test.persistence.document.TestInactiveSubDocument; import uk.ac.ebi.ampt2d.test.persistence.document.TestEventDocument; +import uk.ac.ebi.ampt2d.test.persistence.document.TestInactiveSubDocument; import uk.ac.ebi.ampt2d.test.persistence.repository.TestOperationRepository; import uk.ac.ebi.ampt2d.test.persistence.repository.TestRepository; import uk.ac.ebi.ampt2d.test.persistence.service.TestMongoDbInactiveAccessionService; @@ -80,7 +80,8 @@ public HistoryService testMongoDbHistoryService() { @Bean public AccessioningService testMongoDbAccessioningService() { return new BasicAccessioningService<>( - new SingleAccessionGenerator<>(o -> "id-" + o.getValue()), + new SingleAccessionGenerator<>(o -> + "id-" + o.getValue()), testMongoDbService(), testModel -> testModel.getValue(), new SHA1HashingFunction() diff --git a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/persistence/document/TestDocument.java b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/persistence/document/TestDocument.java index 4f1e1bde..3e693db8 100644 --- a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/persistence/document/TestDocument.java +++ b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/persistence/document/TestDocument.java @@ -20,7 +20,7 @@ import org.springframework.data.mongodb.core.mapping.Document; import uk.ac.ebi.ampt2d.commons.accession.core.models.AccessionWrapper; import uk.ac.ebi.ampt2d.commons.accession.persistence.mongodb.document.AccessionedDocument; -import uk.ac.ebi.ampt2d.test.TestModel; +import uk.ac.ebi.ampt2d.test.models.TestModel; @Document public class TestDocument extends AccessionedDocument implements TestModel { diff --git a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/persistence/document/TestEventDocument.java b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/persistence/document/TestEventDocument.java index b6cc9f65..07691427 100644 --- a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/persistence/document/TestEventDocument.java +++ b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/persistence/document/TestEventDocument.java @@ -19,7 +19,7 @@ import org.springframework.data.mongodb.core.mapping.Document; import uk.ac.ebi.ampt2d.commons.accession.persistence.mongodb.document.EventDocument; -import uk.ac.ebi.ampt2d.test.TestModel; +import uk.ac.ebi.ampt2d.test.models.TestModel; @Document public class TestEventDocument extends EventDocument { diff --git a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/persistence/document/TestInactiveSubDocument.java b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/persistence/document/TestInactiveSubDocument.java index 3341e7ae..814e9dca 100644 --- a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/persistence/document/TestInactiveSubDocument.java +++ b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/persistence/document/TestInactiveSubDocument.java @@ -18,7 +18,7 @@ package uk.ac.ebi.ampt2d.test.persistence.document; import uk.ac.ebi.ampt2d.commons.accession.persistence.mongodb.document.InactiveSubDocument; -import uk.ac.ebi.ampt2d.test.TestModel; +import uk.ac.ebi.ampt2d.test.models.TestModel; public class TestInactiveSubDocument extends InactiveSubDocument implements TestModel { diff --git a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/persistence/service/TestMongoDbInactiveAccessionService.java b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/persistence/service/TestMongoDbInactiveAccessionService.java index 3aff9085..cc057333 100644 --- a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/persistence/service/TestMongoDbInactiveAccessionService.java +++ b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/persistence/service/TestMongoDbInactiveAccessionService.java @@ -19,7 +19,7 @@ import uk.ac.ebi.ampt2d.commons.accession.persistence.repositories.IHistoryRepository; import uk.ac.ebi.ampt2d.commons.accession.persistence.mongodb.service.BasicMongoDbInactiveAccessionService; -import uk.ac.ebi.ampt2d.test.TestModel; +import uk.ac.ebi.ampt2d.test.models.TestModel; import uk.ac.ebi.ampt2d.test.persistence.document.TestDocument; import uk.ac.ebi.ampt2d.test.persistence.document.TestInactiveSubDocument; import uk.ac.ebi.ampt2d.test.persistence.document.TestEventDocument; diff --git a/accession-commons-mongodb/src/test/resources/features/accession.feature b/accession-commons-mongodb/src/test/resources/features/accession.feature new file mode 100644 index 00000000..aaea86d6 --- /dev/null +++ b/accession-commons-mongodb/src/test/resources/features/accession.feature @@ -0,0 +1,28 @@ +Feature: Accession generation + + Scenario Outline: I want to receive unique accession for my newly submitted / created objects, so they are + identifiable in the system. + When user submits to accessioning service + Then user received accessions: + Examples: + | input | accessions | + | A | id-service-A | + | B,C | id-service-B,id-service-C | + | D,E,F | id-service-D,id-service-E,id-service-F | + + Scenario Outline: I want to receive accessions for a mix of new and pre-existing objects. + Given already accessioned + When user submits to accessioning service + Then user received accessions: + Examples: + | objects | input | accessions | + | B | A | id-service-A | + | A | A | id-service-A | + | C | B,C | id-service-B,id-service-C | + | A,B,C,E | D,E,F | id-service-D,id-service-E,id-service-F | + + @ignore + Scenario: I want to generate accession in a space, based on clustering accessions from another existing space. + When user provides a list of ss accessions + Then user receives a rs list of accessions + And all rs must have at least one ss accessioned \ No newline at end of file diff --git a/accession-commons-mongodb/src/test/resources/features/merge.feature b/accession-commons-mongodb/src/test/resources/features/merge.feature new file mode 100644 index 00000000..ac9050f3 --- /dev/null +++ b/accession-commons-mongodb/src/test/resources/features/merge.feature @@ -0,0 +1,37 @@ +Feature: Accession merge + + Scenario: I want to merge an object but the destination object does not exist. + Given already accessioned A + When user merges id-service-A with id-service-B reason: because i say so + Then user receives an unknown error + + Scenario: I want to merge an object but the origin object does not exist. + Given already accessioned B + When user merges id-service-A with id-service-B reason: because i say so + Then user receives an unknown error + + Scenario: I want to merge an object but none of the two exist. + When user merges id-service-A with id-service-B reason: because i say so + Then user receives an unknown error + + Scenario: I want to merge an object + Given already accessioned A + And already accessioned B + When user merges id-service-A with id-service-B reason: because i say so + Then user operation finished correctly + + Scenario: I want to merge an object but the object has been already merged + Given already accessioned A + And already accessioned B + And already accessioned C + And user merges id-service-B with id-service-C reason: because i say so + When user merges id-service-A with id-service-B reason: because i say so + Then user receives an accession already merged error + + Scenario: I want to merge an object to another and then to a third one + Given already accessioned A + And already accessioned B + And already accessioned C + When user merges id-service-A with id-service-B reason: because i say so + When user merges id-service-B with id-service-C reason: because i say so + Then user operation finished correctly \ No newline at end of file diff --git a/accession-commons-mongodb/src/test/resources/features/modification.feature b/accession-commons-mongodb/src/test/resources/features/modification.feature new file mode 100644 index 00000000..579d3ae2 --- /dev/null +++ b/accession-commons-mongodb/src/test/resources/features/modification.feature @@ -0,0 +1,40 @@ +Feature: Accession modification + + Scenario Outline: I want to create a new patch of an existing object, in order to register improvements made to it + without losing access to the old information. + Given already accessioned + When user sends patch for accession + Then user should receive version list for with 2 version + And patch must have versions increased + Examples: + | objects | input | accession | + | A | AA | id-service-A | + | B | BB | id-service-B | + | A,B,C,E | AA | id-service-A | + + Scenario: I want to create a new patch of a non existing object + When user sends patch AA for accession id-service-A + Then user receives accession does not exist + + Scenario Outline: I want to update the fields that identify uniquely an object. + without losing access to the old information. + Given already accessioned + When user updates patch with + Then user should receive version list for with 1 version + And hash of version 1 should be + Examples: + | objects | input | accession | patch | hash | + | A | AA | id-service-A | 1 | 801C34269F74ED383FC97DE33604B8A905ADB635 | + | B | BB | id-service-B | 1 | 71C9DB717578B9EE49A59E69375C16C0627DFFEF | + | A,B,C,E | AA | id-service-A | 1 | 801C34269F74ED383FC97DE33604B8A905ADB635 | + + Scenario: I want to update the fields that identify uniquely an object, but we already have an object with the + same values. + Given already accessioned A,B + When user updates id-service-A patch 1 with B + Then user receives an unknown error + + Scenario: I want to update an object that does not exist + When user updates id-service-A patch 1 with AB + Then user receives accession does not exist + diff --git a/accession-commons-mongodb/src/test/resources/features/retrieval.feature b/accession-commons-mongodb/src/test/resources/features/retrieval.feature new file mode 100644 index 00000000..bda8d0cd --- /dev/null +++ b/accession-commons-mongodb/src/test/resources/features/retrieval.feature @@ -0,0 +1,33 @@ +Feature: Accession retrieval + + Scenario: I want to get the accession of an object that is not in the system. + When user retrieves objects: A + Then user receives 0 elements + + Scenario: I want to get the accession of an object that it is on the system. + Given already accessioned A + When user retrieves objects: A + Then user receives 1 elements + And user received a response with values: A + And user received accessions: id-service-A + + Scenario: I want to get accessions of a mixture of objects that may or not be on the system. + Given already accessioned A + Given already accessioned C + Given already accessioned E + When user retrieves objects: A,B,C,D,E + Then user receives 3 elements + And user received a response with values: A,C,E + And user received accessions: id-service-A,id-service-C,id-service-E + + Scenario: I want to get a specific accession that doesn't exist in the system. + When user retrieves accessions: id-service-A + Then user receives accession does not exist + + Scenario: I want to retrieve an accession that exists in the system + Given already accessioned A + Given already accessioned B + When user retrieves accessions: id-service-A,id-service-B + Then user receives 2 elements + And user received a response with values: A,B + And user received accessions: id-service-A,id-service-B \ No newline at end of file diff --git a/accession-commons-monotonic-generator-jpa/pom.xml b/accession-commons-monotonic-generator-jpa/pom.xml index 10de5b08..963d64d8 100644 --- a/accession-commons-monotonic-generator-jpa/pom.xml +++ b/accession-commons-monotonic-generator-jpa/pom.xml @@ -28,6 +28,12 @@ 0.5-SNAPSHOT test + + uk.ac.ebi.ampt2d + accession-commons-test + 0.5-SNAPSHOT + test + org.springframework.boot spring-boot-starter-data-jpa diff --git a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/core/BasicMonotonicAccessioningTest.java b/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/core/BasicMonotonicAccessioningTest.java index 78173f77..50463871 100644 --- a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/core/BasicMonotonicAccessioningTest.java +++ b/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/core/BasicMonotonicAccessioningTest.java @@ -29,8 +29,8 @@ import uk.ac.ebi.ampt2d.commons.accession.generators.monotonic.MonotonicAccessionGenerator; import uk.ac.ebi.ampt2d.commons.accession.hashing.SHA1HashingFunction; import uk.ac.ebi.ampt2d.commons.accession.service.BasicMonotonicAccessioningService; -import uk.ac.ebi.ampt2d.test.TestModel; import uk.ac.ebi.ampt2d.test.configuration.TestMonotonicDatabaseServiceTestConfiguration; +import uk.ac.ebi.ampt2d.test.models.TestModel; import uk.ac.ebi.ampt2d.test.persistence.TestMonotonicRepository; import uk.ac.ebi.ampt2d.test.service.TestMonotonicDatabaseService; @@ -160,7 +160,7 @@ public void testGetOrCreateWithExistingEntries() throws AccessionCouldNotBeGener assertEquals(3, accessions2.size()); TestTransaction.start(); - for(AccessionWrapper accession: accessions2){ + for (AccessionWrapper accession: accessions2) { repository.delete(accession.getHash()); } TestTransaction.flagForCommit(); diff --git a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/core/BasicMonotonicAccessioningWithInitValuesTest.java b/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/core/BasicMonotonicAccessioningWithInitValuesTest.java index 1e382fe7..2caefdd1 100644 --- a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/core/BasicMonotonicAccessioningWithInitValuesTest.java +++ b/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/core/BasicMonotonicAccessioningWithInitValuesTest.java @@ -30,7 +30,7 @@ import uk.ac.ebi.ampt2d.commons.accession.generators.monotonic.MonotonicAccessionGenerator; import uk.ac.ebi.ampt2d.commons.accession.hashing.SHA1HashingFunction; import uk.ac.ebi.ampt2d.commons.accession.service.BasicMonotonicAccessioningService; -import uk.ac.ebi.ampt2d.test.TestModel; +import uk.ac.ebi.ampt2d.test.models.TestModel; import uk.ac.ebi.ampt2d.test.configuration.TestMonotonicDatabaseServiceTestConfiguration; import uk.ac.ebi.ampt2d.test.persistence.TestMonotonicEntity; import uk.ac.ebi.ampt2d.test.persistence.TestMonotonicRepository; diff --git a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/test/configuration/TestMonotonicDatabaseServiceTestConfiguration.java b/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/test/configuration/TestMonotonicDatabaseServiceTestConfiguration.java index 7762e1c8..f343126d 100644 --- a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/test/configuration/TestMonotonicDatabaseServiceTestConfiguration.java +++ b/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/test/configuration/TestMonotonicDatabaseServiceTestConfiguration.java @@ -27,7 +27,7 @@ import uk.ac.ebi.ampt2d.commons.accession.persistence.services.InactiveAccessionService; import uk.ac.ebi.ampt2d.commons.accession.persistence.jpa.monotonic.service.ContiguousIdBlockService; import uk.ac.ebi.ampt2d.commons.accession.persistence.jpa.service.BasicJpaInactiveAccessionService; -import uk.ac.ebi.ampt2d.test.TestModel; +import uk.ac.ebi.ampt2d.test.models.TestModel; import uk.ac.ebi.ampt2d.test.persistence.TestLongHistoryRepository; import uk.ac.ebi.ampt2d.test.persistence.TestLongOperationEntity; import uk.ac.ebi.ampt2d.test.persistence.TestMonotonicEntity; diff --git a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/test/persistence/TestMonotonicEntity.java b/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/test/persistence/TestMonotonicEntity.java index 0f7a0302..613d0a6f 100644 --- a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/test/persistence/TestMonotonicEntity.java +++ b/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/test/persistence/TestMonotonicEntity.java @@ -19,7 +19,7 @@ import uk.ac.ebi.ampt2d.commons.accession.core.models.AccessionWrapper; import uk.ac.ebi.ampt2d.commons.accession.persistence.jpa.entities.AccessionedEntity; -import uk.ac.ebi.ampt2d.test.TestModel; +import uk.ac.ebi.ampt2d.test.models.TestModel; import javax.persistence.Entity; diff --git a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/test/persistence/TestMonotonicInactiveAccessionEntity.java b/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/test/persistence/TestMonotonicInactiveAccessionEntity.java index 542ab9b0..e18a82db 100644 --- a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/test/persistence/TestMonotonicInactiveAccessionEntity.java +++ b/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/test/persistence/TestMonotonicInactiveAccessionEntity.java @@ -18,7 +18,7 @@ package uk.ac.ebi.ampt2d.test.persistence; import uk.ac.ebi.ampt2d.commons.accession.persistence.jpa.entities.InactiveAccessionEntity; -import uk.ac.ebi.ampt2d.test.TestModel; +import uk.ac.ebi.ampt2d.test.models.TestModel; import javax.persistence.Entity; diff --git a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/test/service/TestMonotonicDatabaseService.java b/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/test/service/TestMonotonicDatabaseService.java index f85f198d..3f549f9a 100644 --- a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/test/service/TestMonotonicDatabaseService.java +++ b/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/test/service/TestMonotonicDatabaseService.java @@ -23,7 +23,7 @@ import uk.ac.ebi.ampt2d.commons.accession.persistence.repositories.IAccessionedObjectRepository; import uk.ac.ebi.ampt2d.commons.accession.persistence.services.InactiveAccessionService; import uk.ac.ebi.ampt2d.commons.accession.persistence.jpa.monotonic.service.MonotonicDatabaseService; -import uk.ac.ebi.ampt2d.test.TestModel; +import uk.ac.ebi.ampt2d.test.models.TestModel; import uk.ac.ebi.ampt2d.test.persistence.TestMonotonicEntity; import java.util.Collection; diff --git a/accession-commons-test/pom.xml b/accession-commons-test/pom.xml new file mode 100644 index 00000000..acdcb8c0 --- /dev/null +++ b/accession-commons-test/pom.xml @@ -0,0 +1,82 @@ + + + 4.0.0 + + accession-commons-test + 0.5-SNAPSHOT + jar + + + accession-commons + uk.ac.ebi.ampt2d + 0.5-SNAPSHOT + + + + UTF-8 + + + + + org.springframework.boot + spring-boot-starter-test + + + uk.ac.ebi.ampt2d + accession-commons-core + 0.5-SNAPSHOT + + + + + + + false + + eva-releases + https://oss.jfrog.org/artifactory/libs-release + + + + true + + eva-snapshots + https://oss.jfrog.org/artifactory/libs-snapshot + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-surefire-plugin + + false + + + + + + + + eva-snapshots + https://oss.jfrog.org/artifactory/oss-snapshot-local + + + eva-releases + https://oss.jfrog.org/artifactory/oss-release-local + + + + + \ No newline at end of file diff --git a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/TestModel.java b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/models/TestModel.java similarity index 95% rename from accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/TestModel.java rename to accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/models/TestModel.java index 2a600855..cf697382 100644 --- a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/TestModel.java +++ b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/models/TestModel.java @@ -15,7 +15,7 @@ * limitations under the License. * */ -package uk.ac.ebi.ampt2d.test; +package uk.ac.ebi.ampt2d.test.models; public interface TestModel { diff --git a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/rest/BasicRestModel.java b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/rest/BasicRestModel.java similarity index 95% rename from accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/rest/BasicRestModel.java rename to accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/rest/BasicRestModel.java index 405673a1..53eca64a 100644 --- a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/rest/BasicRestModel.java +++ b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/rest/BasicRestModel.java @@ -17,8 +17,7 @@ */ package uk.ac.ebi.ampt2d.test.rest; - -import uk.ac.ebi.ampt2d.test.TestModel; +import uk.ac.ebi.ampt2d.test.models.TestModel; import javax.validation.constraints.NotNull; diff --git a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/rest/MockTestAccessionGenerator.java b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/rest/MockTestAccessionGenerator.java similarity index 98% rename from accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/rest/MockTestAccessionGenerator.java rename to accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/rest/MockTestAccessionGenerator.java index 4a8c5c8d..b2bd5c0b 100644 --- a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/rest/MockTestAccessionGenerator.java +++ b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/rest/MockTestAccessionGenerator.java @@ -17,13 +17,13 @@ */ package uk.ac.ebi.ampt2d.test.rest; -import uk.ac.ebi.ampt2d.commons.accession.core.models.AccessionWrapper; -import uk.ac.ebi.ampt2d.commons.accession.core.models.SaveResponse; import uk.ac.ebi.ampt2d.commons.accession.core.exceptions.AccessionCouldNotBeGeneratedException; import uk.ac.ebi.ampt2d.commons.accession.core.exceptions.AccessionIsNotPendingException; import uk.ac.ebi.ampt2d.commons.accession.core.exceptions.MissingUnsavedAccessionsException; +import uk.ac.ebi.ampt2d.commons.accession.core.models.AccessionWrapper; +import uk.ac.ebi.ampt2d.commons.accession.core.models.SaveResponse; import uk.ac.ebi.ampt2d.commons.accession.generators.AccessionGenerator; -import uk.ac.ebi.ampt2d.test.TestModel; +import uk.ac.ebi.ampt2d.test.models.TestModel; import java.util.ArrayList; import java.util.HashMap; diff --git a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/rest/MockTestAccessioningService.java b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/rest/MockTestAccessioningService.java similarity index 96% rename from accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/rest/MockTestAccessioningService.java rename to accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/rest/MockTestAccessioningService.java index bf60740f..6825c0d5 100644 --- a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/rest/MockTestAccessioningService.java +++ b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/rest/MockTestAccessioningService.java @@ -19,7 +19,7 @@ import uk.ac.ebi.ampt2d.commons.accession.core.BasicAccessioningService; import uk.ac.ebi.ampt2d.commons.accession.core.DatabaseService; -import uk.ac.ebi.ampt2d.test.TestModel; +import uk.ac.ebi.ampt2d.test.models.TestModel; /** * Mock service, generates accessions using in-memory data structures diff --git a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/rest/TestController.java b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/rest/TestController.java similarity index 96% rename from accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/rest/TestController.java rename to accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/rest/TestController.java index 9190bb1f..635dc1ed 100644 --- a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/rest/TestController.java +++ b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/rest/TestController.java @@ -21,7 +21,7 @@ import org.springframework.web.bind.annotation.RestController; import uk.ac.ebi.ampt2d.commons.accession.core.DatabaseService; import uk.ac.ebi.ampt2d.commons.accession.rest.controllers.BasicRestController; -import uk.ac.ebi.ampt2d.test.TestModel; +import uk.ac.ebi.ampt2d.test.models.TestModel; @RestController @RequestMapping(value = "/v1/test") diff --git a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/AccessionTester.java b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/AccessionTester.java similarity index 97% rename from accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/AccessionTester.java rename to accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/AccessionTester.java index 319dff89..e407d384 100644 --- a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/AccessionTester.java +++ b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/AccessionTester.java @@ -15,7 +15,7 @@ * limitations under the License. * */ -package uk.ac.ebi.ampt2d.test; +package uk.ac.ebi.ampt2d.test.testers; import uk.ac.ebi.ampt2d.commons.accession.core.AccessioningService; import uk.ac.ebi.ampt2d.commons.accession.core.exceptions.AccessionCouldNotBeGeneratedException; @@ -24,6 +24,7 @@ import uk.ac.ebi.ampt2d.commons.accession.core.exceptions.AccessionMergedException; import uk.ac.ebi.ampt2d.commons.accession.core.exceptions.HashAlreadyExistsException; import uk.ac.ebi.ampt2d.commons.accession.core.models.AccessionWrapper; +import uk.ac.ebi.ampt2d.test.models.TestModel; import java.util.Arrays; diff --git a/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/AccessionVersionWrapperTester.java b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/AccessionVersionWrapperTester.java new file mode 100644 index 00000000..e026348a --- /dev/null +++ b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/AccessionVersionWrapperTester.java @@ -0,0 +1,70 @@ +/* + * + * Copyright 2018 EMBL - European Bioinformatics Institute + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package uk.ac.ebi.ampt2d.test.testers; + +import uk.ac.ebi.ampt2d.commons.accession.core.models.AccessionVersionsWrapper; +import uk.ac.ebi.ampt2d.commons.accession.core.models.AccessionWrapper; +import uk.ac.ebi.ampt2d.test.models.TestModel; +import uk.ac.ebi.ampt2d.test.utils.ThrowingSupplier; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +public class AccessionVersionWrapperTester + extends MethodResponseTester> { + + public AccessionVersionWrapperTester( + ThrowingSupplier> functionCall) { + super(functionCall); + } + + public AccessionVersionWrapperTester assertTotalVersions(int total) { + assertEquals(total, getData().getModelWrappers().size()); + return this; + } + + public AccessionVersionWrapperTester assertVersionAreIncreased() { + final List> wrappers = + new ArrayList<>(getData().getModelWrappers()); + + wrappers.sort(Comparator.comparingInt(AccessionWrapper::getVersion)); + int minValue = wrappers.get(0).getVersion(); + for (int i = 1; i < wrappers.size(); i++) { + if (wrappers.get(i).getVersion() <= minValue) { + fail("Multiple patches with same version number '" + minValue + "'"); + } + } + return this; + } + + public AccessionVersionWrapperTester assertAccession(String accession) { + assertEquals(accession, getData().getAccession()); + return this; + } + + public AccessionVersionWrapperTester assertHash(int version, String hash) { + final AccessionWrapper wrapper = getData().getVersion(version) + .orElseThrow(() -> new AssertionError("Version not found")); + assertEquals(hash, wrapper.getHash()); + return this; + } +} diff --git a/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/AccessionWrapperCollectionTester.java b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/AccessionWrapperCollectionTester.java new file mode 100644 index 00000000..c52db2e9 --- /dev/null +++ b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/AccessionWrapperCollectionTester.java @@ -0,0 +1,78 @@ +/* + * + * Copyright 2018 EMBL - European Bioinformatics Institute + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package uk.ac.ebi.ampt2d.test.testers; + +import uk.ac.ebi.ampt2d.commons.accession.core.models.AccessionWrapper; +import uk.ac.ebi.ampt2d.test.models.TestModel; +import uk.ac.ebi.ampt2d.test.utils.ThrowingSupplier; + +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +public class AccessionWrapperCollectionTester + extends MethodResponseTester>> { + + public AccessionWrapperCollectionTester( + ThrowingSupplier>> functionCall) { + super(functionCall); + } + + public void assertSize(int length) { + assertEquals(length, getData().size()); + } + + public void assertAccessions(String... accessions) { + assertSize(accessions.length); + for (String accession: accessions) { + assertAccessionIsPresent(accession); + } + } + + public void assertAccessionIsPresent(String accession) { + for (AccessionWrapper wrapper: getData()) { + if (Objects.equals(wrapper.getAccession(), accession)) { + return; + } + } + fail("Accession '" + accession + "' is not present, accessions in list '" + getAccessionList() + "'"); + } + + private List getAccessionList() { + return getData().stream().map(AccessionWrapper::getAccession).collect(Collectors.toList()); + } + + public void assertAccessionValues(String... values) { + assertSize(values.length); + for (String value: values) { + assertAccessionWithValueIsPresent(value); + } + } + + public void assertAccessionWithValueIsPresent(String value) { + for (AccessionWrapper wrapper: getData()) { + if (Objects.equals(wrapper.getData().getValue(), value)) { + return; + } + } + fail("No object with value '" + value + "' was present in list '" + getAccessionList() + "'"); + } +} diff --git a/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/AccessioningServiceTester.java b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/AccessioningServiceTester.java new file mode 100644 index 00000000..82d5b24f --- /dev/null +++ b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/AccessioningServiceTester.java @@ -0,0 +1,114 @@ +/* + * + * Copyright 2018 EMBL - European Bioinformatics Institute + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package uk.ac.ebi.ampt2d.test.testers; + +import uk.ac.ebi.ampt2d.commons.accession.core.AccessioningService; +import uk.ac.ebi.ampt2d.test.models.TestModel; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +public class AccessioningServiceTester { + + private final AccessioningService accessioningService; + + private List singleVersionResults; + + private List multipleVersionResults; + + private IMethodTester lastMethodResponse; + + public AccessioningServiceTester(AccessioningService accessioningService) { + this.accessioningService = accessioningService; + this.singleVersionResults = new ArrayList<>(); + this.multipleVersionResults = new ArrayList<>(); + } + + public AccessioningServiceTester getOrCreate(String... values) { + return getOrCreate(toModels(values)); + } + + public AccessioningServiceTester getOrCreate(List models) { + addToCollection(singleVersionResults, + new AccessionWrapperCollectionTester(() -> accessioningService.getOrCreate(models))); + return this; + } + + public AccessionWrapperCollectionTester getSingleVersionResults() { + return singleVersionResults.get(singleVersionResults.size() - 1); + } + + public AccessioningServiceTester patch(String accession, String patchData) { + return patch(accession, TestModel.of(patchData)); + } + + public AccessioningServiceTester patch(String accession, TestModel patchData) { + addToCollection(multipleVersionResults, + new AccessionVersionWrapperTester(() -> accessioningService.patch(accession, patchData))); + return this; + } + + public AccessionVersionWrapperTester getLastMultipleVersionResult() { + return multipleVersionResults.get(multipleVersionResults.size() - 1); + } + + public AccessioningServiceTester update(String accession, int version, String data) { + addToCollection(multipleVersionResults, + new AccessionVersionWrapperTester(() -> + accessioningService.update(accession, version, TestModel.of(data)))); + return this; + } + + public AccessioningServiceTester merge(String accessionA, String accessionB, String reason) { + lastMethodResponse = new MethodTester(() -> accessioningService.merge(accessionA, accessionB, reason)); + return this; + } + + public IMethodTester getLastMethodResponse() { + return lastMethodResponse; + } + + public AccessionWrapperCollectionTester get(List models) { + return addToCollection(singleVersionResults, + new AccessionWrapperCollectionTester(() -> accessioningService.get(models))); + } + + public AccessionWrapperCollectionTester getAccessions(String... accessionIds) { + return addToCollection(singleVersionResults, + new AccessionWrapperCollectionTester(() -> + accessioningService.getByAccessions(Arrays.asList(accessionIds)))); + } + + private T addToCollection(Collection collection, T t) { + collection.add(t); + lastMethodResponse = t; + return t; + } + + private List toModels(String... values) { + return Arrays.stream(values).map(TestModel::of).collect(Collectors.toList()); + } + + public AccessioningServiceTester deprecate(String accessionId, String reason) { + lastMethodResponse = new MethodTester(() -> accessioningService.deprecate(accessionId, reason)); + return this; + } +} diff --git a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/HistoryTester.java b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/HistoryTester.java similarity index 92% rename from accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/HistoryTester.java rename to accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/HistoryTester.java index 46109db9..991b5e5b 100644 --- a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/HistoryTester.java +++ b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/HistoryTester.java @@ -15,12 +15,14 @@ * limitations under the License. * */ -package uk.ac.ebi.ampt2d.test; +package uk.ac.ebi.ampt2d.test.testers; +import org.junit.Assert; import uk.ac.ebi.ampt2d.commons.accession.core.HistoryService; import uk.ac.ebi.ampt2d.commons.accession.core.exceptions.AccessionDoesNotExistException; import uk.ac.ebi.ampt2d.commons.accession.core.models.EventType; import uk.ac.ebi.ampt2d.commons.accession.core.models.HistoryEvent; +import uk.ac.ebi.ampt2d.test.models.TestModel; import java.util.List; import java.util.function.Consumer; @@ -66,7 +68,7 @@ public static Consumer> assertEventIs(EventType } public static Consumer> assertAccession(String accession) { - return event -> assertEquals(accession, event.getAccession()); + return event -> Assert.assertEquals(accession, event.getAccession()); } public static Consumer> assertNullMergedInto() { @@ -74,7 +76,7 @@ public static Consumer> assertNullMergedInto() { } public static Consumer> assertMergedInto(String accession) { - return event -> assertEquals(accession, event.getMergedInto()); + return event -> Assert.assertEquals(accession, event.getMergedInto()); } public static Consumer> assertNullVersion() { @@ -82,7 +84,7 @@ public static Consumer> assertNullVersion() { } public static Consumer> assertVersion(int version) { - return event -> assertEquals(new Integer(version), event.getVersion()); + return event -> Assert.assertEquals(new Integer(version), event.getVersion()); } public static Consumer> assertNullData() { diff --git a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/BagCucumberIntegrationTest.java b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/IMethodTester.java similarity index 65% rename from accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/BagCucumberIntegrationTest.java rename to accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/IMethodTester.java index c10cb3ac..4af162a7 100644 --- a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/BagCucumberIntegrationTest.java +++ b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/IMethodTester.java @@ -15,14 +15,12 @@ * limitations under the License. * */ -package uk.ac.ebi.ampt2d.commons.accession; +package uk.ac.ebi.ampt2d.test.testers; -import cucumber.api.CucumberOptions; -import cucumber.api.junit.Cucumber; -import org.junit.runner.RunWith; +public interface IMethodTester { -@RunWith(Cucumber.class) -@CucumberOptions(features = "src/test/resources/features/bag.feature", plugin = {"pretty", "html:target/cucumber"}) -public class BagCucumberIntegrationTest { + void assertNoException(); + + void assertThrow(Class exception); } diff --git a/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/MethodResponseTester.java b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/MethodResponseTester.java new file mode 100644 index 00000000..3e45f326 --- /dev/null +++ b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/MethodResponseTester.java @@ -0,0 +1,57 @@ +/* + * + * Copyright 2018 EMBL - European Bioinformatics Institute + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package uk.ac.ebi.ampt2d.test.testers; + +import uk.ac.ebi.ampt2d.test.utils.ThrowingSupplier; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.fail; + +public class MethodResponseTester implements IMethodTester{ + + private Exception exception; + + private T data; + + public MethodResponseTester(ThrowingSupplier functionCall) { + try { + data = functionCall.get(); + } catch (Exception e) { + this.exception = e; + } + } + + public void assertNoException() { + if (exception != null) { + fail("Unexpected exception thrown '" + exception.getClass().getName() + "'"); + } + } + + public void assertThrow(Class exception) { + assertNotNull("No exception was thrown", exception); + assertThatThrownBy(() -> { + throw this.exception; + }).isInstanceOf(Exception.class); + } + + public T getData() { + assertNoException(); + return data; + } +} diff --git a/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/MethodTester.java b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/MethodTester.java new file mode 100644 index 00000000..156d78ec --- /dev/null +++ b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/MethodTester.java @@ -0,0 +1,51 @@ +/* + * + * Copyright 2018 EMBL - European Bioinformatics Institute + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package uk.ac.ebi.ampt2d.test.testers; + +import uk.ac.ebi.ampt2d.test.utils.VoidThrowingSupplier; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.fail; + +public class MethodTester implements IMethodTester{ + + private Exception exception; + + public MethodTester(VoidThrowingSupplier functionCall) { + try { + functionCall.get(); + } catch (Exception e) { + this.exception = e; + } + } + + public void assertNoException() { + if (exception != null) { + fail("Unexpected exception thrown '" + exception.getClass().getName() + "'"); + } + } + + public void assertThrow(Class exception) { + assertNotNull("No exception was thrown", exception); + assertThatThrownBy(() -> { + throw this.exception; + }).isInstanceOf(Exception.class); + } + +} diff --git a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/TestModel.java b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/utils/ThrowingSupplier.java similarity index 80% rename from accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/TestModel.java rename to accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/utils/ThrowingSupplier.java index 2a600855..efbffef9 100644 --- a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/test/TestModel.java +++ b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/utils/ThrowingSupplier.java @@ -15,14 +15,12 @@ * limitations under the License. * */ -package uk.ac.ebi.ampt2d.test; +package uk.ac.ebi.ampt2d.test.utils; -public interface TestModel { +@FunctionalInterface +public interface ThrowingSupplier { - String getValue(); - - static TestModel of(String value) { - return () -> value; - } + T get() throws Exception; } + diff --git a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/test/TestModel.java b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/utils/VoidThrowingSupplier.java similarity index 80% rename from accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/test/TestModel.java rename to accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/utils/VoidThrowingSupplier.java index 2a600855..a84e49b1 100644 --- a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/test/TestModel.java +++ b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/utils/VoidThrowingSupplier.java @@ -15,14 +15,12 @@ * limitations under the License. * */ -package uk.ac.ebi.ampt2d.test; +package uk.ac.ebi.ampt2d.test.utils; -public interface TestModel { +@FunctionalInterface +public interface VoidThrowingSupplier { - String getValue(); - - static TestModel of(String value) { - return () -> value; - } + void get() throws Exception; } + diff --git a/pom.xml b/pom.xml index 751e9c5b..b6af4616 100644 --- a/pom.xml +++ b/pom.xml @@ -12,6 +12,7 @@ accession-commons-monotonic-generator-jpa accession-commons-jpa accession-commons-mongodb + accession-commons-test accession-commons From 632729a3121db231f5b4ac9eb4dccdc79f961aa7 Mon Sep 17 00:00:00 2001 From: jorizci Date: Thu, 12 Jul 2018 11:05:47 +0100 Subject: [PATCH 3/6] Changed unknown exception for something meaningful --- .../AccessioningServiceStepDefinitions.java | 14 +++++++++++--- .../src/test/resources/features/merge.feature | 6 +++--- .../test/resources/features/modification.feature | 2 +- .../src/test/resources/features/retrieval.feature | 3 ++- .../AccessioningServiceStepDefinitions.java | 12 ++++++++++-- .../src/test/resources/features/merge.feature | 6 +++--- .../test/resources/features/modification.feature | 2 +- .../src/test/resources/features/retrieval.feature | 3 ++- .../ampt2d/test/testers/MethodResponseTester.java | 4 ++-- 9 files changed, 35 insertions(+), 17 deletions(-) diff --git a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningServiceStepDefinitions.java b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningServiceStepDefinitions.java index e1c3f93c..60db7ee9 100644 --- a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningServiceStepDefinitions.java +++ b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningServiceStepDefinitions.java @@ -29,6 +29,7 @@ import org.springframework.test.context.junit4.SpringRunner; import uk.ac.ebi.ampt2d.commons.accession.core.exceptions.AccessionDoesNotExistException; import uk.ac.ebi.ampt2d.commons.accession.core.exceptions.AccessionMergedException; +import uk.ac.ebi.ampt2d.commons.accession.core.exceptions.HashAlreadyExistsException; import uk.ac.ebi.ampt2d.test.configuration.CucumberTestConfiguration; import uk.ac.ebi.ampt2d.test.models.TestModel; import uk.ac.ebi.ampt2d.test.testers.AccessioningServiceTester; @@ -37,6 +38,8 @@ import java.util.List; import java.util.stream.Collectors; +import static org.hibernate.validator.internal.util.Contracts.assertTrue; + @Ignore @RunWith(SpringRunner.class) @SpringBootTest(classes = {CucumberTestConfiguration.class}) @@ -94,9 +97,9 @@ public void userMergesAWithB(String accessionA, String accessionB, String reason tester.merge(accessionA, accessionB, reason); } - @Then("^user receives an unknown error$") - public void weShouldHaveAUnknownError() { - tester.getLastMethodResponse().assertThrow(UnknownError.class); + @Then("^user receives a hash already exists exception$") + public void weShouldHaveAHashAlreadyExistsException() { + tester.getLastMethodResponse().assertThrow(HashAlreadyExistsException.class); } @Then("^user operation finished correctly$") @@ -132,4 +135,9 @@ public void userReceivedAResponseWithObject(String values) { public void userRetrievesAccessionsIdServiceA(String accessionIds) { tester.getAccessions(accessionIds.split(",")); } + + @Then("^user receives no data$") + public void userReceivesNoData() { + assertTrue(tester.getSingleVersionResults().getData().isEmpty(),"User received data"); + } } diff --git a/accession-commons-jpa/src/test/resources/features/merge.feature b/accession-commons-jpa/src/test/resources/features/merge.feature index ac9050f3..d18f5f43 100644 --- a/accession-commons-jpa/src/test/resources/features/merge.feature +++ b/accession-commons-jpa/src/test/resources/features/merge.feature @@ -3,16 +3,16 @@ Feature: Accession merge Scenario: I want to merge an object but the destination object does not exist. Given already accessioned A When user merges id-service-A with id-service-B reason: because i say so - Then user receives an unknown error + Then user receives a hash already exists exception Scenario: I want to merge an object but the origin object does not exist. Given already accessioned B When user merges id-service-A with id-service-B reason: because i say so - Then user receives an unknown error + Then user receives a hash already exists exception Scenario: I want to merge an object but none of the two exist. When user merges id-service-A with id-service-B reason: because i say so - Then user receives an unknown error + Then user receives a hash already exists exception Scenario: I want to merge an object Given already accessioned A diff --git a/accession-commons-jpa/src/test/resources/features/modification.feature b/accession-commons-jpa/src/test/resources/features/modification.feature index 579d3ae2..7824d999 100644 --- a/accession-commons-jpa/src/test/resources/features/modification.feature +++ b/accession-commons-jpa/src/test/resources/features/modification.feature @@ -32,7 +32,7 @@ Feature: Accession modification same values. Given already accessioned A,B When user updates id-service-A patch 1 with B - Then user receives an unknown error + Then user receives a hash already exists exception Scenario: I want to update an object that does not exist When user updates id-service-A patch 1 with AB diff --git a/accession-commons-jpa/src/test/resources/features/retrieval.feature b/accession-commons-jpa/src/test/resources/features/retrieval.feature index bda8d0cd..5a5fd2ef 100644 --- a/accession-commons-jpa/src/test/resources/features/retrieval.feature +++ b/accession-commons-jpa/src/test/resources/features/retrieval.feature @@ -22,7 +22,8 @@ Feature: Accession retrieval Scenario: I want to get a specific accession that doesn't exist in the system. When user retrieves accessions: id-service-A - Then user receives accession does not exist + Then user operation finished correctly + And user receives no data Scenario: I want to retrieve an accession that exists in the system Given already accessioned A diff --git a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningServiceStepDefinitions.java b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningServiceStepDefinitions.java index 5e1f6f25..bbf3ee6c 100644 --- a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningServiceStepDefinitions.java +++ b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningServiceStepDefinitions.java @@ -34,6 +34,7 @@ import org.springframework.test.context.junit4.SpringRunner; import uk.ac.ebi.ampt2d.commons.accession.core.exceptions.AccessionDoesNotExistException; import uk.ac.ebi.ampt2d.commons.accession.core.exceptions.AccessionMergedException; +import uk.ac.ebi.ampt2d.commons.accession.core.exceptions.HashAlreadyExistsException; import uk.ac.ebi.ampt2d.test.configuration.MongoDbCucumberTestConfiguration; import uk.ac.ebi.ampt2d.test.models.TestModel; import uk.ac.ebi.ampt2d.test.rule.FixSpringMongoDbRule; @@ -43,6 +44,8 @@ import java.util.List; import java.util.stream.Collectors; +import static org.hibernate.validator.internal.util.Contracts.assertTrue; + @Ignore @RunWith(SpringRunner.class) @SpringBootTest(classes = {MongoDbCucumberTestConfiguration.class}) @@ -113,9 +116,9 @@ public void userMergesAWithB(String accessionA, String accessionB, String reason tester.merge(accessionA, accessionB, reason); } - @Then("^user receives an unknown error$") + @Then("^user receives a hash already exists exception$") public void weShouldHaveAUnknownError() { - tester.getLastMethodResponse().assertThrow(UnknownError.class); + tester.getLastMethodResponse().assertThrow(HashAlreadyExistsException.class); } @Then("^user operation finished correctly$") @@ -151,4 +154,9 @@ public void userReceivedAResponseWithObject(String values) { public void userRetrievesAccessionsIdServiceA(String accessionIds) { tester.getAccessions(accessionIds.split(",")); } + + @Then("^user receives no data$") + public void userReceivesNoData() { + assertTrue(tester.getSingleVersionResults().getData().isEmpty(),"User received data"); + } } diff --git a/accession-commons-mongodb/src/test/resources/features/merge.feature b/accession-commons-mongodb/src/test/resources/features/merge.feature index ac9050f3..d18f5f43 100644 --- a/accession-commons-mongodb/src/test/resources/features/merge.feature +++ b/accession-commons-mongodb/src/test/resources/features/merge.feature @@ -3,16 +3,16 @@ Feature: Accession merge Scenario: I want to merge an object but the destination object does not exist. Given already accessioned A When user merges id-service-A with id-service-B reason: because i say so - Then user receives an unknown error + Then user receives a hash already exists exception Scenario: I want to merge an object but the origin object does not exist. Given already accessioned B When user merges id-service-A with id-service-B reason: because i say so - Then user receives an unknown error + Then user receives a hash already exists exception Scenario: I want to merge an object but none of the two exist. When user merges id-service-A with id-service-B reason: because i say so - Then user receives an unknown error + Then user receives a hash already exists exception Scenario: I want to merge an object Given already accessioned A diff --git a/accession-commons-mongodb/src/test/resources/features/modification.feature b/accession-commons-mongodb/src/test/resources/features/modification.feature index 579d3ae2..7824d999 100644 --- a/accession-commons-mongodb/src/test/resources/features/modification.feature +++ b/accession-commons-mongodb/src/test/resources/features/modification.feature @@ -32,7 +32,7 @@ Feature: Accession modification same values. Given already accessioned A,B When user updates id-service-A patch 1 with B - Then user receives an unknown error + Then user receives a hash already exists exception Scenario: I want to update an object that does not exist When user updates id-service-A patch 1 with AB diff --git a/accession-commons-mongodb/src/test/resources/features/retrieval.feature b/accession-commons-mongodb/src/test/resources/features/retrieval.feature index bda8d0cd..5a5fd2ef 100644 --- a/accession-commons-mongodb/src/test/resources/features/retrieval.feature +++ b/accession-commons-mongodb/src/test/resources/features/retrieval.feature @@ -22,7 +22,8 @@ Feature: Accession retrieval Scenario: I want to get a specific accession that doesn't exist in the system. When user retrieves accessions: id-service-A - Then user receives accession does not exist + Then user operation finished correctly + And user receives no data Scenario: I want to retrieve an accession that exists in the system Given already accessioned A diff --git a/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/MethodResponseTester.java b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/MethodResponseTester.java index 3e45f326..0f973536 100644 --- a/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/MethodResponseTester.java +++ b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/MethodResponseTester.java @@ -44,10 +44,10 @@ public void assertNoException() { } public void assertThrow(Class exception) { - assertNotNull("No exception was thrown", exception); + assertNotNull("No exception was thrown", this.exception); assertThatThrownBy(() -> { throw this.exception; - }).isInstanceOf(Exception.class); + }).isInstanceOf(exception); } public T getData() { From cc4badfa77a64550e689338489b856289d1c9f95 Mon Sep 17 00:00:00 2001 From: jorizci Date: Thu, 12 Jul 2018 11:22:05 +0100 Subject: [PATCH 4/6] Removed code duplicity for testing exceptions --- .../src/test/resources/features/merge.feature | 6 ++--- .../src/test/resources/features/merge.feature | 6 ++--- .../ampt2d/test/testers/IMethodTester.java | 25 +++++++++++++++++-- .../test/testers/MethodResponseTester.java | 16 ++++-------- .../ebi/ampt2d/test/testers/MethodTester.java | 21 ++++------------ 5 files changed, 39 insertions(+), 35 deletions(-) diff --git a/accession-commons-jpa/src/test/resources/features/merge.feature b/accession-commons-jpa/src/test/resources/features/merge.feature index d18f5f43..9dcbfd40 100644 --- a/accession-commons-jpa/src/test/resources/features/merge.feature +++ b/accession-commons-jpa/src/test/resources/features/merge.feature @@ -3,16 +3,16 @@ Feature: Accession merge Scenario: I want to merge an object but the destination object does not exist. Given already accessioned A When user merges id-service-A with id-service-B reason: because i say so - Then user receives a hash already exists exception + Then user receives accession does not exist Scenario: I want to merge an object but the origin object does not exist. Given already accessioned B When user merges id-service-A with id-service-B reason: because i say so - Then user receives a hash already exists exception + Then user receives accession does not exist Scenario: I want to merge an object but none of the two exist. When user merges id-service-A with id-service-B reason: because i say so - Then user receives a hash already exists exception + Then user receives accession does not exist Scenario: I want to merge an object Given already accessioned A diff --git a/accession-commons-mongodb/src/test/resources/features/merge.feature b/accession-commons-mongodb/src/test/resources/features/merge.feature index d18f5f43..9dcbfd40 100644 --- a/accession-commons-mongodb/src/test/resources/features/merge.feature +++ b/accession-commons-mongodb/src/test/resources/features/merge.feature @@ -3,16 +3,16 @@ Feature: Accession merge Scenario: I want to merge an object but the destination object does not exist. Given already accessioned A When user merges id-service-A with id-service-B reason: because i say so - Then user receives a hash already exists exception + Then user receives accession does not exist Scenario: I want to merge an object but the origin object does not exist. Given already accessioned B When user merges id-service-A with id-service-B reason: because i say so - Then user receives a hash already exists exception + Then user receives accession does not exist Scenario: I want to merge an object but none of the two exist. When user merges id-service-A with id-service-B reason: because i say so - Then user receives a hash already exists exception + Then user receives accession does not exist Scenario: I want to merge an object Given already accessioned A diff --git a/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/IMethodTester.java b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/IMethodTester.java index 4af162a7..0e394903 100644 --- a/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/IMethodTester.java +++ b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/IMethodTester.java @@ -17,10 +17,31 @@ */ package uk.ac.ebi.ampt2d.test.testers; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.fail; + public interface IMethodTester { - void assertNoException(); + default void assertNoException() { + getException().ifPresent(e -> fail("Unexpected exception thrown '" + e.getClass().getName() + "'")); + } + + default void assertThrow(Class exceptionClass) { + Exception thrownException = getException().get(); + assertNotNull("No exception was thrown", thrownException); + assertThatThrownBy(() -> { + throw thrownException; + }).isInstanceOf(exceptionClass); + } - void assertThrow(Class exception); + /** + * Returns exception thrown in method execution if any. + * + * @return + */ + Optional getException(); } diff --git a/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/MethodResponseTester.java b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/MethodResponseTester.java index 0f973536..7e4cff3e 100644 --- a/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/MethodResponseTester.java +++ b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/MethodResponseTester.java @@ -19,6 +19,8 @@ import uk.ac.ebi.ampt2d.test.utils.ThrowingSupplier; +import java.util.Optional; + import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; @@ -37,17 +39,9 @@ public MethodResponseTester(ThrowingSupplier functionCall) { } } - public void assertNoException() { - if (exception != null) { - fail("Unexpected exception thrown '" + exception.getClass().getName() + "'"); - } - } - - public void assertThrow(Class exception) { - assertNotNull("No exception was thrown", this.exception); - assertThatThrownBy(() -> { - throw this.exception; - }).isInstanceOf(exception); + @Override + public Optional getException() { + return Optional.ofNullable(exception); } public T getData() { diff --git a/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/MethodTester.java b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/MethodTester.java index 156d78ec..3e9a11d2 100644 --- a/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/MethodTester.java +++ b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/MethodTester.java @@ -19,11 +19,9 @@ import uk.ac.ebi.ampt2d.test.utils.VoidThrowingSupplier; -import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; +import java.util.Optional; -public class MethodTester implements IMethodTester{ +public class MethodTester implements IMethodTester { private Exception exception; @@ -35,17 +33,8 @@ public MethodTester(VoidThrowingSupplier functionCall) { } } - public void assertNoException() { - if (exception != null) { - fail("Unexpected exception thrown '" + exception.getClass().getName() + "'"); - } - } - - public void assertThrow(Class exception) { - assertNotNull("No exception was thrown", exception); - assertThatThrownBy(() -> { - throw this.exception; - }).isInstanceOf(Exception.class); + @Override + public Optional getException() { + return Optional.ofNullable(exception); } - } From 6c9bc774bf0c0bb4e8cda583daa46fe38ef51856 Mon Sep 17 00:00:00 2001 From: jorizci Date: Wed, 18 Jul 2018 16:41:25 +0100 Subject: [PATCH 5/6] Unified nomenclature in acceptance tests --- ....java => AccessioningAcceptanceTests.java} | 2 +- .../AccessioningServiceStepDefinitions.java | 32 ++++++++--------- .../src/test/resources/features/merge.feature | 28 +++++++-------- .../resources/features/modification.feature | 18 +++++----- .../test/resources/features/retrieval.feature | 2 +- ....java => AccessioningAcceptanceTests.java} | 2 +- .../AccessioningServiceStepDefinitions.java | 36 +++++++++---------- .../MongoDbTestConfiguration.java | 3 +- .../src/test/resources/features/merge.feature | 28 +++++++-------- .../resources/features/modification.feature | 18 +++++----- .../test/resources/features/retrieval.feature | 2 +- .../AccessionVersionWrapperTester.java | 2 +- .../ampt2d/test/testers/HistoryTester.java | 2 +- 13 files changed, 87 insertions(+), 88 deletions(-) rename accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/{AccessioningIntegrationTests.java => AccessioningAcceptanceTests.java} (96%) rename accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/{AccessioningIntegrationTests.java => AccessioningAcceptanceTests.java} (96%) diff --git a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningIntegrationTests.java b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningAcceptanceTests.java similarity index 96% rename from accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningIntegrationTests.java rename to accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningAcceptanceTests.java index 26f9cc14..f5ec3e83 100644 --- a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningIntegrationTests.java +++ b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningAcceptanceTests.java @@ -32,6 +32,6 @@ "pretty", "html:target/cucumber"}, tags = {"not @ignore"}) -public class AccessioningIntegrationTests { +public class AccessioningAcceptanceTests { } diff --git a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningServiceStepDefinitions.java b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningServiceStepDefinitions.java index 60db7ee9..f135f733 100644 --- a/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningServiceStepDefinitions.java +++ b/accession-commons-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningServiceStepDefinitions.java @@ -55,6 +55,10 @@ public void submitObjectsToAccessioningService(String objects) { tester.getOrCreate(toModels(objects)); } + private List toModels(String values) { + return Arrays.stream(values.split(",")).map(TestModel::of).collect(Collectors.toList()); + } + @Then("^user received accessions: ([\\w-,]+)$") public void iShouldReceiveAccessions(String objects) { final String[] accessions = objects.split(","); @@ -62,21 +66,21 @@ public void iShouldReceiveAccessions(String objects) { } @When("^user sends patch (\\w+) for accession ([\\w-]+)$") - public void userSendsPatchInputForAccessionAccession(String patchData, String accession) { + public void userSendsPatchInputForAccession(String patchData, String accession) { tester.patch(accession, TestModel.of(patchData)); } - @Then("^user should receive version list for ([\\w-]+) with (\\d+) version$") - public void userShouldReceivePatchForAccessionsWithVersion(String accession, int totalVersions) { - tester.getLastMultipleVersionResult().assertAccession(accession).assertTotalVersions(totalVersions); + @Then("^user should receive (\\d+) (?:patches|patch) for accession ([\\w-]+)") + public void userShouldReceivePatchesForAccession(int totalPatches, String accession) { + tester.getLastMultipleVersionResult().assertAccession(accession).assertTotalVersions(totalPatches); } @And("^patch must have versions increased$") public void patchMustHaveVersionsIncreased() { - tester.getLastMultipleVersionResult().assertVersionAreIncreased(); + tester.getLastMultipleVersionResult().assertVersionsAreIncreased(); } - @Then("^user receives accession does not exist$") + @Then("^user should receive 'accession does not exist'$") public void userReceivesAccessionDoesNotExistError() { tester.getLastMethodResponse().assertThrow(AccessionDoesNotExistException.class); } @@ -87,27 +91,27 @@ public void userUpdatesAccessionWithInput(String accession, int patch, String ne } - @And("^hash of version (\\d+) should be ([\\w-]+)$") - public void hashOfVersionShouldBeHash(int version, String hash) { + @And("^hash of patch (\\d+) should be ([\\w-]+)$") + public void hashOfPatchShouldBeHash(int version, String hash) { tester.getLastMultipleVersionResult().assertHash(version, hash); } - @When("^user merges ([\\w-]+) with ([\\w-]+) reason: ([\\w ]+)$") + @When("^user merges ([\\w-]+) into ([\\w-]+) reason: ([\\w ]+)$") public void userMergesAWithB(String accessionA, String accessionB, String reason) { tester.merge(accessionA, accessionB, reason); } - @Then("^user receives a hash already exists exception$") + @Then("^user should receive 'hash already exists exception'$") public void weShouldHaveAHashAlreadyExistsException() { tester.getLastMethodResponse().assertThrow(HashAlreadyExistsException.class); } - @Then("^user operation finished correctly$") + @Then("^operation finished correctly$") public void lastProcessFinishedOk() { tester.getLastMethodResponse().assertNoException(); } - @Then("^user receives an accession already merged error$") + @Then("^user should receive 'accession already merged exception'$") public void weShouldHaveAAccessionAlreadyMerged() { tester.getLastMethodResponse().assertThrow(AccessionMergedException.class); } @@ -117,10 +121,6 @@ public void userRetrievesObjectA(String values) { tester.get(toModels(values)); } - private List toModels(String values) { - return Arrays.stream(values.split(",")).map(TestModel::of).collect(Collectors.toList()); - } - @Then("^user receives (\\d+) elements$") public void userReceivesANumberOfElements(int numberOfElements) { tester.getSingleVersionResults().assertSize(numberOfElements); diff --git a/accession-commons-jpa/src/test/resources/features/merge.feature b/accession-commons-jpa/src/test/resources/features/merge.feature index 9dcbfd40..6904f843 100644 --- a/accession-commons-jpa/src/test/resources/features/merge.feature +++ b/accession-commons-jpa/src/test/resources/features/merge.feature @@ -2,36 +2,36 @@ Feature: Accession merge Scenario: I want to merge an object but the destination object does not exist. Given already accessioned A - When user merges id-service-A with id-service-B reason: because i say so - Then user receives accession does not exist + When user merges id-service-A into id-service-B reason: because i say so + Then user should receive 'accession does not exist' Scenario: I want to merge an object but the origin object does not exist. Given already accessioned B - When user merges id-service-A with id-service-B reason: because i say so - Then user receives accession does not exist + When user merges id-service-A into id-service-B reason: because i say so + Then user should receive 'accession does not exist' Scenario: I want to merge an object but none of the two exist. - When user merges id-service-A with id-service-B reason: because i say so - Then user receives accession does not exist + When user merges id-service-A into id-service-B reason: because i say so + Then user should receive 'accession does not exist' Scenario: I want to merge an object Given already accessioned A And already accessioned B - When user merges id-service-A with id-service-B reason: because i say so - Then user operation finished correctly + When user merges id-service-A into id-service-B reason: because i say so + Then operation finished correctly Scenario: I want to merge an object but the object has been already merged Given already accessioned A And already accessioned B And already accessioned C - And user merges id-service-B with id-service-C reason: because i say so - When user merges id-service-A with id-service-B reason: because i say so - Then user receives an accession already merged error + And user merges id-service-B into id-service-C reason: because i say so + When user merges id-service-A into id-service-B reason: because i say so + Then user should receive 'accession already merged exception' Scenario: I want to merge an object to another and then to a third one Given already accessioned A And already accessioned B And already accessioned C - When user merges id-service-A with id-service-B reason: because i say so - When user merges id-service-B with id-service-C reason: because i say so - Then user operation finished correctly \ No newline at end of file + When user merges id-service-A into id-service-B reason: because i say so + When user merges id-service-B into id-service-C reason: because i say so + Then operation finished correctly \ No newline at end of file diff --git a/accession-commons-jpa/src/test/resources/features/modification.feature b/accession-commons-jpa/src/test/resources/features/modification.feature index 7824d999..890fda6d 100644 --- a/accession-commons-jpa/src/test/resources/features/modification.feature +++ b/accession-commons-jpa/src/test/resources/features/modification.feature @@ -4,7 +4,7 @@ Feature: Accession modification without losing access to the old information. Given already accessioned When user sends patch for accession - Then user should receive version list for with 2 version + Then user should receive 2 patches for accession And patch must have versions increased Examples: | objects | input | accession | @@ -14,27 +14,27 @@ Feature: Accession modification Scenario: I want to create a new patch of a non existing object When user sends patch AA for accession id-service-A - Then user receives accession does not exist + Then user should receive 'accession does not exist' - Scenario Outline: I want to update the fields that identify uniquely an object. + Scenario Outline: I want to update the fields that identify uniquely an object, without losing access to the old information. Given already accessioned When user updates patch with - Then user should receive version list for with 1 version - And hash of version 1 should be + Then user should receive 1 patch for accession + And hash of patch 1 should be Examples: | objects | input | accession | patch | hash | | A | AA | id-service-A | 1 | 801C34269F74ED383FC97DE33604B8A905ADB635 | | B | BB | id-service-B | 1 | 71C9DB717578B9EE49A59E69375C16C0627DFFEF | | A,B,C,E | AA | id-service-A | 1 | 801C34269F74ED383FC97DE33604B8A905ADB635 | - Scenario: I want to update the fields that identify uniquely an object, but we already have an object with the - same values. + Scenario: I want to update the fields that identify uniquely an object, but another object already has the same + values. Given already accessioned A,B When user updates id-service-A patch 1 with B - Then user receives a hash already exists exception + Then user should receive 'hash already exists exception' Scenario: I want to update an object that does not exist When user updates id-service-A patch 1 with AB - Then user receives accession does not exist + Then user should receive 'accession does not exist' diff --git a/accession-commons-jpa/src/test/resources/features/retrieval.feature b/accession-commons-jpa/src/test/resources/features/retrieval.feature index 5a5fd2ef..99edc725 100644 --- a/accession-commons-jpa/src/test/resources/features/retrieval.feature +++ b/accession-commons-jpa/src/test/resources/features/retrieval.feature @@ -22,7 +22,7 @@ Feature: Accession retrieval Scenario: I want to get a specific accession that doesn't exist in the system. When user retrieves accessions: id-service-A - Then user operation finished correctly + Then operation finished correctly And user receives no data Scenario: I want to retrieve an accession that exists in the system diff --git a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningIntegrationTests.java b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningAcceptanceTests.java similarity index 96% rename from accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningIntegrationTests.java rename to accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningAcceptanceTests.java index 26f9cc14..f5ec3e83 100644 --- a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningIntegrationTests.java +++ b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningAcceptanceTests.java @@ -32,6 +32,6 @@ "pretty", "html:target/cucumber"}, tags = {"not @ignore"}) -public class AccessioningIntegrationTests { +public class AccessioningAcceptanceTests { } diff --git a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningServiceStepDefinitions.java b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningServiceStepDefinitions.java index bbf3ee6c..35782f57 100644 --- a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningServiceStepDefinitions.java +++ b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/commons/accession/AccessioningServiceStepDefinitions.java @@ -64,7 +64,7 @@ public class AccessioningServiceStepDefinitions { private AccessioningServiceTester tester; @Before - public void doSomethingBefore() { + public void setUp() { mongoDbRule.getDatabaseOperation().deleteAll(); } @@ -74,6 +74,10 @@ public void submitObjectsToAccessioningService(String objects) { tester.getOrCreate(toModels(objects)); } + private List toModels(String values) { + return Arrays.stream(values.split(",")).map(TestModel::of).collect(Collectors.toList()); + } + @Then("^user received accessions: ([\\w-,]+)$") public void iShouldReceiveAccessions(String objects) { final String[] accessions = objects.split(","); @@ -81,21 +85,21 @@ public void iShouldReceiveAccessions(String objects) { } @When("^user sends patch (\\w+) for accession ([\\w-]+)$") - public void userSendsPatchInputForAccessionAccession(String patchData, String accession) { + public void userSendsPatchInputForAccession(String patchData, String accession) { tester.patch(accession, TestModel.of(patchData)); } - @Then("^user should receive version list for ([\\w-]+) with (\\d+) version$") - public void userShouldReceivePatchForAccessionsWithVersion(String accession, int totalVersions) { - tester.getLastMultipleVersionResult().assertAccession(accession).assertTotalVersions(totalVersions); + @Then("^user should receive (\\d+) (?:patches|patch) for accession ([\\w-]+)") + public void userShouldReceivePatchesForAccession(int totalPatches, String accession) { + tester.getLastMultipleVersionResult().assertAccession(accession).assertTotalVersions(totalPatches); } @And("^patch must have versions increased$") public void patchMustHaveVersionsIncreased() { - tester.getLastMultipleVersionResult().assertVersionAreIncreased(); + tester.getLastMultipleVersionResult().assertVersionsAreIncreased(); } - @Then("^user receives accession does not exist$") + @Then("^user should receive 'accession does not exist'$") public void userReceivesAccessionDoesNotExistError() { tester.getLastMethodResponse().assertThrow(AccessionDoesNotExistException.class); } @@ -106,27 +110,27 @@ public void userUpdatesAccessionWithInput(String accession, int patch, String ne } - @And("^hash of version (\\d+) should be ([\\w-]+)$") - public void hashOfVersionShouldBeHash(int version, String hash) { + @And("^hash of patch (\\d+) should be ([\\w-]+)$") + public void hashOfPatchShouldBeHash(int version, String hash) { tester.getLastMultipleVersionResult().assertHash(version, hash); } - @When("^user merges ([\\w-]+) with ([\\w-]+) reason: ([\\w ]+)$") + @When("^user merges ([\\w-]+) into ([\\w-]+) reason: ([\\w ]+)$") public void userMergesAWithB(String accessionA, String accessionB, String reason) { tester.merge(accessionA, accessionB, reason); } - @Then("^user receives a hash already exists exception$") + @Then("^user should receive 'hash already exists exception'$") public void weShouldHaveAUnknownError() { tester.getLastMethodResponse().assertThrow(HashAlreadyExistsException.class); } - @Then("^user operation finished correctly$") + @Then("^operation finished correctly$") public void lastProcessFinishedOk() { tester.getLastMethodResponse().assertNoException(); } - @Then("^user receives an accession already merged error$") + @Then("^user should receive 'accession already merged exception'$") public void weShouldHaveAAccessionAlreadyMerged() { tester.getLastMethodResponse().assertThrow(AccessionMergedException.class); } @@ -136,10 +140,6 @@ public void userRetrievesObjectA(String values) { tester.get(toModels(values)); } - private List toModels(String values) { - return Arrays.stream(values.split(",")).map(TestModel::of).collect(Collectors.toList()); - } - @Then("^user receives (\\d+) elements$") public void userReceivesANumberOfElements(int numberOfElements) { tester.getSingleVersionResults().assertSize(numberOfElements); @@ -157,6 +157,6 @@ public void userRetrievesAccessionsIdServiceA(String accessionIds) { @Then("^user receives no data$") public void userReceivesNoData() { - assertTrue(tester.getSingleVersionResults().getData().isEmpty(),"User received data"); + assertTrue(tester.getSingleVersionResults().getData().isEmpty(), "User received data"); } } diff --git a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/configuration/MongoDbTestConfiguration.java b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/configuration/MongoDbTestConfiguration.java index 9ac71f71..876eb2ba 100644 --- a/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/configuration/MongoDbTestConfiguration.java +++ b/accession-commons-mongodb/src/test/java/uk/ac/ebi/ampt2d/test/configuration/MongoDbTestConfiguration.java @@ -80,8 +80,7 @@ public HistoryService testMongoDbHistoryService() { @Bean public AccessioningService testMongoDbAccessioningService() { return new BasicAccessioningService<>( - new SingleAccessionGenerator<>(o -> - "id-" + o.getValue()), + new SingleAccessionGenerator<>(o -> "id-" + o.getValue()), testMongoDbService(), testModel -> testModel.getValue(), new SHA1HashingFunction() diff --git a/accession-commons-mongodb/src/test/resources/features/merge.feature b/accession-commons-mongodb/src/test/resources/features/merge.feature index 9dcbfd40..6904f843 100644 --- a/accession-commons-mongodb/src/test/resources/features/merge.feature +++ b/accession-commons-mongodb/src/test/resources/features/merge.feature @@ -2,36 +2,36 @@ Feature: Accession merge Scenario: I want to merge an object but the destination object does not exist. Given already accessioned A - When user merges id-service-A with id-service-B reason: because i say so - Then user receives accession does not exist + When user merges id-service-A into id-service-B reason: because i say so + Then user should receive 'accession does not exist' Scenario: I want to merge an object but the origin object does not exist. Given already accessioned B - When user merges id-service-A with id-service-B reason: because i say so - Then user receives accession does not exist + When user merges id-service-A into id-service-B reason: because i say so + Then user should receive 'accession does not exist' Scenario: I want to merge an object but none of the two exist. - When user merges id-service-A with id-service-B reason: because i say so - Then user receives accession does not exist + When user merges id-service-A into id-service-B reason: because i say so + Then user should receive 'accession does not exist' Scenario: I want to merge an object Given already accessioned A And already accessioned B - When user merges id-service-A with id-service-B reason: because i say so - Then user operation finished correctly + When user merges id-service-A into id-service-B reason: because i say so + Then operation finished correctly Scenario: I want to merge an object but the object has been already merged Given already accessioned A And already accessioned B And already accessioned C - And user merges id-service-B with id-service-C reason: because i say so - When user merges id-service-A with id-service-B reason: because i say so - Then user receives an accession already merged error + And user merges id-service-B into id-service-C reason: because i say so + When user merges id-service-A into id-service-B reason: because i say so + Then user should receive 'accession already merged exception' Scenario: I want to merge an object to another and then to a third one Given already accessioned A And already accessioned B And already accessioned C - When user merges id-service-A with id-service-B reason: because i say so - When user merges id-service-B with id-service-C reason: because i say so - Then user operation finished correctly \ No newline at end of file + When user merges id-service-A into id-service-B reason: because i say so + When user merges id-service-B into id-service-C reason: because i say so + Then operation finished correctly \ No newline at end of file diff --git a/accession-commons-mongodb/src/test/resources/features/modification.feature b/accession-commons-mongodb/src/test/resources/features/modification.feature index 7824d999..890fda6d 100644 --- a/accession-commons-mongodb/src/test/resources/features/modification.feature +++ b/accession-commons-mongodb/src/test/resources/features/modification.feature @@ -4,7 +4,7 @@ Feature: Accession modification without losing access to the old information. Given already accessioned When user sends patch for accession - Then user should receive version list for with 2 version + Then user should receive 2 patches for accession And patch must have versions increased Examples: | objects | input | accession | @@ -14,27 +14,27 @@ Feature: Accession modification Scenario: I want to create a new patch of a non existing object When user sends patch AA for accession id-service-A - Then user receives accession does not exist + Then user should receive 'accession does not exist' - Scenario Outline: I want to update the fields that identify uniquely an object. + Scenario Outline: I want to update the fields that identify uniquely an object, without losing access to the old information. Given already accessioned When user updates patch with - Then user should receive version list for with 1 version - And hash of version 1 should be + Then user should receive 1 patch for accession + And hash of patch 1 should be Examples: | objects | input | accession | patch | hash | | A | AA | id-service-A | 1 | 801C34269F74ED383FC97DE33604B8A905ADB635 | | B | BB | id-service-B | 1 | 71C9DB717578B9EE49A59E69375C16C0627DFFEF | | A,B,C,E | AA | id-service-A | 1 | 801C34269F74ED383FC97DE33604B8A905ADB635 | - Scenario: I want to update the fields that identify uniquely an object, but we already have an object with the - same values. + Scenario: I want to update the fields that identify uniquely an object, but another object already has the same + values. Given already accessioned A,B When user updates id-service-A patch 1 with B - Then user receives a hash already exists exception + Then user should receive 'hash already exists exception' Scenario: I want to update an object that does not exist When user updates id-service-A patch 1 with AB - Then user receives accession does not exist + Then user should receive 'accession does not exist' diff --git a/accession-commons-mongodb/src/test/resources/features/retrieval.feature b/accession-commons-mongodb/src/test/resources/features/retrieval.feature index 5a5fd2ef..99edc725 100644 --- a/accession-commons-mongodb/src/test/resources/features/retrieval.feature +++ b/accession-commons-mongodb/src/test/resources/features/retrieval.feature @@ -22,7 +22,7 @@ Feature: Accession retrieval Scenario: I want to get a specific accession that doesn't exist in the system. When user retrieves accessions: id-service-A - Then user operation finished correctly + Then operation finished correctly And user receives no data Scenario: I want to retrieve an accession that exists in the system diff --git a/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/AccessionVersionWrapperTester.java b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/AccessionVersionWrapperTester.java index e026348a..dc22c85e 100644 --- a/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/AccessionVersionWrapperTester.java +++ b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/AccessionVersionWrapperTester.java @@ -42,7 +42,7 @@ public AccessionVersionWrapperTester assertTotalVersions(int total) { return this; } - public AccessionVersionWrapperTester assertVersionAreIncreased() { + public AccessionVersionWrapperTester assertVersionsAreIncreased() { final List> wrappers = new ArrayList<>(getData().getModelWrappers()); diff --git a/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/HistoryTester.java b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/HistoryTester.java index 991b5e5b..0396aadb 100644 --- a/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/HistoryTester.java +++ b/accession-commons-test/src/main/java/uk/ac/ebi/ampt2d/test/testers/HistoryTester.java @@ -68,7 +68,7 @@ public static Consumer> assertEventIs(EventType } public static Consumer> assertAccession(String accession) { - return event -> Assert.assertEquals(accession, event.getAccession()); + return event -> assertEquals(accession, event.getAccession()); } public static Consumer> assertNullMergedInto() { From 91c26e6e9a899275a44ff9e714e001ff6be921cd Mon Sep 17 00:00:00 2001 From: jorizci Date: Wed, 18 Jul 2018 16:51:17 +0100 Subject: [PATCH 6/6] Fix problems due to rebase --- .../core/BasicMonotonicAccessioningWithAlternateRangesTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/core/BasicMonotonicAccessioningWithAlternateRangesTest.java b/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/core/BasicMonotonicAccessioningWithAlternateRangesTest.java index cf8a1fb2..94b0abdd 100644 --- a/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/core/BasicMonotonicAccessioningWithAlternateRangesTest.java +++ b/accession-commons-monotonic-generator-jpa/src/test/java/uk/ac/ebi/ampt2d/commons/accession/core/BasicMonotonicAccessioningWithAlternateRangesTest.java @@ -30,8 +30,8 @@ import uk.ac.ebi.ampt2d.commons.accession.hashing.SHA1HashingFunction; import uk.ac.ebi.ampt2d.commons.accession.persistence.jpa.monotonic.service.ContiguousIdBlockService; import uk.ac.ebi.ampt2d.commons.accession.service.BasicMonotonicAccessioningService; -import uk.ac.ebi.ampt2d.test.TestModel; import uk.ac.ebi.ampt2d.test.configuration.TestMonotonicDatabaseServiceTestConfiguration; +import uk.ac.ebi.ampt2d.test.models.TestModel; import uk.ac.ebi.ampt2d.test.service.TestMonotonicDatabaseService; import java.util.List;