This is an automated email from the ASF dual-hosted git repository. danhaywood pushed a commit to branch jpa-SNAPSHOT in repository https://gitbox.apache.org/repos/asf/isis-app-simpleapp.git
commit ee2559760a9a6a5aca7dd4bd0aba91377ad7305d Author: Dan Haywood <[email protected]> AuthorDate: Sun Jul 31 13:47:47 2022 +0100 ISIS-2965: fixes integ test for M8 ... changes handling (more precise) for failing transactions --- README.adoc | 2 +- .../integtests/tests/SimpleObjects_IntegTest.java | 42 ++++++++++++++++------ .../domainapp/modules/simple/SimpleModule.java | 5 +-- .../main/java/domainapp/webapp/AppManifest.java | 5 +++ .../src/main/resources/static/css/application.css | 3 ++ 5 files changed, 44 insertions(+), 13 deletions(-) diff --git a/README.adoc b/README.adoc index d578146..dd032fe 100644 --- a/README.adoc +++ b/README.adoc @@ -18,7 +18,7 @@ toc::[] * install prereqs: -** Java 8 LTS (eg link:https://adoptopenjdk.net/[Adopt OpenJDK] distribution) +** Java 11 LTS (eg link:https://adoptopenjdk.net/[Adopt OpenJDK] distribution) ** Maven 3.6 or later (http://maven.apache.org/download.cgi[download]) * download and unzip + diff --git a/module-simple-tests/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObjects_IntegTest.java b/module-simple-tests/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObjects_IntegTest.java index fdd26c2..bad136d 100644 --- a/module-simple-tests/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObjects_IntegTest.java +++ b/module-simple-tests/src/test/java/domainapp/modules/simple/integtests/tests/SimpleObjects_IntegTest.java @@ -1,20 +1,32 @@ package domainapp.modules.simple.integtests.tests; import java.util.List; +import java.util.Optional; import javax.inject.Inject; +import javax.persistence.RollbackException; +import org.assertj.core.api.Assertions; import org.hamcrest.MatcherAssert; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.springframework.dao.DuplicateKeyException; +import org.springframework.transaction.TransactionDefinition; +import org.springframework.transaction.TransactionSystemException; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; +import org.apache.isis.applib.services.iactnlayer.InteractionService; +import org.apache.isis.applib.services.xactn.TransactionService; +import org.apache.isis.commons.functional.Try; import org.apache.isis.testing.unittestsupport.applib.matchers.ThrowableMatchers; +import lombok.val; + import domainapp.modules.simple.dom.so.SimpleObject; import domainapp.modules.simple.dom.so.SimpleObjects; import domainapp.modules.simple.fixture.SimpleObject_persona; @@ -72,24 +84,34 @@ public class SimpleObjects_IntegTest extends SimpleModuleIntegTestAbstract { // given fixtureScripts.runPersona(SimpleObject_persona.FIZZ); - transactionService.flushTransaction(); + interactionService.nextInteraction(); - // expect - Throwable cause = assertThrows(Throwable.class, ()->{ + // we execute this in its own transaction so that it can be discarded + Try<Void> attempt = transactionService.runTransactional(Propagation.REQUIRES_NEW, () -> { - // when - wrap(menu).create("Fizz"); - transactionService.flushTransaction(); + // expect + Throwable cause = assertThrows(Throwable.class, () -> { + // when + wrap(menu).create("Fizz"); + transactionService.flushTransaction(); + }); + // also expect + MatcherAssert.assertThat(cause, + ThrowableMatchers.causedBy(DuplicateKeyException.class)); }); - // also expect - MatcherAssert.assertThat(cause, - ThrowableMatchers.causedBy(DuplicateKeyException.class)); + + // then + assertThat(attempt.isFailure()).isTrue(); + val failureIfAny = attempt.getFailure(); + assertThat(failureIfAny).isPresent(); + assertThat(failureIfAny.get()).isInstanceOf(TransactionSystemException.class); + assertThat(failureIfAny.get().getCause()).isInstanceOf(RollbackException.class); } } - + @Inject protected InteractionService interactionService; } diff --git a/module-simple/src/main/java/domainapp/modules/simple/SimpleModule.java b/module-simple/src/main/java/domainapp/modules/simple/SimpleModule.java index e547259..4585b2c 100644 --- a/module-simple/src/main/java/domainapp/modules/simple/SimpleModule.java +++ b/module-simple/src/main/java/domainapp/modules/simple/SimpleModule.java @@ -7,6 +7,7 @@ import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScript; import org.apache.isis.testing.fixtures.applib.modules.ModuleWithFixtures; +import org.apache.isis.testing.fixtures.applib.teardown.jpa.TeardownFixtureJpaAbstract; import domainapp.modules.simple.dom.so.SimpleObject; @@ -18,10 +19,10 @@ public class SimpleModule implements ModuleWithFixtures { @Override public FixtureScript getTeardownFixture() { - return new FixtureScript() { + return new TeardownFixtureJpaAbstract() { @Override protected void execute(ExecutionContext executionContext) { - repositoryService.removeAll(SimpleObject.class); + deleteFrom(SimpleObject.class); } }; } diff --git a/webapp/src/main/java/domainapp/webapp/AppManifest.java b/webapp/src/main/java/domainapp/webapp/AppManifest.java index 9dca47c..cfbfcda 100644 --- a/webapp/src/main/java/domainapp/webapp/AppManifest.java +++ b/webapp/src/main/java/domainapp/webapp/AppManifest.java @@ -5,6 +5,8 @@ import org.springframework.context.annotation.Import; import org.springframework.context.annotation.PropertySource; import org.springframework.context.annotation.PropertySources; +import org.apache.isis.applib.IsisModuleApplibChangeAndExecutionLoggers; +import org.apache.isis.applib.IsisModuleApplibMixins; import org.apache.isis.core.config.presets.IsisPresets; import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices; import org.apache.isis.extensions.flyway.impl.IsisModuleExtFlywayImpl; @@ -22,6 +24,9 @@ import domainapp.webapp.quartz.QuartzModule; @Configuration @Import({ + IsisModuleApplibMixins.class, + IsisModuleApplibChangeAndExecutionLoggers.class, + IsisModuleCoreRuntimeServices.class, IsisModuleSecurityShiro.class, IsisModulePersistenceJpaEclipselink.class, diff --git a/webapp/src/main/resources/static/css/application.css b/webapp/src/main/resources/static/css/application.css index e69de29..888fac0 100644 --- a/webapp/src/main/resources/static/css/application.css +++ b/webapp/src/main/resources/static/css/application.css @@ -0,0 +1,3 @@ +body > nav > div > a > img { + height: 32px; +}
