You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/06/15 05:00:26 UTC

[isis] branch master updated: ISIS-3049: add regr. test to verify Action annotation with choicesFrom provides choices

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 ba7c5a40c7 ISIS-3049: add regr. test to verify Action annotation with choicesFrom provides choices
ba7c5a40c7 is described below

commit ba7c5a40c7fbd651c920dfde148fff86df5d9aef
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Jun 15 07:00:19 2022 +0200

    ISIS-3049: add regr. test to verify Action annotation with choicesFrom
    provides choices
---
 .../testdomain/interact/ActionInteractionTest.java | 27 ++++++++++
 .../model/interaction/InteractionDemo.java         | 19 ++++----
 .../model/interaction/InteractionDemoItem.java     | 57 ----------------------
 3 files changed, 37 insertions(+), 66 deletions(-)

diff --git a/regressiontests/stable-interact/src/test/java/org/apache/isis/testdomain/interact/ActionInteractionTest.java b/regressiontests/stable-interact/src/test/java/org/apache/isis/testdomain/interact/ActionInteractionTest.java
index 67ad257387..9b504e2b20 100644
--- a/regressiontests/stable-interact/src/test/java/org/apache/isis/testdomain/interact/ActionInteractionTest.java
+++ b/regressiontests/stable-interact/src/test/java/org/apache/isis/testdomain/interact/ActionInteractionTest.java
@@ -372,6 +372,33 @@ class ActionInteractionTest extends InteractionTestAbstract {
         assertComponentWiseUnwrappedEquals(expectedChoices, actualChoices);
     }
 
+    @Test
+    void actionAnnotation_withChoicesFrom_shouldProvideChoices() {
+
+        val actionInteraction = startActionInteractionOn(InteractionDemo.class, "doSomethingWithItems", Where.OBJECT_FORMS)
+                .checkVisibility()
+                .checkUsability();
+
+        assertTrue(actionInteraction.getManagedAction().isPresent(), "action is expected to be usable");
+
+        val managedAction = actionInteraction.getManagedAction().get();
+        val pendingArgs = managedAction.startParameterNegotiation();
+
+        val param0Choices = pendingArgs.getObservableParamChoices(0); // observable
+        val param1Choices = pendingArgs.getObservableParamChoices(1); // observable
+
+        assertFalse(param0Choices.getValue().isEmpty());
+        assertFalse(param1Choices.getValue().isEmpty());
+
+        assertComponentWiseUnwrappedEquals(
+                new InteractionDemo().getItems(),
+                param0Choices.getValue());
+
+        assertComponentWiseUnwrappedEquals(
+                new InteractionDemo().getItems(),
+                param1Choices.getValue());
+    }
+
     @Test
     void shouldProvideParameterBinding() {
 
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/interaction/InteractionDemo.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/interaction/InteractionDemo.java
index 06083cdaf2..98500c84d1 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/interaction/InteractionDemo.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/interaction/InteractionDemo.java
@@ -44,7 +44,6 @@ import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.commons.internal.base._Lazy;
 import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.testdomain.model.interaction.InteractionDemoItem.CalendarEntry;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -93,10 +92,10 @@ public class InteractionDemo {
     @XmlTransient
     private final _Lazy<List<InteractionDemoItem>> lazyItems = _Lazy.threadSafe(()->
         List.of(
-                InteractionDemoItem.of("first", CalendarEntry.randomSample()),
-                InteractionDemoItem.of("second", CalendarEntry.randomSample()),
-                InteractionDemoItem.of("third", CalendarEntry.randomSample()),
-                InteractionDemoItem.of("last", CalendarEntry.randomSample()))
+                InteractionDemoItem.of("first"),
+                InteractionDemoItem.of("second"),
+                InteractionDemoItem.of("third"),
+                InteractionDemoItem.of("last"))
     );
 
     @Collection
@@ -109,12 +108,14 @@ public class InteractionDemo {
     @Action(choicesFrom = "items")
     @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
     public InteractionDemo doSomethingWithItems(
+            // choicesFrom = "items"
+            final Set<InteractionDemoItem> items0,
 
-            // bulk selection
-            final Set<InteractionDemoItem> items) {
+            // choicesFrom = "items"
+            final Set<InteractionDemoItem> items1) {
 
-        if(items!=null) {
-            items.forEach(item->System.out.println(item.getName()));
+        if(items0!=null) {
+            items0.forEach(item->System.out.println(item.getName()));
         }
         return this;
     }
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/interaction/InteractionDemoItem.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/interaction/InteractionDemoItem.java
index 9e13fed9a1..fbbdac648b 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/interaction/InteractionDemoItem.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/interaction/InteractionDemoItem.java
@@ -20,11 +20,6 @@ package org.apache.isis.testdomain.model.interaction;
 
 import java.io.Serializable;
 import java.time.Duration;
-import java.time.Instant;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.time.temporal.ChronoUnit;
-import java.util.concurrent.ThreadLocalRandom;
 
 import javax.inject.Named;
 
@@ -34,16 +29,13 @@ import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.ObjectSupport;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
-import org.apache.isis.applib.annotation.Value;
 
 import lombok.AllArgsConstructor;
-import lombok.Builder;
 import lombok.EqualsAndHashCode;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 import lombok.ToString;
-import lombok.val;
 
 @DomainObject(nature=Nature.VIEW_MODEL)
 @Named("testdomain.InteractionDemoItem")
@@ -62,55 +54,6 @@ public class InteractionDemoItem implements Serializable {
     @PropertyLayout(describedAs="The name of this 'DemoItem'.")
     @Getter @Setter private String name;
 
-    @Property(editing = Editing.DISABLED)
-    @ToString.Exclude
-    @Getter @Setter private CalendarEntry calendarEntry;
-
-    // demo tuple type
-    @Value
-    @Named("testdomain.InteractionDemoItem.CalendarEntry")
-    @lombok.Value @Builder
-    public static class CalendarEntry implements Serializable {
-
-        private static final long serialVersionUID = 1L;
-
-        // presentation
-        LocalDateTime instant;
-        Duration duration;
-        String title;
-        String description;
-
-        // storage representation / dto
-        @lombok.Data @lombok.Builder
-        public static class Dto {
-            long instant;
-            long duration;
-            ChronoUnit durationUnit;
-            String title;
-            String description;
-        }
-
-        public static CalendarEntry randomSample() {
-            val rand = ThreadLocalRandom.current();
-            val dto = Dto.builder()
-            .instant(rand.nextLong())
-            .duration(rand.nextLong(600))
-            .durationUnit(ChronoUnit.MINUTES)
-            .title("title-" + Integer.toHexString(rand.nextInt()))
-            .description("description-" + Integer.toHexString(rand.nextInt()))
-            .build();
-            return fromDto(dto);
-        }
-
-        public static CalendarEntry fromDto(final CalendarEntry.Dto dto) {
-            return CalendarEntry.builder()
-                    .instant(LocalDateTime.ofInstant(Instant.ofEpochMilli(dto.instant), ZoneId.systemDefault()))
-                    .duration(Duration.of(dto.duration, dto.durationUnit))
-                    .build();
-        }
-
-    }
-
     // table row decomposition
     @DomainObject(nature=Nature.VIEW_MODEL)
     @Named("testdomain.InteractionDemoItem.Projection")