You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by ah...@apache.org on 2023/07/20 17:35:06 UTC

[causeway] 02/02: CAUSEWAY-3532: more regr. test housekeeping

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/causeway.git

commit c8f84dff51cb41c24fe6cd11c968dc956f647ea6
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Jul 20 19:34:58 2023 +0200

    CAUSEWAY-3532: more regr. test housekeeping
---
 .../testdomain/fixtures/EntityTestFixtures.java    | 47 +++++++++++++++++++++-
 .../{HasName.java => InventoryJaxbVm.java}         | 16 ++++++--
 .../testdomain/jdo/JdoInventoryJaxbVm.java         |  6 ++-
 .../causeway/testdomain/jdo/JdoTestFixtures.java   | 40 +++---------------
 .../testdomain/jdo/entities/JdoProduct.java        |  5 +--
 .../testdomain/jpa/JpaInventoryJaxbVm.java         |  6 ++-
 .../causeway/testdomain/jpa/JpaTestFixtures.java   | 42 ++++---------------
 .../testdomain/jpa/entities/JpaProduct.java        |  5 +--
 .../testdomain/util/rest/RestEndpointService.java  |  2 +-
 9 files changed, 83 insertions(+), 86 deletions(-)

diff --git a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/fixtures/EntityTestFixtures.java b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/fixtures/EntityTestFixtures.java
index d9b4a29b38..257f8a36cc 100644
--- a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/fixtures/EntityTestFixtures.java
+++ b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/fixtures/EntityTestFixtures.java
@@ -21,25 +21,31 @@ package org.apache.causeway.testdomain.fixtures;
 import java.util.Collection;
 import java.util.Set;
 import java.util.concurrent.LinkedBlockingQueue;
+import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
 import javax.inject.Inject;
 
 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.causeway.applib.events.metamodel.MetamodelListener;
+import org.apache.causeway.applib.services.bookmark.Bookmark;
 import org.apache.causeway.applib.services.bookmark.BookmarkService;
 import org.apache.causeway.applib.services.factory.FactoryService;
 import org.apache.causeway.applib.services.iactnlayer.InteractionService;
 import org.apache.causeway.applib.services.repository.RepositoryService;
 import org.apache.causeway.commons.collections.Can;
 import org.apache.causeway.commons.internal.assertions._Assert;
+import org.apache.causeway.commons.internal.base._Casts;
+import org.apache.causeway.commons.internal.base._NullSafe;
 import org.apache.causeway.commons.internal.base._Oneshot;
 import org.apache.causeway.commons.internal.base._Refs;
 import org.apache.causeway.commons.internal.base._Refs.BooleanAtomicReference;
 import org.apache.causeway.commons.internal.base._Strings;
 import org.apache.causeway.testdomain.util.dto.BookDto;
+import org.apache.causeway.testdomain.util.dto.IBook;
 
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
@@ -57,13 +63,33 @@ public abstract class EntityTestFixtures implements MetamodelListener {
         install();
     }
 
+    public final <B extends IBook, T extends InventoryJaxbVm<B>> T setUpViewmodelWith3Books() {
+        final T inventoryJaxbVm =
+                _Casts.uncheckedCast(factoryService.viewModel(vmClass()));
+        val books = inventoryJaxbVm.listBooks();
+        if(_NullSafe.size(books)>0) {
+            val favoriteBook = books.get(0);
+            inventoryJaxbVm.setName("Bookstore");
+            inventoryJaxbVm.setBooks(books);
+            inventoryJaxbVm.setFavoriteBook(favoriteBook);
+            inventoryJaxbVm.setBooksForTab1(books.stream().skip(1).collect(Collectors.toList()));
+            inventoryJaxbVm.setBooksForTab2(books.stream().limit(2).collect(Collectors.toList()));
+        }
+        return inventoryJaxbVm;
+    }
+
+    public final Bookmark getInventoryJaxbVmAsBookmark() {
+        return bookmarkService.bookmarkForElseFail(setUpViewmodelWith3Books());
+    }
+
+    protected abstract Class<? extends InventoryJaxbVm<? extends IBook>> vmClass();
     protected abstract void clearRepository();
     protected abstract void setUp3Books();
 
     // -- ASSERTIONS
 
     public final void assertInventoryHasBooks(
-            final Collection<? extends HasName> products,
+            final Collection<?> products,
             final int...expectedBookIndices) {
 
         final int[] zeroBasedIndices = IntStream.of(expectedBookIndices)
@@ -77,7 +103,8 @@ public abstract class EntityTestFixtures implements MetamodelListener {
         .toArray(new String[0]);
 
         val actualBookNames = products.stream()
-                .map(HasName::getName)
+                .map(IBook.class::cast)
+                .map(IBook::getName)
                 .sorted()
                 .toArray();
 
@@ -90,6 +117,20 @@ public abstract class EntityTestFixtures implements MetamodelListener {
         assertTrue(id>=-1, ()->String.format("expected valid id; got %d", id));
     }
 
+    public final void assertPopulatedWithDefaults(
+            final InventoryJaxbVm inventoryJaxbVm) {
+        assertEquals("*InventoryJaxbVm; Bookstore; 3 products", "*" + (inventoryJaxbVm.title().substring(3)));
+        assertEquals("Bookstore", inventoryJaxbVm.getName());
+        val books = inventoryJaxbVm.listBooks();
+        assertEquals(3, books.size());
+        val favoriteBook = inventoryJaxbVm.getFavoriteBook();
+        val expectedBook = BookDto.sample();
+        assertEquals(expectedBook.getName(), favoriteBook.getName());
+        assertHasPersistenceId(favoriteBook);
+        inventoryJaxbVm.listBooks()
+        .forEach(this::assertHasPersistenceId);
+    }
+
     public static Set<String> expectedBookTitles() {
         val expectedTitles = Set.of("Dune", "The Foundation", "The Time Machine");
         return expectedTitles;
@@ -161,4 +202,6 @@ public abstract class EntityTestFixtures implements MetamodelListener {
         });
     }
 
+
+
 }
diff --git a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/fixtures/HasName.java b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/fixtures/InventoryJaxbVm.java
similarity index 67%
rename from regressiontests/stable/src/main/java/org/apache/causeway/testdomain/fixtures/HasName.java
rename to regressiontests/stable/src/main/java/org/apache/causeway/testdomain/fixtures/InventoryJaxbVm.java
index 321444e3ee..1111f8a187 100644
--- a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/fixtures/HasName.java
+++ b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/fixtures/InventoryJaxbVm.java
@@ -18,9 +18,19 @@
  */
 package org.apache.causeway.testdomain.fixtures;
 
-@FunctionalInterface
-public interface HasName {
+import java.util.Collection;
+import java.util.List;
 
-    String getName();
+import org.apache.causeway.testdomain.util.dto.IBook;
 
+public interface InventoryJaxbVm<T extends IBook> {
+    String title();
+    String getName();
+    List<T> listBooks();
+    T getFavoriteBook();
+    void setName(String string);
+    void setFavoriteBook(T favoriteBook);
+    void setBooks(Collection<T> books);
+    void setBooksForTab1(Collection<T> books);
+    void setBooksForTab2(Collection<T> books);
 }
diff --git a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jdo/JdoInventoryJaxbVm.java b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jdo/JdoInventoryJaxbVm.java
index 17c12a6e87..e5aeba1bad 100644
--- a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jdo/JdoInventoryJaxbVm.java
+++ b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jdo/JdoInventoryJaxbVm.java
@@ -42,6 +42,7 @@ import org.apache.causeway.applib.annotation.ObjectSupport;
 import org.apache.causeway.applib.annotation.Optionality;
 import org.apache.causeway.applib.annotation.Property;
 import org.apache.causeway.applib.services.repository.RepositoryService;
+import org.apache.causeway.testdomain.fixtures.InventoryJaxbVm;
 import org.apache.causeway.testdomain.jdo.entities.JdoBook;
 import org.apache.causeway.testdomain.jdo.entities.JdoInventory;
 import org.apache.causeway.testdomain.jdo.entities.JdoProduct;
@@ -63,11 +64,13 @@ import lombok.Setter;
         aliased={
             "testdomain.jdo.JdoInventoryJaxbVmAlias"
         })
-public class JdoInventoryJaxbVm {
+public class JdoInventoryJaxbVm
+implements InventoryJaxbVm<JdoBook> {
 
     @XmlTransient @Inject
     private RepositoryService repository;
 
+    @Override
     @ObjectSupport public String title() {
         return String.format("%s; %s; %d products",
                 this.getClass().getSimpleName(), getName(), listProducts().size());
@@ -83,6 +86,7 @@ public class JdoInventoryJaxbVm {
         return repository.allInstances(JdoProduct.class);
     }
 
+    @Override
     @Action
     public List<JdoBook> listBooks() {
         return repository.allInstances(JdoBook.class);
diff --git a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jdo/JdoTestFixtures.java b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jdo/JdoTestFixtures.java
index 3d1192d5ce..20658b2e6c 100644
--- a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jdo/JdoTestFixtures.java
+++ b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jdo/JdoTestFixtures.java
@@ -20,19 +20,18 @@ package org.apache.causeway.testdomain.jdo;
 
 import java.util.SortedSet;
 import java.util.TreeSet;
-import java.util.stream.Collectors;
 
 import org.springframework.stereotype.Service;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import org.apache.causeway.applib.services.bookmark.Bookmark;
-import org.apache.causeway.commons.internal.base._NullSafe;
 import org.apache.causeway.testdomain.fixtures.EntityTestFixtures;
+import org.apache.causeway.testdomain.fixtures.InventoryJaxbVm;
 import org.apache.causeway.testdomain.jdo.entities.JdoBook;
 import org.apache.causeway.testdomain.jdo.entities.JdoInventory;
 import org.apache.causeway.testdomain.jdo.entities.JdoProduct;
 import org.apache.causeway.testdomain.util.dto.BookDto;
+import org.apache.causeway.testdomain.util.dto.IBook;
 
 import lombok.val;
 
@@ -45,38 +44,9 @@ public class JdoTestFixtures extends EntityTestFixtures {
                 "Sample Publisher"));
     }
 
-    public Bookmark getJdoInventoryJaxbVmAsBookmark() {
-        return bookmarkService.bookmarkForElseFail(setUpViewmodelWith3Books());
-    }
-
-    public JdoInventoryJaxbVm setUpViewmodelWith3Books() {
-        val inventoryJaxbVm = factoryService.viewModel(new JdoInventoryJaxbVm());
-        val books = inventoryJaxbVm.listBooks();
-        if(_NullSafe.size(books)>0) {
-            val favoriteBook = books.get(0);
-            inventoryJaxbVm.setName("Bookstore");
-            inventoryJaxbVm.setBooks(books);
-            inventoryJaxbVm.setFavoriteBook(favoriteBook);
-            inventoryJaxbVm.setBooksForTab1(books.stream().skip(1).collect(Collectors.toList()));
-            inventoryJaxbVm.setBooksForTab2(books.stream().limit(2).collect(Collectors.toList()));
-        }
-        return inventoryJaxbVm;
-    }
-
-    // -- ASSERTIONS
-
-    public void assertPopulatedWithDefaults(
-            final JdoInventoryJaxbVm inventoryJaxbVm) {
-        assertEquals("JdoInventoryJaxbVm; Bookstore; 3 products", inventoryJaxbVm.title());
-        assertEquals("Bookstore", inventoryJaxbVm.getName());
-        val books = inventoryJaxbVm.listBooks();
-        assertEquals(3, books.size());
-        val favoriteBook = inventoryJaxbVm.getFavoriteBook();
-        val expectedBook = BookDto.sample();
-        assertEquals(expectedBook.getName(), favoriteBook.getName());
-        assertHasPersistenceId(favoriteBook);
-        inventoryJaxbVm.listBooks()
-        .forEach(this::assertHasPersistenceId);
+    @Override
+    protected Class<? extends InventoryJaxbVm<? extends IBook>> vmClass() {
+        return JdoInventoryJaxbVm.class;
     }
 
     // -- HELPER
diff --git a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jdo/entities/JdoProduct.java b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jdo/entities/JdoProduct.java
index 34f552d834..dfc882b72c 100644
--- a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jdo/entities/JdoProduct.java
+++ b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jdo/entities/JdoProduct.java
@@ -39,7 +39,6 @@ import org.apache.causeway.applib.annotation.MemberSupport;
 import org.apache.causeway.applib.annotation.Property;
 import org.apache.causeway.applib.annotation.Publishing;
 import org.apache.causeway.commons.internal.base._Strings;
-import org.apache.causeway.testdomain.fixtures.HasName;
 
 import lombok.AccessLevel;
 import lombok.AllArgsConstructor;
@@ -60,9 +59,7 @@ import lombok.ToString;
 @AllArgsConstructor(access = AccessLevel.PROTECTED)
 @ToString
 public class JdoProduct
-implements
-    HasName,
-    Comparable<JdoProduct> {
+implements Comparable<JdoProduct> {
 
     public String title() {
         return toString();
diff --git a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jpa/JpaInventoryJaxbVm.java b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jpa/JpaInventoryJaxbVm.java
index 6214c05b93..f679745596 100644
--- a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jpa/JpaInventoryJaxbVm.java
+++ b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jpa/JpaInventoryJaxbVm.java
@@ -42,6 +42,7 @@ import org.apache.causeway.applib.annotation.ObjectSupport;
 import org.apache.causeway.applib.annotation.Optionality;
 import org.apache.causeway.applib.annotation.Property;
 import org.apache.causeway.applib.services.repository.RepositoryService;
+import org.apache.causeway.testdomain.fixtures.InventoryJaxbVm;
 import org.apache.causeway.testdomain.jpa.entities.JpaBook;
 import org.apache.causeway.testdomain.jpa.entities.JpaInventory;
 import org.apache.causeway.testdomain.jpa.entities.JpaProduct;
@@ -60,11 +61,13 @@ import lombok.Setter;
 @Named("testdomain.jpa.JpaInventoryJaxbVm")
 @DomainObject(
         nature=Nature.VIEW_MODEL)
-public class JpaInventoryJaxbVm {
+public class JpaInventoryJaxbVm
+implements InventoryJaxbVm<JpaBook> {
 
     @XmlTransient @Inject
     private RepositoryService repository;
 
+    @Override
     @ObjectSupport public String title() {
         return String.format("%s; %s; %d products",
                 this.getClass().getSimpleName(), getName(), listProducts().size());
@@ -80,6 +83,7 @@ public class JpaInventoryJaxbVm {
         return repository.allInstances(JpaProduct.class);
     }
 
+    @Override
     @Action
     public List<JpaBook> listBooks() {
         return repository.allInstances(JpaBook.class);
diff --git a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jpa/JpaTestFixtures.java b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jpa/JpaTestFixtures.java
index 802b59a0c0..d615d7dec7 100644
--- a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jpa/JpaTestFixtures.java
+++ b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jpa/JpaTestFixtures.java
@@ -20,19 +20,18 @@ package org.apache.causeway.testdomain.jpa;
 
 import java.util.SortedSet;
 import java.util.TreeSet;
-import java.util.stream.Collectors;
 
 import org.springframework.stereotype.Service;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-import org.apache.causeway.applib.services.bookmark.Bookmark;
-import org.apache.causeway.commons.internal.base._NullSafe;
 import org.apache.causeway.testdomain.fixtures.EntityTestFixtures;
+import org.apache.causeway.testdomain.fixtures.InventoryJaxbVm;
 import org.apache.causeway.testdomain.jpa.entities.JpaBook;
 import org.apache.causeway.testdomain.jpa.entities.JpaInventory;
 import org.apache.causeway.testdomain.jpa.entities.JpaProduct;
 import org.apache.causeway.testdomain.util.dto.BookDto;
+import org.apache.causeway.testdomain.util.dto.IBook;
 
 import lombok.val;
 
@@ -45,38 +44,9 @@ public class JpaTestFixtures extends EntityTestFixtures {
                 "Sample Publisher"));
     }
 
-    public Bookmark getJpaInventoryJaxbVmAsBookmark() {
-        return bookmarkService.bookmarkForElseFail(setUpViewmodelWith3Books());
-    }
-
-    public JpaInventoryJaxbVm setUpViewmodelWith3Books() {
-        val inventoryJaxbVm = factoryService.viewModel(new JpaInventoryJaxbVm());
-        val books = inventoryJaxbVm.listBooks();
-        if(_NullSafe.size(books)>0) {
-            val favoriteBook = books.get(0);
-            inventoryJaxbVm.setName("Bookstore");
-            inventoryJaxbVm.setBooks(books);
-            inventoryJaxbVm.setFavoriteBook(favoriteBook);
-            inventoryJaxbVm.setBooksForTab1(books.stream().skip(1).collect(Collectors.toList()));
-            inventoryJaxbVm.setBooksForTab2(books.stream().limit(2).collect(Collectors.toList()));
-        }
-        return inventoryJaxbVm;
-    }
-
-    // -- ASSERTIONS
-
-    public void assertPopulatedWithDefaults(
-            final JpaInventoryJaxbVm inventoryJaxbVm) {
-        assertEquals("JpaInventoryJaxbVm; Bookstore; 3 products", inventoryJaxbVm.title());
-        assertEquals("Bookstore", inventoryJaxbVm.getName());
-        val books = inventoryJaxbVm.listBooks();
-        assertEquals(3, books.size());
-        val favoriteBook = inventoryJaxbVm.getFavoriteBook();
-        val expectedBook = BookDto.sample();
-        assertEquals(expectedBook.getName(), favoriteBook.getName());
-        assertHasPersistenceId(favoriteBook);
-        inventoryJaxbVm.listBooks()
-        .forEach(this::assertHasPersistenceId);
+    @Override
+    protected Class<? extends InventoryJaxbVm<? extends IBook>> vmClass() {
+        return JpaInventoryJaxbVm.class;
     }
 
     // -- FIXTURES
@@ -105,4 +75,6 @@ public class JpaTestFixtures extends EntityTestFixtures {
         repository.persistAndFlush(inventory);
     }
 
+
+
 }
diff --git a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jpa/entities/JpaProduct.java b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jpa/entities/JpaProduct.java
index ccfa660388..4e761d960a 100644
--- a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jpa/entities/JpaProduct.java
+++ b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/jpa/entities/JpaProduct.java
@@ -43,7 +43,6 @@ import org.apache.causeway.applib.annotation.ObjectSupport;
 import org.apache.causeway.applib.annotation.Property;
 import org.apache.causeway.applib.annotation.Publishing;
 import org.apache.causeway.commons.internal.base._Strings;
-import org.apache.causeway.testdomain.fixtures.HasName;
 
 import lombok.AccessLevel;
 import lombok.AllArgsConstructor;
@@ -64,9 +63,7 @@ import lombok.ToString;
 @AllArgsConstructor(access = AccessLevel.PROTECTED)
 @ToString
 public class JpaProduct
-implements
-    HasName,
-    Comparable<JpaProduct> {
+implements Comparable<JpaProduct> {
 
     @ObjectSupport public String title() {
         return toString();
diff --git a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/util/rest/RestEndpointService.java b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/util/rest/RestEndpointService.java
index 7dfbd89da8..4849cf4085 100644
--- a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/util/rest/RestEndpointService.java
+++ b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/util/rest/RestEndpointService.java
@@ -213,7 +213,7 @@ public class RestEndpointService {
     public Try<Can<JdoBook>> getBooksFromInventoryAsJaxbVm(final RestfulClient client) {
 
         val objectId = interactionService.callAnonymous(
-                ()->jdoTestFixtures.getJdoInventoryJaxbVmAsBookmark().getIdentifier());
+                ()->jdoTestFixtures.getInventoryJaxbVmAsBookmark().getIdentifier());
 
         // using domain object alias ...
         val request = newInvocationBuilder(client,