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);
+    }
+
 }

Reply via email to