This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new 4a0ab155f1 ISIS-3049: bring JPA regr. tests up to speed with latest
changes to JDO tests
4a0ab155f1 is described below
commit 4a0ab155f1821ce8fbd9cc59c607b71526b0672b
Author: Andi Huber <[email protected]>
AuthorDate: Thu Jun 2 13:27:09 2022 +0200
ISIS-3049: bring JPA regr. tests up to speed with latest changes to JDO
tests
---
.../persistence/jdo/JdoBootstrappingTest.java | 3 -
.../injecting/jpa/JpaEntityInjectingTest.java | 15 +--
.../persistence/jpa/JpaBootstrappingTest.java | 43 +++-----
.../jpa/JpaExceptionTranslationTest.java | 2 -
...xceptionTranslationTest_usingTransactional.java | 19 ----
.../testdomain/persistence/jpa/JpaJaxbTest.java | 6 --
.../testdomain/persistence/jpa/JpaQueryTest.java | 9 --
.../jpa/JpaTransactionScopeListenerTest.java | 2 +-
.../testdomain/viewers/jdo/wkt/TestAppJdoWkt.java | 6 +-
.../viewers/jdo/wkt/InteractionTestJdoWkt.java | 1 -
.../testdomain/viewers/jpa/wkt/TestAppJpaWkt.java | 2 +-
.../viewers/jpa/wkt/InteractionTestJpaWkt.java | 5 -
.../isis/testdomain/jdo/JdoTestFixtures.java | 5 -
.../isis/testdomain/jpa/JpaTestFixtures.java | 118 ++++++++++++++++++---
14 files changed, 123 insertions(+), 113 deletions(-)
diff --git
a/regressiontests/stable-persistence-jdo/src/test/java/org/apache/isis/testdomain/persistence/jdo/JdoBootstrappingTest.java
b/regressiontests/stable-persistence-jdo/src/test/java/org/apache/isis/testdomain/persistence/jdo/JdoBootstrappingTest.java
index f60d419462..ff6a3d7617 100644
---
a/regressiontests/stable-persistence-jdo/src/test/java/org/apache/isis/testdomain/persistence/jdo/JdoBootstrappingTest.java
+++
b/regressiontests/stable-persistence-jdo/src/test/java/org/apache/isis/testdomain/persistence/jdo/JdoBootstrappingTest.java
@@ -23,7 +23,6 @@ import java.sql.SQLException;
import javax.inject.Inject;
import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
@@ -62,7 +61,6 @@ class JdoBootstrappingTest extends
IsisIntegrationTestAbstract {
// Util_H2Console.main(null);
}
- @Disabled
@Test @Order(1) @Rollback(false)
void sampleInventoryShouldBeSetUp() {
@@ -92,7 +90,6 @@ class JdoBootstrappingTest extends
IsisIntegrationTestAbstract {
testFixtures.assertHasPersistenceId(firstProduct);
}
- @Disabled
@Test @Order(2) @Rollback(false)
void aSecondRunShouldWorkAsWell() {
sampleInventoryShouldBeSetUp();
diff --git
a/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/injecting/jpa/JpaEntityInjectingTest.java
b/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/injecting/jpa/JpaEntityInjectingTest.java
index 86b7e1a041..5c90b75244 100644
---
a/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/injecting/jpa/JpaEntityInjectingTest.java
+++
b/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/injecting/jpa/JpaEntityInjectingTest.java
@@ -39,12 +39,11 @@ import
org.apache.isis.commons.internal.primitives._Longs.Bound;
import org.apache.isis.commons.internal.primitives._Longs.Range;
import org.apache.isis.core.config.presets.IsisPresets;
import org.apache.isis.testdomain.conf.Configuration_usingJpa;
-import org.apache.isis.testdomain.jpa.JpaTestDomainPersona;
+import org.apache.isis.testdomain.jpa.JpaTestFixtures;
import org.apache.isis.testdomain.jpa.entities.JpaBook;
import org.apache.isis.testdomain.jpa.entities.JpaProduct;
import org.apache.isis.testdomain.util.dto.BookDto;
import org.apache.isis.testdomain.util.kv.KVStoreForTesting;
-import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts;
import
org.apache.isis.testing.integtestsupport.applib.IsisIntegrationTestAbstract;
import lombok.val;
@@ -64,20 +63,16 @@ import lombok.extern.log4j.Log4j2;
@DisabledIfSystemProperty(named = "isRunningWithSurefire", matches = "true")
class JpaEntityInjectingTest extends IsisIntegrationTestAbstract {
- @Inject private FixtureScripts fixtureScripts;
+ @Inject private JpaTestFixtures jpaTestFixtures;
@Inject private RepositoryService repository;
@Inject private KVStoreForTesting kvStore;
@Test @Order(1) @Rollback(false)
void setup() {
- // cleanup
- fixtureScripts.runPersona(JpaTestDomainPersona.InventoryPurgeAll);
- kvStore.clear(JpaBook.class);
-
// given
- fixtureScripts.runPersona(JpaTestDomainPersona.InventoryWith1Book);
- assertInjectCountRange(1, 2);
+ jpaTestFixtures.reinstall(()->kvStore.clear(JpaBook.class));
+ assertInjectCountRange(3, 9); //TODO there is some injection redundancy
}
@@ -135,7 +130,7 @@ class JpaEntityInjectingTest extends
IsisIntegrationTestAbstract {
private JpaBook getSampleBook() {
val books = repository.allInstances(JpaProduct.class);
- assertEquals(1, books.size(), "book count");
+ assertEquals(3, books.size(), "book count");
val book = books.get(0);
assertEquals(BookDto.sample().getName(), book.getName(), "book name");
return (JpaBook)book;
diff --git
a/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/JpaBootstrappingTest.java
b/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/JpaBootstrappingTest.java
index c254aef860..26ff00f9da 100644
---
a/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/JpaBootstrappingTest.java
+++
b/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/JpaBootstrappingTest.java
@@ -20,8 +20,6 @@ package org.apache.isis.testdomain.persistence.jpa;
import java.sql.SQLException;
import java.util.Optional;
-import java.util.SortedSet;
-import java.util.TreeSet;
import javax.inject.Inject;
@@ -42,12 +40,13 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.core.config.presets.IsisPresets;
import org.apache.isis.core.metamodel.facets.object.entity.EntityFacet;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
import org.apache.isis.testdomain.conf.Configuration_usingJpa;
+import org.apache.isis.testdomain.jdo.JdoTestFixtures;
import org.apache.isis.testdomain.jpa.JpaTestFixtures;
-import org.apache.isis.testdomain.jpa.entities.JpaBook;
import org.apache.isis.testdomain.jpa.entities.JpaInventory;
import org.apache.isis.testdomain.jpa.entities.JpaProduct;
import
org.apache.isis.testing.integtestsupport.applib.IsisIntegrationTestAbstract;
@@ -73,22 +72,6 @@ class JpaBootstrappingTest extends
IsisIntegrationTestAbstract {
// Util_H2Console.main(null);
}
- void cleanUp() {
- testFixtures.cleanUpRepository();
- }
-
- void setUp() {
-
- // setup sample Inventory
- SortedSet<JpaProduct> products = new TreeSet<>();
-
- products.add(JpaBook.of("Sample Book", "A sample book for testing.",
99., "Sample Author", "Sample ISBN",
- "Sample Publisher"));
-
- val inventory = new JpaInventory("Sample Inventory", products);
- repositoryService.persistAndFlush(inventory);
- }
-
@Test @Order(0)
void platformTransactionManager_shouldBeAvailable() {
assertTrue(platformTransactionManager.isPresent());
@@ -129,12 +112,8 @@ class JpaBootstrappingTest extends
IsisIntegrationTestAbstract {
// given - expected pre condition: no inventories
- cleanUp();
- assertEquals(0,
repositoryService.allInstances(JpaInventory.class).size());
-
- // when
-
- setUp();
+ testFixtures.reinstall(()->
+ assertEquals(0,
repositoryService.allInstances(JpaInventory.class).size()));
// then - expected post condition: ONE inventory
@@ -144,12 +123,18 @@ class JpaBootstrappingTest extends
IsisIntegrationTestAbstract {
val inventory = inventories.get(0);
assertNotNull(inventory);
assertNotNull(inventory.getProducts());
- assertEquals(1, inventory.getProducts().size());
+ assertEquals(3, inventory.getProducts().size());
+
+ val expectedBookTitles = JdoTestFixtures.expectedBookTitles();
+
+ val multipleBooks = Can.ofCollection(inventory.getProducts())
+ .filter(book->expectedBookTitles.contains(book.getName()));
+
+ assertEquals(3, multipleBooks.size());
- val product = inventory.getProducts().iterator().next();
- assertEquals("Sample Book", product.getName());
+ val firstProduct = inventory.getProducts().iterator().next();
- testFixtures.assertHasPersistenceId(product);
+ testFixtures.assertHasPersistenceId(firstProduct);
}
@Test @Order(2) @Rollback(false)
diff --git
a/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/JpaExceptionTranslationTest.java
b/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/JpaExceptionTranslationTest.java
index c4948f48c3..12ae94159f 100644
---
a/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/JpaExceptionTranslationTest.java
+++
b/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/JpaExceptionTranslationTest.java
@@ -64,8 +64,6 @@ class JpaExceptionTranslationTest extends
RegressionTestAbstract {
void booksUniqueByIsbn_whenViolated_shouldThrowTranslatedException() {
- run(()->testFixtures.setUp3Books());
-
// when adding a book for which one with same ISBN already exists in
the database,
// we expect to see a Spring recognized DataAccessException been thrown
diff --git
a/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/JpaExceptionTranslationTest_usingTransactional.java
b/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/JpaExceptionTranslationTest_usingTransactional.java
index 2125b6b343..371bc9cd0a 100644
---
a/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/JpaExceptionTranslationTest_usingTransactional.java
+++
b/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/JpaExceptionTranslationTest_usingTransactional.java
@@ -72,15 +72,6 @@ extends RegressionTestAbstract {
// Util_H2Console.main(null);
}
- @Test @Order(1)
- @Transactional @Rollback(false)
- void booksUniqueByIsbn_setupPhase() {
- interactionService.runAnonymous(()->{
-
- testFixtures.setUp3Books();
-
- });
- }
@Test @Order(2)
void booksUniqueByIsbn_whenViolated_shouldThrowTranslatedException() {
@@ -131,17 +122,7 @@ extends RegressionTestAbstract {
}
- @Test @Order(4)
- @Transactional @Rollback(false)
- void booksUniqueByIsbn_cleanupPhase() {
- interactionService.runAnonymous(()->{
-
- testFixtures.cleanUpRepository();
-
- });
-
- }
}
diff --git
a/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/JpaJaxbTest.java
b/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/JpaJaxbTest.java
index 511cfe3d10..206f59c44a 100644
---
a/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/JpaJaxbTest.java
+++
b/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/JpaJaxbTest.java
@@ -20,7 +20,6 @@ package org.apache.isis.testdomain.persistence.jpa;
import javax.inject.Inject;
-import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
@@ -45,11 +44,6 @@ class JpaJaxbTest extends RegressionTestAbstract {
@Inject private JpaTestFixtures testFixtures;
@Inject private JaxbService jaxbService;
- @BeforeEach
- void setUp() {
- run(()->testFixtures.setUp3Books());
- }
-
@Test
void inventoryJaxbVm_shouldRoundtripProperly() {
diff --git
a/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/JpaQueryTest.java
b/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/JpaQueryTest.java
index 3d9b04ad67..e16e2bdd7e 100644
---
a/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/JpaQueryTest.java
+++
b/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/persistence/jpa/JpaQueryTest.java
@@ -77,7 +77,6 @@ class JpaQueryTest extends IsisIntegrationTestAbstract {
final boolean inInteraction = interactionService.isInInteraction();
Assertions.assertThat(inInteraction).isTrue();
- testFixtures.setUp3Books();
// when
@@ -98,8 +97,6 @@ class JpaQueryTest extends IsisIntegrationTestAbstract {
@Test @Order(2)
void sampleInventory_shouldSupportQueryCount() {
- testFixtures.setUp3Books();
-
testFixtures.assertInventoryHasBooks(repositoryService
.allMatches(Query.allInstances(JpaBook.class)),
1, 2, 3);
@@ -113,8 +110,6 @@ class JpaQueryTest extends IsisIntegrationTestAbstract {
@Test @Order(3) @Disabled("start not supported, should throw unsupported
exception maybe?")
void sampleInventory_shouldSupportQueryStart() {
- testFixtures.setUp3Books();
-
testFixtures.assertInventoryHasBooks(repositoryService
.allMatches(Query.allInstances(JpaBook.class)
.withStart(1)),
@@ -129,8 +124,6 @@ class JpaQueryTest extends IsisIntegrationTestAbstract {
@Test @Order(4)
void sampleInventory_shouldSupportNamedQueries() {
- testFixtures.setUp3Books();
-
val query = Query.named(JpaBook.class,
"JpaInventory.findAffordableProducts")
.withParameter("priceUpperBound", 60.);
@@ -141,8 +134,6 @@ class JpaQueryTest extends IsisIntegrationTestAbstract {
@Test @Order(5)
void sampleInventory_shouldSupportJpaCriteria() {
- testFixtures.setUp3Books();
-
val em = jpaSupport.getEntityManagerElseFail(JpaBook.class);
val cb = em.getCriteriaBuilder();
diff --git
a/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/transactions/jpa/JpaTransactionScopeListenerTest.java
b/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/transactions/jpa/JpaTransactionScopeListenerTest.java
index 0dec24a1b3..5c0b27388c 100644
---
a/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/transactions/jpa/JpaTransactionScopeListenerTest.java
+++
b/regressiontests/stable-persistence-jpa/src/test/java/org/apache/isis/testdomain/transactions/jpa/JpaTransactionScopeListenerTest.java
@@ -112,7 +112,7 @@ class JpaTransactionScopeListenerTest {
});
- final int expectedIaCount = 2;
+ final int expectedIaCount = 3;
assertEquals(expectedIaCount,
InteractionBoundaryProbe.totalInteractionsStarted(kvStore));
assertEquals(expectedIaCount,
InteractionBoundaryProbe.totalInteractionsEnded(kvStore));
diff --git
a/regressiontests/stable-viewers-jdo/src/main/java/org/apache/isis/testdomain/viewers/jdo/wkt/TestAppJdoWkt.java
b/regressiontests/stable-viewers-jdo/src/main/java/org/apache/isis/testdomain/viewers/jdo/wkt/TestAppJdoWkt.java
index a71504d43b..ad2c860833 100644
---
a/regressiontests/stable-viewers-jdo/src/main/java/org/apache/isis/testdomain/viewers/jdo/wkt/TestAppJdoWkt.java
+++
b/regressiontests/stable-viewers-jdo/src/main/java/org/apache/isis/testdomain/viewers/jdo/wkt/TestAppJdoWkt.java
@@ -41,7 +41,6 @@ import
org.apache.isis.testdomain.conf.Configuration_usingWicket;
import org.apache.isis.testdomain.jdo.JdoInventoryJaxbVm;
import org.apache.isis.testdomain.jdo.JdoTestFixtures;
import
org.apache.isis.testdomain.model.valuetypes.composite.CalendarEventJaxbVm;
-import
org.apache.isis.viewer.restfulobjects.jaxrsresteasy4.IsisModuleViewerRestfulObjectsJaxrsResteasy4;
import org.apache.isis.viewer.wicket.viewer.IsisModuleViewerWicketViewer;
/**
@@ -54,9 +53,7 @@ import
org.apache.isis.viewer.wicket.viewer.IsisModuleViewerWicketViewer;
// UI (Wicket Viewer)
IsisModuleViewerWicketViewer.class,
-
- IsisModuleViewerRestfulObjectsJaxrsResteasy4.class,
-
+ //IsisModuleViewerRestfulObjectsJaxrsResteasy4.class,
XrayEnable.class // for debugging only
})
@@ -89,7 +86,6 @@ public class TestAppJdoWkt extends
SpringBootServletInitializer {
@Action @ActionLayout(sequence = "0.1")
public TestHomePage setup() {
- //testFixtures.install();
return this;
}
diff --git
a/regressiontests/stable-viewers-jdo/src/test/java/org/apache/isis/testdomain/viewers/jdo/wkt/InteractionTestJdoWkt.java
b/regressiontests/stable-viewers-jdo/src/test/java/org/apache/isis/testdomain/viewers/jdo/wkt/InteractionTestJdoWkt.java
index 61d35338b6..9995beae81 100644
---
a/regressiontests/stable-viewers-jdo/src/test/java/org/apache/isis/testdomain/viewers/jdo/wkt/InteractionTestJdoWkt.java
+++
b/regressiontests/stable-viewers-jdo/src/test/java/org/apache/isis/testdomain/viewers/jdo/wkt/InteractionTestJdoWkt.java
@@ -72,7 +72,6 @@ class InteractionTestJdoWkt extends RegressionTestAbstract {
@BeforeEach
void setUp() throws InterruptedException {
wktTester = wicketTesterFactory.createTester(JdoBook::fromDto);
- //testFixtures.install();
}
@AfterEach
diff --git
a/regressiontests/stable-viewers-jpa/src/main/java/org/apache/isis/testdomain/viewers/jpa/wkt/TestAppJpaWkt.java
b/regressiontests/stable-viewers-jpa/src/main/java/org/apache/isis/testdomain/viewers/jpa/wkt/TestAppJpaWkt.java
index 74333e32b0..2863e19b4f 100644
---
a/regressiontests/stable-viewers-jpa/src/main/java/org/apache/isis/testdomain/viewers/jpa/wkt/TestAppJpaWkt.java
+++
b/regressiontests/stable-viewers-jpa/src/main/java/org/apache/isis/testdomain/viewers/jpa/wkt/TestAppJpaWkt.java
@@ -54,6 +54,7 @@ import
org.apache.isis.viewer.wicket.viewer.IsisModuleViewerWicketViewer;
// UI (Wicket Viewer)
IsisModuleViewerWicketViewer.class,
+ //IsisModuleViewerRestfulObjectsJaxrsResteasy4.class,
XrayEnable.class // for debugging only
})
@@ -89,7 +90,6 @@ public class TestAppJpaWkt extends
SpringBootServletInitializer {
@Action @ActionLayout(sequence = "0.1")
public TestHomePage setup() {
- testFixtures.setUp3Books();
return this;
}
diff --git
a/regressiontests/stable-viewers-jpa/src/test/java/org/apache/isis/testdomain/viewers/jpa/wkt/InteractionTestJpaWkt.java
b/regressiontests/stable-viewers-jpa/src/test/java/org/apache/isis/testdomain/viewers/jpa/wkt/InteractionTestJpaWkt.java
index 8f8c2db0e3..f29fd6434e 100644
---
a/regressiontests/stable-viewers-jpa/src/test/java/org/apache/isis/testdomain/viewers/jpa/wkt/InteractionTestJpaWkt.java
+++
b/regressiontests/stable-viewers-jpa/src/test/java/org/apache/isis/testdomain/viewers/jpa/wkt/InteractionTestJpaWkt.java
@@ -70,12 +70,7 @@ class InteractionTestJpaWkt extends RegressionTestAbstract {
@BeforeEach
void setUp() throws InterruptedException {
-
wktTester = wicketTesterFactory.createTester(JpaBook::fromDto);
-
- run(()->{
- testFixtures.setUp3Books();
- });
}
@AfterEach
diff --git
a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/JdoTestFixtures.java
b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/JdoTestFixtures.java
index efc2a81455..08e32f8cca 100644
---
a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/JdoTestFixtures.java
+++
b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/JdoTestFixtures.java
@@ -74,10 +74,8 @@ public class JdoTestFixtures implements MetamodelListener {
}
private BooleanAtomicReference isInstalled = _Refs.booleanAtomicRef(false);
-
private LinkedBlockingQueue<Lock> lockQueue = new LinkedBlockingQueue<>(1);
-
@Override
public void onMetamodelLoaded() {
install();
@@ -190,9 +188,6 @@ public class JdoTestFixtures implements MetamodelListener {
// -- HELPER
private void clear() {
-
-
-
isInstalled.computeIfTrue(()->{
interactionService.runAnonymous(()->{
cleanUpRepository();
diff --git
a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jpa/JpaTestFixtures.java
b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jpa/JpaTestFixtures.java
index ecb17015b3..35bdf60f4c 100644
---
a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jpa/JpaTestFixtures.java
+++
b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jpa/JpaTestFixtures.java
@@ -19,8 +19,10 @@
package org.apache.isis.testdomain.jpa;
import java.util.Collection;
+import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
+import java.util.concurrent.LinkedBlockingQueue;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
@@ -32,47 +34,80 @@ import static org.junit.Assert.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import org.apache.isis.applib.events.metamodel.MetamodelListener;
import org.apache.isis.applib.services.bookmark.BookmarkService;
import org.apache.isis.applib.services.factory.FactoryService;
+import org.apache.isis.applib.services.iactnlayer.InteractionService;
import org.apache.isis.applib.services.repository.RepositoryService;
import org.apache.isis.commons.collections.Can;
+import org.apache.isis.commons.internal.assertions._Assert;
import org.apache.isis.commons.internal.base._NullSafe;
+import org.apache.isis.commons.internal.base._Oneshot;
+import org.apache.isis.commons.internal.base._Refs;
+import org.apache.isis.commons.internal.base._Refs.BooleanAtomicReference;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.testdomain.jpa.entities.JpaBook;
import org.apache.isis.testdomain.jpa.entities.JpaInventory;
import org.apache.isis.testdomain.jpa.entities.JpaProduct;
import org.apache.isis.testdomain.util.dto.BookDto;
+import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
import lombok.val;
@Service
-public class JpaTestFixtures {
+public class JpaTestFixtures implements MetamodelListener {
@Inject private RepositoryService repository;
@Inject private FactoryService factoryService;
@Inject private BookmarkService bookmarkService;
-
- public void cleanUpRepository() {
-
repository.allInstances(JpaInventory.class).forEach(repository::remove);
- repository.allInstances(JpaBook.class).forEach(repository::remove);
- repository.allInstances(JpaProduct.class).forEach(repository::remove);
+ @Inject private InteractionService interactionService;
+
+ @RequiredArgsConstructor
+ public static class Lock {
+ private final _Oneshot release = new _Oneshot();
+ private final JpaTestFixtures jpaTestFixtures;
+ public void release() {
+ release.trigger(()->jpaTestFixtures.release(this));
+ }
}
- public void setUp3Books() {
+ private BooleanAtomicReference isInstalled = _Refs.booleanAtomicRef(false);
+ private LinkedBlockingQueue<Lock> lockQueue = new LinkedBlockingQueue<>(1);
- cleanUpRepository();
- // given - expected pre condition: no inventories
- assertEquals(0, repository.allInstances(JpaInventory.class).size());
+ @Override
+ public void onMetamodelLoaded() {
+ install();
+ }
- // setup sample Inventory with 3 Books
- SortedSet<JpaProduct> products = new TreeSet<>();
+ public void install(final Lock lock) {
+ _Assert.assertEquals(lockQueue.peek(), lock);
+ install();
+ }
- BookDto.samples()
- .map(JpaBook::fromDto)
- .forEach(products::add);
+ public void reinstall(final Runnable onBeforeInstall) {
+ isInstalled.compute(isInst->{
+ interactionService.runAnonymous(()->{
+ cleanUpRepository();
+ onBeforeInstall.run();
+ setUp3Books();
+ });
+ return false;
+ });
+ }
- val inventory = new JpaInventory("Sample Inventory", products);
- repository.persistAndFlush(inventory);
+ @SneakyThrows
+ public Lock clearAndAquireLock() {
+ Lock lock;
+ lockQueue.put(lock = new Lock(this)); // put next lock on the queue;
blocks until space available
+ clear();
+ return lock;
+ }
+
+ @SneakyThrows
+ void release(final Lock lock) {
+ reinstall(()->{});
+ lockQueue.take(); // remove lock from queue
}
public void addABookTo(final JpaInventory inventory) {
@@ -141,4 +176,53 @@ public class JpaTestFixtures {
//System.err.printf("%s%n", bookmark);
}
+ public static Set<String> expectedBookTitles() {
+ val expectedTitles = Set.of("Dune", "The Foundation", "The Time
Machine");
+ return expectedTitles;
+ }
+
+ // -- HELPER
+
+ private void clear() {
+ isInstalled.computeIfTrue(()->{
+ interactionService.runAnonymous(()->{
+ cleanUpRepository();
+ });
+ return false;
+ });
+ }
+
+ private void install() {
+ isInstalled.computeIfFalse(()->{
+ interactionService.runAnonymous(()->{
+ cleanUpRepository();
+ setUp3Books();
+ });
+ return true;
+ });
+ }
+
+ private void cleanUpRepository() {
+
repository.allInstances(JpaInventory.class).forEach(repository::remove);
+ repository.allInstances(JpaBook.class).forEach(repository::remove);
+ repository.allInstances(JpaProduct.class).forEach(repository::remove);
+ }
+
+ private void setUp3Books() {
+
+ cleanUpRepository();
+ // given - expected pre condition: no inventories
+ assertEquals(0, repository.allInstances(JpaInventory.class).size());
+
+ // setup sample Inventory with 3 Books
+ SortedSet<JpaProduct> products = new TreeSet<>();
+
+ BookDto.samples()
+ .map(JpaBook::fromDto)
+ .forEach(products::add);
+
+ val inventory = new JpaInventory("Sample Inventory", products);
+ repository.persistAndFlush(inventory);
+ }
+
}