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 <ahu...@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")