You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2015/01/22 13:40:31 UTC
[2/6] isis git commit: ISIS-970: unit testing of @Action annotation
http://git-wip-us.apache.org/repos/asf/isis/blob/18d470c3/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/InteractionHelper_newCollectionInteractionEvent_forAdd.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/InteractionHelper_newCollectionInteractionEvent_forAdd.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/InteractionHelper_newCollectionInteractionEvent_forAdd.java
deleted file mode 100644
index 002c91a..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/InteractionHelper_newCollectionInteractionEvent_forAdd.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.isis.core.metamodel.facets;
-
-import java.util.Set;
-import org.junit.Test;
-import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.services.eventbus.AbstractDomainEvent;
-import org.apache.isis.applib.services.eventbus.CollectionAddedToEvent;
-import org.apache.isis.applib.services.eventbus.CollectionDomainEvent;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-public class InteractionHelper_newCollectionInteractionEvent_forAdd {
-
- public static class SomeDomainObject {
- public Set<SomeReferencedObject> getReferences() { return null; }
- }
- public static class SomeReferencedObject {}
-
- public static class SomeDomainObjectCollectionEvent extends CollectionDomainEvent<SomeDomainObject, SomeReferencedObject> {
- private static final long serialVersionUID = 1L;
- public SomeDomainObjectCollectionEvent(SomeDomainObject source, Identifier identifier, Of of, SomeReferencedObject value) {
- super(source, identifier, of, value);
- }
- }
-
- @Test
- public void defaultEventType() throws Exception {
- final SomeDomainObject sdo = new SomeDomainObject();
- final SomeReferencedObject other = new SomeReferencedObject();
- final Identifier identifier = Identifier.propertyOrCollectionIdentifier(SomeDomainObject.class, "references");
-
- final CollectionDomainEvent<Object, Object> ev = new InteractionHelper(null).newCollectionDomainEvent(
- CollectionDomainEvent.Default.class, null, identifier, sdo, CollectionDomainEvent.Of.ADD_TO, other);
- assertThat(ev.getSource(), is((Object)sdo));
- assertThat(ev.getIdentifier(), is(identifier));
- assertThat(ev.getOf(), is(CollectionDomainEvent.Of.ADD_TO));
- assertThat(ev.getValue(), is((Object)other));
- }
-
- @Test
- public void collectionAddedToDefaultEventType() throws Exception {
- final SomeDomainObject sdo = new SomeDomainObject();
- final SomeReferencedObject other = new SomeReferencedObject();
- final Identifier identifier = Identifier.propertyOrCollectionIdentifier(SomeDomainObject.class, "references");
-
- final CollectionDomainEvent<Object, Object> ev = new InteractionHelper(null).newCollectionDomainEvent(
- CollectionAddedToEvent.Default.class, AbstractDomainEvent.Phase.EXECUTED, identifier, sdo, CollectionDomainEvent.Of.ADD_TO, other);
- assertThat(ev.getSource(), is((Object)sdo));
- assertThat(ev.getIdentifier(), is(identifier));
- assertThat(ev.getOf(), is(CollectionDomainEvent.Of.ADD_TO));
- assertThat(ev.getValue(), is((Object)other));
- }
-
- @Test
- public void customEventType() throws Exception {
- final SomeDomainObject sdo = new SomeDomainObject();
- final SomeReferencedObject other = new SomeReferencedObject();
- final Identifier identifier = Identifier.propertyOrCollectionIdentifier(SomeDomainObject.class, "references");
-
- final CollectionDomainEvent<SomeDomainObject, SomeReferencedObject> ev = new InteractionHelper(null).newCollectionDomainEvent(
- SomeDomainObjectCollectionEvent.class, AbstractDomainEvent.Phase.EXECUTED, identifier, sdo, CollectionDomainEvent.Of.ADD_TO, other);
- assertThat(ev.getSource(), is(sdo));
- assertThat(ev.getIdentifier(), is(identifier));
- assertThat(ev.getOf(), is(CollectionDomainEvent.Of.ADD_TO));
- assertThat(ev.getValue(), is(other));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/18d470c3/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/InteractionHelper_newCollectionInteractionEvent_forRemove.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/InteractionHelper_newCollectionInteractionEvent_forRemove.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/InteractionHelper_newCollectionInteractionEvent_forRemove.java
deleted file mode 100644
index 16a7c8b..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/InteractionHelper_newCollectionInteractionEvent_forRemove.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.isis.core.metamodel.facets;
-
-import java.util.Set;
-import org.junit.Test;
-import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.services.eventbus.AbstractDomainEvent;
-import org.apache.isis.applib.services.eventbus.CollectionDomainEvent;
-import org.apache.isis.applib.services.eventbus.CollectionRemovedFromEvent;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-public class InteractionHelper_newCollectionInteractionEvent_forRemove {
-
- public static class SomeDomainObject {
- public Set<SomeReferencedObject> getReferences() { return null; }
- }
- public static class SomeReferencedObject {}
-
- public static class SomeDomainObjectCollectionRemovedFromEvent extends CollectionDomainEvent<SomeDomainObject, SomeReferencedObject> {
- private static final long serialVersionUID = 1L;
- public SomeDomainObjectCollectionRemovedFromEvent(SomeDomainObject source, Identifier identifier, Of of, SomeReferencedObject value) {
- super(source, identifier, of, value);
- }
- }
-
- @Test
- public void defaultEventType() throws Exception {
- SomeDomainObject sdo = new SomeDomainObject();
- SomeReferencedObject other = new SomeReferencedObject();
- Identifier identifier = Identifier.propertyOrCollectionIdentifier(SomeDomainObject.class, "references");
-
- final CollectionDomainEvent<Object, Object> ev = new InteractionHelper(null).newCollectionDomainEvent(
- CollectionRemovedFromEvent.Default.class, AbstractDomainEvent.Phase.EXECUTED, identifier, sdo, CollectionDomainEvent.Of.REMOVE_FROM, other);
- assertThat(ev.getSource(), is((Object)sdo));
- assertThat(ev.getIdentifier(), is(identifier));
- assertThat(ev.getOf(), is(CollectionDomainEvent.Of.REMOVE_FROM));
- assertThat(ev.getValue(), is((Object)other));
- }
-
- @Test
- public void collectionRemovedFromDefaultEventType() throws Exception {
- SomeDomainObject sdo = new SomeDomainObject();
- SomeReferencedObject other = new SomeReferencedObject();
- Identifier identifier = Identifier.propertyOrCollectionIdentifier(SomeDomainObject.class, "references");
-
- final CollectionDomainEvent<Object, Object> ev = new InteractionHelper(null).newCollectionDomainEvent(
- CollectionRemovedFromEvent.Default.class, AbstractDomainEvent.Phase.EXECUTED, identifier, sdo, CollectionDomainEvent.Of.REMOVE_FROM, other);
- assertThat(ev.getSource(), is((Object)sdo));
- assertThat(ev.getIdentifier(), is(identifier));
- assertThat(ev.getOf(), is(CollectionDomainEvent.Of.REMOVE_FROM));
- assertThat(ev.getValue(), is((Object)other));
- }
-
- @Test
- public void customEventType() throws Exception {
- SomeDomainObject sdo = new SomeDomainObject();
- SomeReferencedObject other = new SomeReferencedObject();
- Identifier identifier = Identifier.propertyOrCollectionIdentifier(SomeDomainObject.class, "references");
-
- final CollectionDomainEvent<SomeDomainObject, SomeReferencedObject> ev = new InteractionHelper(null).newCollectionDomainEvent(
- SomeDomainObjectCollectionRemovedFromEvent.class, AbstractDomainEvent.Phase.EXECUTED, identifier, sdo, CollectionDomainEvent.Of.REMOVE_FROM, other);
- assertThat(ev.getSource(), is(sdo));
- assertThat(ev.getIdentifier(), is(identifier));
- assertThat(ev.getOf(), is(CollectionDomainEvent.Of.REMOVE_FROM));
- assertThat(ev.getValue(), is(other));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/18d470c3/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/InteractionHelper_newPropertyInteractionEvent_forClear.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/InteractionHelper_newPropertyInteractionEvent_forClear.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/InteractionHelper_newPropertyInteractionEvent_forClear.java
deleted file mode 100644
index a087c4f..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/InteractionHelper_newPropertyInteractionEvent_forClear.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.isis.core.metamodel.facets;
-
-import org.joda.time.LocalDate;
-import org.junit.Test;
-import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.services.eventbus.PropertyDomainEvent;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertThat;
-
-public class InteractionHelper_newPropertyInteractionEvent_forClear {
-
- public static class SomeDomainObject {}
-
- public static class SomeDatePropertyChangedEvent extends PropertyDomainEvent<SomeDomainObject, LocalDate> {
- private static final long serialVersionUID = 1L;
- public SomeDatePropertyChangedEvent(SomeDomainObject source, Identifier identifier, LocalDate oldValue, LocalDate newValue) {
- super(source, identifier, oldValue, newValue);
- }
- }
-
- @Test
- public void defaultEventType() throws Exception {
-
- SomeDomainObject sdo = new SomeDomainObject();
- Identifier identifier = Identifier.propertyOrCollectionIdentifier(SomeDomainObject.class, "someDateProperty");
- LocalDate oldValue = new LocalDate(2013,4,1);
- LocalDate newValue = null;
-
- final PropertyDomainEvent<Object, Object> ev =
- new InteractionHelper(null).newPropertyDomainEvent(PropertyDomainEvent.Default.class, identifier, sdo, oldValue, newValue);
- assertThat(ev.getSource(), is((Object)sdo));
- assertThat(ev.getIdentifier(), is(identifier));
- assertThat(ev.getOldValue(), is((Object)oldValue));
- assertThat(ev.getNewValue(), is((Object)newValue));
- }
-
-
- @Test
- public void customEventType() throws Exception {
-
- SomeDomainObject sdo = new SomeDomainObject();
- Identifier identifier = Identifier.propertyOrCollectionIdentifier(SomeDomainObject.class, "someDateProperty");
- LocalDate oldValue = new LocalDate(2013,4,1);
- LocalDate newValue = null;
-
- final PropertyDomainEvent<SomeDomainObject, LocalDate> ev =
- new InteractionHelper(null).newPropertyDomainEvent(SomeDatePropertyChangedEvent.class, identifier, sdo, oldValue, newValue);
- assertThat(ev.getSource(), is(sdo));
- assertThat(ev.getIdentifier(), is(identifier));
- assertThat(ev.getOldValue(), is(oldValue));
- assertThat(ev.getNewValue(), is(nullValue()));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/18d470c3/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/InteractionHelper_newPropertyInteractionEvent_forModify.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/InteractionHelper_newPropertyInteractionEvent_forModify.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/InteractionHelper_newPropertyInteractionEvent_forModify.java
deleted file mode 100644
index 8defaf1..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/InteractionHelper_newPropertyInteractionEvent_forModify.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.isis.core.metamodel.facets;
-
-import org.joda.time.LocalDate;
-import org.junit.Test;
-import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.services.eventbus.PropertyDomainEvent;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
-public class InteractionHelper_newPropertyInteractionEvent_forModify {
-
- public static class SomeDomainObject {}
-
- public static class SomeDatePropertyChangedEvent extends PropertyDomainEvent<SomeDomainObject, LocalDate> {
- private static final long serialVersionUID = 1L;
- public SomeDatePropertyChangedEvent(SomeDomainObject source, Identifier identifier, LocalDate oldValue, LocalDate newValue) {
- super(source, identifier, oldValue, newValue);
- }
- }
-
- @Test
- public void defaultEventType() throws Exception {
-
- SomeDomainObject sdo = new SomeDomainObject();
- Identifier identifier = Identifier.propertyOrCollectionIdentifier(SomeDomainObject.class, "someDateProperty");
- LocalDate oldValue = new LocalDate(2013,4,1);
- LocalDate newValue = new LocalDate(2013,5,2);
-
- final PropertyDomainEvent<Object, Object> ev =
- new InteractionHelper(null).newPropertyDomainEvent(PropertyDomainEvent.Default.class, identifier, sdo, oldValue, newValue);
- assertThat(ev.getSource(), is((Object)sdo));
- assertThat(ev.getIdentifier(), is(identifier));
- assertThat(ev.getOldValue(), is((Object)oldValue));
- assertThat(ev.getNewValue(), is((Object)newValue));
- }
-
-
- @Test
- public void customEventType() throws Exception {
-
- SomeDomainObject sdo = new SomeDomainObject();
- Identifier identifier = Identifier.propertyOrCollectionIdentifier(SomeDomainObject.class, "someDateProperty");
- LocalDate oldValue = new LocalDate(2013,4,1);
- LocalDate newValue = new LocalDate(2013,5,2);
-
- final PropertyDomainEvent<SomeDomainObject, LocalDate> ev =
- new InteractionHelper(null).newPropertyDomainEvent(SomeDatePropertyChangedEvent.class, identifier, sdo, oldValue, newValue);
- assertThat(ev.getSource(), is(sdo));
- assertThat(ev.getIdentifier(), is(identifier));
- assertThat(ev.getOldValue(), is(oldValue));
- assertThat(ev.getNewValue(), is(newValue));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/18d470c3/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
index 858d888..29c26e6 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
@@ -42,7 +42,6 @@ import org.apache.isis.core.metamodel.facets.actions.validate.method.ActionValid
import org.apache.isis.core.metamodel.facets.actions.validate.method.ActionValidationFacetViaMethodFactory;
import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet;
import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacetAbstract;
-import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
import org.apache.isis.core.metamodel.facets.all.named.NamedFacetAbstract;
import org.apache.isis.core.metamodel.facets.members.describedas.staticmethod.DescribedAsFacetStaticMethodFactory;
@@ -52,10 +51,10 @@ import org.apache.isis.core.metamodel.facets.members.disabled.forsession.Disable
import org.apache.isis.core.metamodel.facets.members.disabled.forsession.DisableForSessionFacetViaMethod;
import org.apache.isis.core.metamodel.facets.members.disabled.forsession.DisableForSessionFacetViaMethodFactory;
import org.apache.isis.core.metamodel.facets.members.disabled.staticmethod.DisabledFacetStaticMethodFacetFactory;
-import org.apache.isis.core.metamodel.facets.members.hidden.HiddenFacetAbstract;
import org.apache.isis.core.metamodel.facets.members.hidden.forsession.HideForSessionFacet;
import org.apache.isis.core.metamodel.facets.members.hidden.forsession.HideForSessionFacetViaMethod;
import org.apache.isis.core.metamodel.facets.members.hidden.forsession.HideForSessionFacetViaMethodFactory;
+import org.apache.isis.core.metamodel.facets.members.hidden.staticmethod.HiddenFacetOnStaticMethod;
import org.apache.isis.core.metamodel.facets.members.hidden.staticmethod.HiddenFacetStaticMethodFactory;
import org.apache.isis.core.metamodel.facets.members.named.staticmethod.NamedFacetStaticMethodFactory;
import org.apache.isis.core.metamodel.facets.param.autocomplete.ActionParameterAutoCompleteFacet;
@@ -441,11 +440,9 @@ public class ActionMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
facetFactory.process(new ProcessMethodContext(CustomerStatic.class, null, null, actionMethod, methodRemover, facetedMethod));
- final Facet facet = facetedMethod.getFacet(HiddenFacet.class);
+ final HiddenFacetOnStaticMethod facet = facetedMethod.getFacet(HiddenFacetOnStaticMethod.class);
assertNotNull(facet);
- assertTrue(facet instanceof HiddenFacetAbstract);
- final HiddenFacetAbstract hiddenFacetAbstract = (HiddenFacetAbstract) facet;
- assertEquals(When.ALWAYS, hiddenFacetAbstract.when());
+ assertEquals(When.ALWAYS, facet.when());
assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(alwaysHideMethod));
}
@@ -460,7 +457,7 @@ public class ActionMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
facetFactory.process(new ProcessMethodContext(CustomerStatic.class, null, null, actionMethod, methodRemover, facetedMethod));
- assertNull(facetedMethod.getFacet(HiddenFacet.class));
+ assertNull(facetedMethod.getFacet(HiddenFacetOnStaticMethod.class));
assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(alwaysHideMethod));
}
http://git-wip-us.apache.org/repos/asf/isis/blob/18d470c3/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java
index abe3955..499e9f2 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java
@@ -20,6 +20,7 @@
package org.apache.isis.core.metamodel.facets.actions.action;
import java.lang.reflect.Method;
+import java.util.List;
import java.util.UUID;
import org.jmock.Expectations;
import org.jmock.auto.Mock;
@@ -30,15 +31,32 @@ import org.junit.Test;
import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.annotation.Action;
import org.apache.isis.applib.annotation.ActionInteraction;
+import org.apache.isis.applib.annotation.ActionSemantics;
import org.apache.isis.applib.annotation.ActionSemantics.Of;
+import org.apache.isis.applib.annotation.CommandExecuteIn;
+import org.apache.isis.applib.annotation.CommandPersistence;
+import org.apache.isis.applib.annotation.CommandReification;
+import org.apache.isis.applib.annotation.Idempotent;
+import org.apache.isis.applib.annotation.InvokeOn;
import org.apache.isis.applib.annotation.PostsActionInvokedEvent;
+import org.apache.isis.applib.annotation.PublishedAction;
+import org.apache.isis.applib.annotation.PublishingPayloadFactoryForAction;
+import org.apache.isis.applib.annotation.QueryOnly;
+import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.services.HasTransactionId;
import org.apache.isis.applib.services.eventbus.ActionDomainEvent;
import org.apache.isis.applib.services.eventbus.ActionInteractionEvent;
import org.apache.isis.applib.services.eventbus.ActionInvokedEvent;
+import org.apache.isis.applib.services.publish.EventPayload;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryJUnit4TestCase;
import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
+import org.apache.isis.core.metamodel.facets.actions.action.command.CommandFacetForActionAnnotation;
+import org.apache.isis.core.metamodel.facets.actions.action.command.CommandFacetForActionAnnotationAsConfigured;
+import org.apache.isis.core.metamodel.facets.actions.action.command.CommandFacetForCommandAnnotation;
+import org.apache.isis.core.metamodel.facets.actions.action.command.CommandFacetFromConfiguration;
+import org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation;
import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet;
import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetDefault;
import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetForActionAnnotation;
@@ -48,12 +66,25 @@ import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInv
import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromActionInteractionAnnotation;
import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromDefault;
import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForPostsActionInvokedEventAnnotation;
+import org.apache.isis.core.metamodel.facets.actions.action.publishing.PublishedActionFacetForActionAnnotation;
+import org.apache.isis.core.metamodel.facets.actions.action.publishing.PublishedActionFacetForPublishedActionAnnotation;
+import org.apache.isis.core.metamodel.facets.actions.action.publishing.PublishedActionFacetFromConfiguration;
+import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
import org.apache.isis.core.metamodel.facets.actions.command.CommandFacet;
-import org.apache.isis.core.metamodel.facets.actions.command.CommandFacetAbstract;
+import org.apache.isis.core.metamodel.facets.actions.prototype.PrototypeFacet;
+import org.apache.isis.core.metamodel.facets.actions.publish.PublishedActionFacet;
+import org.apache.isis.core.metamodel.facets.actions.publish.PublishedActionFacetAbstract;
+import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacetAbstract;
+import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.nullValue;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
public class ActionAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4TestCase {
@@ -262,101 +293,1052 @@ public class ActionAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4
}
}
+ public static class Hidden extends ActionAnnotationFacetFactoryTest {
+
+ @Test
+ public void withAnnotation() {
+
+ class Customer {
+ @Action(hidden = Where.REFERENCES_PARENT)
+ public void someAction() {
+ }
+ }
+
+ // given
+ final Class<?> cls = Customer.class;
+ actionMethod = findMethod(cls, "someAction");
+
+ // when
+ final ProcessMethodContext processMethodContext = new ProcessMethodContext(cls, null, null, actionMethod, mockMethodRemover, facetedMethod);
+ facetFactory.processHidden(processMethodContext);
+
+ // then
+ final HiddenFacet hiddenFacet = facetedMethod.getFacet(HiddenFacet.class);
+ Assert.assertNotNull(hiddenFacet);
+ assertThat(hiddenFacet.where(), is(Where.REFERENCES_PARENT));
+
+ final Facet hiddenFacetImpl = facetedMethod.getFacet(HiddenFacetForActionAnnotation.class);
+ Assert.assertNotNull(hiddenFacetImpl);
+ Assert.assertTrue(hiddenFacet == hiddenFacetImpl);
+ }
+
+ }
+
+ public static class RestrictTo extends ActionAnnotationFacetFactoryTest {
+
+ @Test
+ public void whenRestrictedToPrototyping() {
+
+ class Customer {
+ @Action(restrictTo = org.apache.isis.applib.annotation.RestrictTo.PROTOTYPING)
+ public void someAction() {
+ }
+ }
+
+ // given
+ final Class<?> cls = Customer.class;
+ actionMethod = findMethod(cls, "someAction");
+
+ // when
+ final ProcessMethodContext processMethodContext = new ProcessMethodContext(cls, null, null, actionMethod, mockMethodRemover, facetedMethod);
+ facetFactory.processRestrictTo(processMethodContext);
+
+ // then
+ final PrototypeFacet facet = facetedMethod.getFacet(PrototypeFacet.class);
+ Assert.assertNotNull(facet);
+ }
+
+ @Test
+ public void whenRestrictedToNoRestriction() {
+
+ class Customer {
+ @Action(restrictTo = org.apache.isis.applib.annotation.RestrictTo.NO_RESTRICTIONS)
+ public void someAction() {
+ }
+ }
+
+ // given
+ final Class<?> cls = Customer.class;
+ actionMethod = findMethod(cls, "someAction");
+
+ // when
+ final ProcessMethodContext processMethodContext = new ProcessMethodContext(cls, null, null, actionMethod, mockMethodRemover, facetedMethod);
+ facetFactory.processRestrictTo(processMethodContext);
+
+ // then
+ final PrototypeFacet facet = facetedMethod.getFacet(PrototypeFacet.class);
+ assertNull(facet);
+ }
+
+ @Test
+ public void whenNotPresent() {
+
+ class Customer {
+ public void someAction() {
+ }
+ }
+
+ // given
+ final Class<?> cls = Customer.class;
+ actionMethod = findMethod(cls, "someAction");
+
+ // when
+ final ProcessMethodContext processMethodContext = new ProcessMethodContext(cls, null, null, actionMethod, mockMethodRemover, facetedMethod);
+ facetFactory.processRestrictTo(processMethodContext);
+
+ // then
+ final PrototypeFacet facet = facetedMethod.getFacet(PrototypeFacet.class);
+ assertNull(facet);
+ }
+
+ }
+
+ public static class Semantics extends ActionAnnotationFacetFactoryTest {
+
+ @Test
+ public void whenDeprecatedQueryOnly() {
+
+ class Customer {
+ @QueryOnly
+ public void someAction() {
+ }
+ }
+
+ // given
+ final Class<?> cls = Customer.class;
+ actionMethod = findMethod(cls, "someAction");
+
+ // when
+ final ProcessMethodContext processMethodContext = new ProcessMethodContext(cls, null, null, actionMethod, mockMethodRemover, facetedMethod);
+ facetFactory.processSemantics(processMethodContext);
+
+ // then
+ final ActionSemanticsFacet facet = facetedMethod.getFacet(ActionSemanticsFacet.class);
+ Assert.assertNotNull(facet);
+ assertThat(facet.value(), is(Of.SAFE));
+ }
+
+ @Test
+ public void whenDeprecatedIdempotent() {
+
+ class Customer {
+ @Idempotent
+ public void someAction() {
+ }
+ }
+
+ // given
+ final Class<?> cls = Customer.class;
+ actionMethod = findMethod(cls, "someAction");
+
+ // when
+ final ProcessMethodContext processMethodContext = new ProcessMethodContext(cls, null, null, actionMethod, mockMethodRemover, facetedMethod);
+ facetFactory.processSemantics(processMethodContext);
+
+ // then
+ final ActionSemanticsFacet facet = facetedMethod.getFacet(ActionSemanticsFacet.class);
+ Assert.assertNotNull(facet);
+ assertThat(facet.value(), is(Of.IDEMPOTENT));
+ }
+
+ @Test
+ public void whenDeprecatedAnnotationSafe() {
+
+ class Customer {
+ @ActionSemantics(Of.SAFE)
+ public void someAction() {
+ }
+ }
+
+ // given
+ final Class<?> cls = Customer.class;
+ actionMethod = findMethod(cls, "someAction");
+
+ // when
+ final ProcessMethodContext processMethodContext = new ProcessMethodContext(cls, null, null, actionMethod, mockMethodRemover, facetedMethod);
+ facetFactory.processSemantics(processMethodContext);
+
+ // then
+ final ActionSemanticsFacet facet = facetedMethod.getFacet(ActionSemanticsFacet.class);
+ Assert.assertNotNull(facet);
+ assertThat(facet.value(), is(Of.SAFE));
+ }
+
+ @Test
+ public void whenSafe() {
+
+ class Customer {
+ @Action(semantics = SemanticsOf.SAFE)
+ public void someAction() {
+ }
+ }
+
+ // given
+ final Class<?> cls = Customer.class;
+ actionMethod = findMethod(cls, "someAction");
+
+ // when
+ final ProcessMethodContext processMethodContext = new ProcessMethodContext(cls, null, null, actionMethod, mockMethodRemover, facetedMethod);
+ facetFactory.processSemantics(processMethodContext);
+
+ // then
+ final ActionSemanticsFacet facet = facetedMethod.getFacet(ActionSemanticsFacet.class);
+ Assert.assertNotNull(facet);
+ assertThat(facet.value(), is(Of.SAFE));
+ }
+
+ @Test
+ public void whenNotSpecified() {
+
+ class Customer {
+ @Action()
+ public void someAction() {
+ }
+ }
+
+ // given
+ final Class<?> cls = Customer.class;
+ actionMethod = findMethod(cls, "someAction");
+
+ // when
+ final ProcessMethodContext processMethodContext = new ProcessMethodContext(cls, null, null, actionMethod, mockMethodRemover, facetedMethod);
+ facetFactory.processSemantics(processMethodContext);
+
+ // then
+ final ActionSemanticsFacet facet = facetedMethod.getFacet(ActionSemanticsFacet.class);
+ Assert.assertNotNull(facet);
+ assertThat(facet.value(), is(Of.NON_IDEMPOTENT));
+ }
+
+ @Test
+ public void whenNoAnnotation() {
+
+ class Customer {
+ public void someAction() {
+ }
+ }
+
+ // given
+ final Class<?> cls = Customer.class;
+ actionMethod = findMethod(cls, "someAction");
+
+ // when
+ final ProcessMethodContext processMethodContext = new ProcessMethodContext(cls, null, null, actionMethod, mockMethodRemover, facetedMethod);
+ facetFactory.processSemantics(processMethodContext);
+
+ // then
+ final ActionSemanticsFacet facet = facetedMethod.getFacet(ActionSemanticsFacet.class);
+ Assert.assertNotNull(facet);
+ assertThat(facet.value(), is(Of.NON_IDEMPOTENT));
+ }
+
+
+ @Test
+ public void whenDeprecatedActionSemanticsAndAction() {
+
+ class Customer {
+ @ActionSemantics(Of.SAFE)
+ @Action(semantics = SemanticsOf.IDEMPOTENT)
+ public void someAction() {
+ }
+ }
+
+ // given
+ final Class<?> cls = Customer.class;
+ actionMethod = findMethod(cls, "someAction");
+
+ // when
+ final ProcessMethodContext processMethodContext = new ProcessMethodContext(cls, null, null, actionMethod, mockMethodRemover, facetedMethod);
+ facetFactory.processSemantics(processMethodContext);
+
+ // then
+ final ActionSemanticsFacet facet = facetedMethod.getFacet(ActionSemanticsFacet.class);
+ Assert.assertNotNull(facet);
+ assertThat(facet.value(), is(Of.SAFE));
+ }
+
+ @Test
+ public void whenDeprecatedQueryOnlyAndDeprecatedActionSemantics() {
+
+ class Customer {
+ @QueryOnly
+ @ActionSemantics(Of.IDEMPOTENT)
+ public void someAction() {
+ }
+ }
+
+ // given
+ final Class<?> cls = Customer.class;
+ actionMethod = findMethod(cls, "someAction");
+
+ // when
+ final ProcessMethodContext processMethodContext = new ProcessMethodContext(cls, null, null, actionMethod, mockMethodRemover, facetedMethod);
+ facetFactory.processSemantics(processMethodContext);
+
+ // then
+ final ActionSemanticsFacet facet = facetedMethod.getFacet(ActionSemanticsFacet.class);
+ Assert.assertNotNull(facet);
+ assertThat(facet.value(), is(Of.SAFE));
+ }
+
+ @Test
+ public void whenDeprecatedIdempotentAndDeprecatedActionSemantics() {
+
+ class Customer {
+ @Idempotent
+ @ActionSemantics(Of.SAFE)
+ public void someAction() {
+ }
+ }
+
+ // given
+ final Class<?> cls = Customer.class;
+ actionMethod = findMethod(cls, "someAction");
+
+ // when
+ final ProcessMethodContext processMethodContext = new ProcessMethodContext(cls, null, null, actionMethod, mockMethodRemover, facetedMethod);
+ facetFactory.processSemantics(processMethodContext);
+
+ // then
+ final ActionSemanticsFacet facet = facetedMethod.getFacet(ActionSemanticsFacet.class);
+ Assert.assertNotNull(facet);
+ assertThat(facet.value(), is(Of.IDEMPOTENT));
+ }
+
+
+ }
+
+ public static class Bulk extends ActionAnnotationFacetFactoryTest {
+
+ @Test
+ public void whenDeprecatedBulkAnnotation() {
+
+ class Customer {
+ @org.apache.isis.applib.annotation.Bulk()
+ public void someAction() {
+ }
+ }
+
+ // given
+ final Class<?> cls = Customer.class;
+ actionMethod = findMethod(cls, "someAction");
+
+ // when
+ final ProcessMethodContext processMethodContext = new ProcessMethodContext(cls, null, null, actionMethod, mockMethodRemover, facetedMethod);
+ facetFactory.processInvokeOn(processMethodContext);
+
+ // then
+ final BulkFacet facet = facetedMethod.getFacet(BulkFacet.class);
+ Assert.assertNotNull(facet);
+ assertThat(facet.value(), is(org.apache.isis.applib.annotation.Bulk.AppliesTo.BULK_AND_REGULAR));
+
+ }
+
+ @Test
+ public void whenDeprecatedBulkAnnotationAppliesToBulkOnly() {
+
+ class Customer {
+ @org.apache.isis.applib.annotation.Bulk(org.apache.isis.applib.annotation.Bulk.AppliesTo.BULK_ONLY)
+ public void someAction() {
+ }
+ }
+
+ // given
+ final Class<?> cls = Customer.class;
+ actionMethod = findMethod(cls, "someAction");
+
+ // when
+ final ProcessMethodContext processMethodContext = new ProcessMethodContext(cls, null, null, actionMethod, mockMethodRemover, facetedMethod);
+ facetFactory.processInvokeOn(processMethodContext);
+
+ // then
+ final BulkFacet facet = facetedMethod.getFacet(BulkFacet.class);
+ Assert.assertNotNull(facet);
+ assertThat(facet.value(), is(org.apache.isis.applib.annotation.Bulk.AppliesTo.BULK_ONLY));
+ }
+
+ @Test
+ public void whenObjectOnly() {
+
+ class Customer {
+ @Action(invokeOn = InvokeOn.OBJECT_ONLY)
+ public void someAction() {
+ }
+ }
+
+ // given
+ final Class<?> cls = Customer.class;
+ actionMethod = findMethod(cls, "someAction");
+
+ // when
+ final ProcessMethodContext processMethodContext = new ProcessMethodContext(cls, null, null, actionMethod, mockMethodRemover, facetedMethod);
+ facetFactory.processInvokeOn(processMethodContext);
+
+ // then
+ final BulkFacet facet = facetedMethod.getFacet(BulkFacet.class);
+ assertNull(facet);
+
+ }
+
+ @Test
+ public void whenCollectionOnly() {
+
+ class Customer {
+ @Action(invokeOn = InvokeOn.COLLECTION_ONLY)
+ public void someAction() {
+ }
+ }
+
+ // given
+ final Class<?> cls = Customer.class;
+ actionMethod = findMethod(cls, "someAction");
+
+ // when
+ final ProcessMethodContext processMethodContext = new ProcessMethodContext(cls, null, null, actionMethod, mockMethodRemover, facetedMethod);
+ facetFactory.processInvokeOn(processMethodContext);
+
+ // then
+ final BulkFacet facet = facetedMethod.getFacet(BulkFacet.class);
+ Assert.assertNotNull(facet);
+ assertThat(facet.value(), is(org.apache.isis.applib.annotation.Bulk.AppliesTo.BULK_ONLY));
+
+ }
+
+ @Test
+ public void whenObjectAndCollection() {
+
+ class Customer {
+ @Action(invokeOn = InvokeOn.OBJECT_AND_COLLECTION)
+ public void someAction() {
+ }
+ }
+
+ // given
+ final Class<?> cls = Customer.class;
+ actionMethod = findMethod(cls, "someAction");
+
+ // when
+ final ProcessMethodContext processMethodContext = new ProcessMethodContext(cls, null, null, actionMethod, mockMethodRemover, facetedMethod);
+ facetFactory.processInvokeOn(processMethodContext);
+
+ // then
+ final BulkFacet facet = facetedMethod.getFacet(BulkFacet.class);
+ Assert.assertNotNull(facet);
+ assertThat(facet.value(), is(org.apache.isis.applib.annotation.Bulk.AppliesTo.BULK_AND_REGULAR));
+
+ }
+
+ }
+
public static class Command extends ActionAnnotationFacetFactoryTest {
@Test
- public void ignoreHasTransactionId() {
- final Of actionSemantics = Of.SAFE;
+ public void givenHasTransactionId_thenIgnored() {
+ // given
+ final Method actionMethod = findMethod(SomeTransactionalId.class, "someAction");
+
+ // when
+ facetFactory.processCommand(new ProcessMethodContext(SomeTransactionalId.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+
+ // then
+ final Facet facet = facetedMethod.getFacet(CommandFacet.class);
+ assertNull(facet);
+
+ }
+
+ @Test
+ public void givenDeprecatedAnnotation() {
+ // given
+ class Customer {
+ @org.apache.isis.applib.annotation.Command(
+ executeIn = org.apache.isis.applib.annotation.Command.ExecuteIn.BACKGROUND,
+ persistence = org.apache.isis.applib.annotation.Command.Persistence.IF_HINTED
+ )
+ public void someAction() {
+ }
+ }
+ final Method actionMethod = findMethod(Customer.class, "someAction");
+
+ // when
+ facetFactory.processCommand(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+
+ // then
+ final Facet facet = facetedMethod.getFacet(CommandFacet.class);
+ assertNotNull(facet);
+ assertTrue(facet instanceof CommandFacetForCommandAnnotation);
+ final CommandFacetForCommandAnnotation facetImpl = (CommandFacetForCommandAnnotation) facet;
+
+ assertThat(facetImpl.persistence(), is(org.apache.isis.applib.annotation.Command.Persistence.IF_HINTED));
+
+ expectNoMethodsRemoved();
+ }
+
+ @Test
+ public void given_noAnnotation_and_configurationSetToIgnoreQueryOnly_andSafeSemantics_thenNone() {
+
+ // given
+ allowingCommandConfigurationToReturn("ignoreQueryOnly");
+ final Method actionMethod = findMethod(Customer.class, "someAction");
+
+ facetedMethod.addFacet(new ActionSemanticsFacetAbstract(Of.SAFE, facetedMethod) {});
+
+ // when
+ facetFactory.processCommand(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+
+ // then
+ final Facet facet = facetedMethod.getFacet(CommandFacet.class);
+ assertNull(facet);
+ }
+
+ @Test
+ public void given_noAnnotation_and_configurationSetToIgnoreQueryOnly_andNonSafeSemantics_thenAdded() {
+
+ // given
+ allowingCommandConfigurationToReturn("ignoreQueryOnly");
+ final Method actionMethod = findMethod(Customer.class, "someAction");
+
+ facetedMethod.addFacet(new ActionSemanticsFacetAbstract(Of.IDEMPOTENT, facetedMethod) {});
+
+ // when
+ facetFactory.processCommand(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+
+ // then
+ final Facet facet = facetedMethod.getFacet(CommandFacet.class);
+ assertNotNull(facet);
+ assert(facet instanceof CommandFacetFromConfiguration);
+ final CommandFacetFromConfiguration facetImpl = (CommandFacetFromConfiguration) facet;
+ assertThat(facetImpl.persistence(), is(org.apache.isis.applib.annotation.Command.Persistence.PERSISTED));
+ assertThat(facetImpl.executeIn(), is(org.apache.isis.applib.annotation.Command.ExecuteIn.FOREGROUND));
+ }
+
+ @Test(expected=IllegalStateException.class)
+ public void given_noAnnotation_and_configurationSetToIgnoreQueryOnly_andNoSemantics_thenException() {
+
+ // given
+ allowingCommandConfigurationToReturn("ignoreQueryOnly");
+ final Method actionMethod = findMethod(Customer.class, "someAction");
+
+ // when
+ facetFactory.processCommand(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+ }
+
+ @Test
+ public void given_noAnnotation_and_configurationSetToNone_thenNone() {
+
+ // given
+ allowingCommandConfigurationToReturn("none");
+ final Method actionMethod = findMethod(Customer.class, "someAction");
+
+ // when
+ facetFactory.processCommand(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+
+ // then
+ final Facet facet = facetedMethod.getFacet(PublishedActionFacet.class);
+ assertNull(facet);
+ }
+
+ @Test
+ public void given_noAnnotation_and_configurationSetToAll_thenFacetAdded() {
+
+ // given
+ final Method actionMethod = findMethod(Customer.class, "someAction");
+
+ allowingCommandConfigurationToReturn("all");
+
+ // when
+ facetFactory.processCommand(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+
+ // then
+ final Facet facet = facetedMethod.getFacet(CommandFacet.class);
+ assertNotNull(facet);
+ assert(facet instanceof CommandFacetFromConfiguration);
+ }
+
+ @Test
+ public void given_asConfigured_and_configurationSetToIgnoreQueryOnly_andSafeSemantics_thenNone() {
+
+ class Customer {
+ @Action(
+ command = CommandReification.AS_CONFIGURED
+ )
+ public void someAction() {
+ }
+ }
+
+ allowingCommandConfigurationToReturn("ignoreQueryOnly");
+ final Method actionMethod = findMethod(Customer.class, "someAction");
+
+ facetedMethod.addFacet(new ActionSemanticsFacetAbstract(Of.SAFE, facetedMethod) {});
+
+ facetFactory.processCommand(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+
+ final Facet facet = facetedMethod.getFacet(CommandFacet.class);
+ assertNull(facet);
+ }
+
+ @Test
+ public void given_asConfigured_and_configurationSetToIgnoreQueryOnly_andNonSafeSemantics_thenAdded() {
+
+ // given
+ class Customer {
+ @Action(
+ command = CommandReification.AS_CONFIGURED,
+ commandPersistence = CommandPersistence.IF_HINTED,
+ commandExecuteIn = CommandExecuteIn.BACKGROUND
+ )
+ public void someAction() {
+ }
+ }
+
+ allowingCommandConfigurationToReturn("ignoreQueryOnly");
+ final Method actionMethod = findMethod(Customer.class, "someAction");
+
+ facetedMethod.addFacet(new ActionSemanticsFacetAbstract(Of.IDEMPOTENT, facetedMethod) {});
+
+ // when
+ facetFactory.processCommand(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+
+ // then
+ final Facet facet = facetedMethod.getFacet(CommandFacet.class);
+ assertNotNull(facet);
+ final CommandFacetForActionAnnotationAsConfigured facetImpl = (CommandFacetForActionAnnotationAsConfigured) facet;
+ assertThat(facetImpl.persistence(), is(org.apache.isis.applib.annotation.Command.Persistence.IF_HINTED));
+ assertThat(facetImpl.executeIn(), is(org.apache.isis.applib.annotation.Command.ExecuteIn.BACKGROUND));
+ }
+
+ @Test(expected=IllegalStateException.class)
+ public void given_asConfigured_and_configurationSetToIgnoreQueryOnly_andNoSemantics_thenException() {
+
+ class Customer {
+ @Action(
+ command = CommandReification.AS_CONFIGURED
+ )
+ public void someAction() {
+ }
+ }
+
+ allowingCommandConfigurationToReturn("ignoreQueryOnly");
+ final Method actionMethod = findMethod(Customer.class, "someAction");
+
+ facetFactory.processCommand(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+ }
+
+ @Test
+ public void given_asConfigured_and_configurationSetToNone_thenNone() {
- allowingConfigurationToReturn("all");
- final Method actionMethod = findMethod(SomeTransactionalId.class, "someAction");
+ class Customer {
+ @Action(
+ command = CommandReification.AS_CONFIGURED
+ )
+ public void someAction() {
+ }
+ }
- facetedMethod.addFacet(new ActionSemanticsFacetAbstract(actionSemantics, facetedMethod) {});
- facetFactory.processCommand(new ProcessMethodContext(SomeTransactionalId.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+ allowingCommandConfigurationToReturn("none");
+ final Method actionMethod = findMethod(Customer.class, "someAction");
+
+ facetFactory.processCommand(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+
+ final Facet facet = facetedMethod.getFacet(CommandFacet.class);
+ assertNull(facet);
+ }
+
+ @Test
+ public void given_asConfigured_and_configurationSetToAll_thenFacetAdded() {
+
+ // given
+ class Customer {
+ @Action(
+ command = CommandReification.AS_CONFIGURED,
+ commandPersistence = CommandPersistence.IF_HINTED,
+ commandExecuteIn = CommandExecuteIn.BACKGROUND
+ )
+ public void someAction() {
+ }
+ }
+ final Method actionMethod = findMethod(Customer.class, "someAction");
+
+ allowingCommandConfigurationToReturn("all");
+ // when
+ facetFactory.processCommand(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+
+ // then
final Facet facet = facetedMethod.getFacet(CommandFacet.class);
- Assert.assertNull(facet);
+ assertNotNull(facet);
+ final CommandFacetForActionAnnotationAsConfigured facetImpl = (CommandFacetForActionAnnotationAsConfigured) facet;
+ assertThat(facetImpl.persistence(), is(org.apache.isis.applib.annotation.Command.Persistence.IF_HINTED));
+ assertThat(facetImpl.executeIn(), is(org.apache.isis.applib.annotation.Command.ExecuteIn.BACKGROUND));
+ }
- expectNoMethodsRemoved();
+ @Test
+ public void given_enabled_irrespectiveOfConfiguration_thenFacetAdded() {
+
+ // given
+ class Customer {
+ @Action(
+ command = CommandReification.ENABLED
+ )
+ public void someAction() {
+ }
+ }
+ final Method actionMethod = findMethod(Customer.class, "someAction");
+
+ // even though configuration is disabled
+ allowingCommandConfigurationToReturn("none");
+
+ // when
+ facetFactory.processCommand(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+
+ // then
+ final Facet facet = facetedMethod.getFacet(CommandFacet.class);
+ assertNotNull(facet);
+ assertTrue(facet instanceof CommandFacetForActionAnnotation);
}
@Test
- public void testAnnotationPickedUp() {
+ public void given_disabled_irrespectiveOfConfiguration_thenNone() {
+
+ // given
class Customer {
- @org.apache.isis.applib.annotation.Command
+ @Action(
+ command = CommandReification.DISABLED
+ )
public void someAction() {
}
}
final Method actionMethod = findMethod(Customer.class, "someAction");
+ // even though configuration is disabled
+ allowingCommandConfigurationToReturn("none");
+
+ // when
facetFactory.processCommand(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+ // then
final Facet facet = facetedMethod.getFacet(CommandFacet.class);
+ assertNull(facet);
+ }
+
+
+ }
+
+ public static class Publishing extends ActionAnnotationFacetFactoryTest {
+
+ public static class CustomerSomeActionPayloadFactory implements PublishedAction.PayloadFactory {
+ @Override
+ public EventPayload payloadFor(final Identifier actionIdentifier, final Object target, final List<Object> arguments, final Object result) {
+ return null;
+ }
+ }
+
+ public static class CustomerSomeActionPublishingPayloadFactory implements PublishingPayloadFactoryForAction {
+ @Override
+ public EventPayload payloadFor(final Identifier actionIdentifier, final Object target, final List<Object> arguments, final Object result) {
+ return null;
+ }
+ }
+
+ @Test
+ public void givenHasTransactionId_thenIgnored() {
+
+ final Method actionMethod = findMethod(SomeTransactionalId.class, "someAction");
+
+ facetFactory.processPublishing(new ProcessMethodContext(SomeTransactionalId.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+
+ final Facet facet = facetedMethod.getFacet(PublishedActionFacet.class);
+ assertNull(facet);
+
+ expectNoMethodsRemoved();
+ }
+
+ @Test
+ public void givenDeprecatedAnnotation() {
+
+ // given
+ class Customer {
+ @org.apache.isis.applib.annotation.PublishedAction(CustomerSomeActionPayloadFactory.class)
+ public void someAction() {
+ }
+ }
+ final Method actionMethod = findMethod(Customer.class, "someAction");
+
+ // when
+ facetFactory.processPublishing(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+
+ // then
+ final Facet facet = facetedMethod.getFacet(PublishedActionFacet.class);
assertNotNull(facet);
- assertTrue(facet instanceof CommandFacetAbstract);
+ assertTrue(facet instanceof PublishedActionFacetForPublishedActionAnnotation);
+ final PublishedActionFacetForPublishedActionAnnotation facetImpl = (PublishedActionFacetForPublishedActionAnnotation) facet;
+ assertThat(facetImpl.value(), instanceOf(CustomerSomeActionPayloadFactory.class));
expectNoMethodsRemoved();
}
+ @Test
+ public void given_noAnnotation_and_configurationSetToIgnoreQueryOnly_andSafeSemantics_thenNone() {
+
+ // given
+ allowingPublishingConfigurationToReturn("ignoreQueryOnly");
+ final Method actionMethod = findMethod(Customer.class, "someAction");
+
+ facetedMethod.addFacet(new ActionSemanticsFacetAbstract(Of.SAFE, facetedMethod) {});
+
+ // when
+ facetFactory.processPublishing(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+
+ // then
+ final Facet facet = facetedMethod.getFacet(PublishedActionFacet.class);
+ assertNull(facet);
+ }
+
+ @Test
+ public void given_noAnnotation_and_configurationSetToIgnoreQueryOnly_andNonSafeSemantics_thenAdded() {
+
+ // given
+ allowingPublishingConfigurationToReturn("ignoreQueryOnly");
+ final Method actionMethod = findMethod(Customer.class, "someAction");
+
+ facetedMethod.addFacet(new ActionSemanticsFacetAbstract(Of.IDEMPOTENT, facetedMethod) {});
+
+ // when
+ facetFactory.processPublishing(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+
+ // then
+ final Facet facet = facetedMethod.getFacet(PublishedActionFacet.class);
+ assertNotNull(facet);
+ final PublishedActionFacetFromConfiguration facetImpl = (PublishedActionFacetFromConfiguration) facet;
+ final PublishedAction.PayloadFactory payloadFactory = facetImpl.value();
+ assertThat(payloadFactory, is(nullValue()));
+ }
+
@Test(expected=IllegalStateException.class)
- public void requiresActionSemantics() {
- allowingConfigurationToReturn("safe");
+ public void given_noAnnotation_and_configurationSetToIgnoreQueryOnly_andNoSemantics_thenException() {
+
+ // given
+ allowingPublishingConfigurationToReturn("ignoreQueryOnly");
final Method actionMethod = findMethod(Customer.class, "someAction");
- facetFactory.processCommand(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+ // when
+ facetFactory.processPublishing(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+
}
@Test
- public void all_with_safe() {
- final Of actionSemantics = Of.SAFE;
+ public void given_noAnnotation_and_configurationSetToNone_thenNone() {
+
+ // given
+ allowingPublishingConfigurationToReturn("none");
+ final Method actionMethod = findMethod(Customer.class, "someAction");
- allowingConfigurationToReturn("all");
+ // when
+ facetFactory.processPublishing(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
- facetedMethod.addFacet(new ActionSemanticsFacetAbstract(actionSemantics, facetedMethod) {});
+ // then
+ final Facet facet = facetedMethod.getFacet(PublishedActionFacet.class);
+ assertNull(facet);
- facetFactory.processCommand(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+ expectNoMethodsRemoved();
- final Facet facet = facetedMethod.getFacet(CommandFacet.class);
- assertTrue(facet instanceof CommandFacetAbstract);
+ }
+
+ @Test
+ public void given_noAnnotation_and_configurationSetToAll_thenFacetAdded() {
+
+ // given
+ final Method actionMethod = findMethod(Customer.class, "someAction");
+
+ allowingPublishingConfigurationToReturn("all");
+
+ // when
+ facetFactory.processPublishing(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+
+ // then
+ final Facet facet = facetedMethod.getFacet(PublishedActionFacet.class);
+ assertNotNull(facet);
+ assertTrue(facet instanceof PublishedActionFacetFromConfiguration);
+ }
+
+ @Test
+ public void given_asConfigured_and_configurationSetToIgnoreQueryOnly_andSafeSemantics_thenNone() {
+
+ class Customer {
+ @Action(publishing = org.apache.isis.applib.annotation.Publishing.AS_CONFIGURED)
+ public void someAction() {
+ }
+ }
+
+ allowingPublishingConfigurationToReturn("ignoreQueryOnly");
+ final Method actionMethod = findMethod(Customer.class, "someAction");
+
+ facetedMethod.addFacet(new ActionSemanticsFacetAbstract(Of.SAFE, facetedMethod) {});
+
+ facetFactory.processPublishing(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+
+ final Facet facet = facetedMethod.getFacet(PublishedActionFacet.class);
+ assertNull(facet);
expectNoMethodsRemoved();
}
@Test
- public void ignoreQueryOnly_with_safe() {
- final Of actionSemantics = Of.SAFE;
+ public void given_asConfigured_and_configurationSetToIgnoreQueryOnly_andNonSafeSemantics_thenAdded() {
+
+ // given
+ class Customer {
+ @Action(
+ publishing = org.apache.isis.applib.annotation.Publishing.AS_CONFIGURED,
+ publishingPayloadFactory = CustomerSomeActionPublishingPayloadFactory.class
+ )
+ public void someAction() {
+ }
+ }
- allowingConfigurationToReturn("ignoreQueryOnly");
+ allowingPublishingConfigurationToReturn("ignoreQueryOnly");
+ final Method actionMethod = findMethod(Customer.class, "someAction");
- facetedMethod.addFacet(new ActionSemanticsFacetAbstract(actionSemantics, facetedMethod) {});
- facetFactory.processCommand(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+ facetedMethod.addFacet(new ActionSemanticsFacetAbstract(Of.IDEMPOTENT, facetedMethod) {});
- final Facet facet = facetedMethod.getFacet(CommandFacet.class);
- Assert.assertNull(facet);
+ // when
+ facetFactory.processPublishing(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+
+ // then
+ final Facet facet = facetedMethod.getFacet(PublishedActionFacet.class);
+ assertNotNull(facet);
+ final PublishedActionFacetForActionAnnotation facetImpl = (PublishedActionFacetForActionAnnotation) facet;
+ final PublishedAction.PayloadFactory payloadFactory = facetImpl.value();
+ assertThat(payloadFactory, instanceOf(PublishedActionFacetAbstract.LegacyAdapter.class));
+
+ final PublishedActionFacetAbstract.LegacyAdapter legacyAdapter = (PublishedActionFacetAbstract.LegacyAdapter) payloadFactory;
+ assertThat(legacyAdapter.getPayloadFactory(), instanceOf(CustomerSomeActionPublishingPayloadFactory.class));
+
+ expectNoMethodsRemoved();
+ }
+
+ @Test(expected=IllegalStateException.class)
+ public void given_asConfigured_and_configurationSetToIgnoreQueryOnly_andNoSemantics_thenException() {
+
+ class Customer {
+ @Action(publishing = org.apache.isis.applib.annotation.Publishing.AS_CONFIGURED)
+ public void someAction() {
+ }
+ }
+
+ allowingPublishingConfigurationToReturn("ignoreQueryOnly");
+ final Method actionMethod = findMethod(Customer.class, "someAction");
+
+ facetFactory.processPublishing(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+ }
+
+ @Test
+ public void given_asConfigured_and_configurationSetToNone_thenNone() {
+
+ class Customer {
+ @Action(publishing = org.apache.isis.applib.annotation.Publishing.AS_CONFIGURED)
+ public void someAction() {
+ }
+ }
+
+ allowingPublishingConfigurationToReturn("none");
+ final Method actionMethod = findMethod(Customer.class, "someAction");
+
+ facetFactory.processPublishing(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+
+ final Facet facet = facetedMethod.getFacet(PublishedActionFacet.class);
+ assertNull(facet);
expectNoMethodsRemoved();
+
}
@Test
- public void none_with_nonIdempotent() {
- final Of actionSemantics = Of.NON_IDEMPOTENT;
+ public void given_asConfigured_and_configurationSetToAll_thenFacetAdded() {
+
+ // given
+ class Customer {
+ @Action(
+ publishing = org.apache.isis.applib.annotation.Publishing.AS_CONFIGURED,
+ publishingPayloadFactory = CustomerSomeActionPublishingPayloadFactory.class
+ )
+ public void someAction() {
+ }
+ }
+ final Method actionMethod = findMethod(Customer.class, "someAction");
- allowingConfigurationToReturn("none");
+ allowingPublishingConfigurationToReturn("all");
- facetedMethod.addFacet(new ActionSemanticsFacetAbstract(actionSemantics, facetedMethod) {});
- facetFactory.processCommand(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+ // when
+ facetFactory.processPublishing(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
- final Facet facet = facetedMethod.getFacet(CommandFacet.class);
- Assert.assertNull(facet);
+ // then
+ final Facet facet = facetedMethod.getFacet(PublishedActionFacet.class);
+ assertNotNull(facet);
+ assertTrue(facet instanceof PublishedActionFacetForActionAnnotation);
+
+ final PublishedActionFacetForActionAnnotation facetImpl = (PublishedActionFacetForActionAnnotation) facet;
+ final PublishedAction.PayloadFactory payloadFactory = facetImpl.value();
+ assertThat(payloadFactory, instanceOf(PublishedActionFacetAbstract.LegacyAdapter.class));
+
+ final PublishedActionFacetAbstract.LegacyAdapter legacyAdapter = (PublishedActionFacetAbstract.LegacyAdapter) payloadFactory;
+ assertThat(legacyAdapter.getPayloadFactory(), instanceOf(CustomerSomeActionPublishingPayloadFactory.class));
expectNoMethodsRemoved();
}
+ @Test
+ public void given_enabled_irrespectiveOfConfiguration_thenFacetAdded() {
+
+ // given
+ class Customer {
+ @Action(
+ publishing = org.apache.isis.applib.annotation.Publishing.ENABLED
+ )
+ public void someAction() {
+ }
+ }
+ final Method actionMethod = findMethod(Customer.class, "someAction");
+
+ // even though configuration is disabled
+ allowingPublishingConfigurationToReturn("none");
+
+ // when
+ facetFactory.processPublishing(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+
+ // then
+ final Facet facet = facetedMethod.getFacet(PublishedActionFacet.class);
+ assertNotNull(facet);
+ assertTrue(facet instanceof PublishedActionFacetForActionAnnotation);
+ }
+
+ @Test
+ public void given_disabled_irrespectiveOfConfiguration_thenNone() {
+
+ // given
+ class Customer {
+ @Action(
+ publishing = org.apache.isis.applib.annotation.Publishing.DISABLED
+ )
+ public void someAction() {
+ }
+ }
+ final Method actionMethod = findMethod(Customer.class, "someAction");
+
+ // even though configuration is disabled
+ allowingPublishingConfigurationToReturn("none");
+
+ // when
+ facetFactory.processPublishing(new ProcessMethodContext(Customer.class, null, null, actionMethod, mockMethodRemover, facetedMethod));
+
+ // then
+ final Facet facet = facetedMethod.getFacet(PublishedActionFacet.class);
+ assertNull(facet);
+ }
}
- void allowingConfigurationToReturn(final String value) {
+ void allowingCommandConfigurationToReturn(final String value) {
context.checking(new Expectations() {
{
allowing(mockConfiguration).getString("isis.services.command.actions");
@@ -364,5 +1346,13 @@ public class ActionAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4
}
});
}
+ void allowingPublishingConfigurationToReturn(final String value) {
+ context.checking(new Expectations() {
+ {
+ allowing(mockConfiguration).getString("isis.services.publish.actions");
+ will(returnValue(value));
+ }
+ });
+ }
}
http://git-wip-us.apache.org/repos/asf/isis/blob/18d470c3/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_forActionSemantics.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_forActionSemantics.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_forActionSemantics.java
index 929425d..a4d10aa 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_forActionSemantics.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_forActionSemantics.java
@@ -26,7 +26,7 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
-import org.apache.isis.core.metamodel.facets.actions.semantics.annotations.actionsemantics.ActionSemanticsFacetAnnotation;
+import org.apache.isis.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionSemanticsAnnotation;
public class ActionAnnotationFacetFactoryTest_forActionSemantics extends AbstractFacetFactoryTest {
@@ -57,23 +57,7 @@ public class ActionAnnotationFacetFactoryTest_forActionSemantics extends Abstrac
final Facet facet = facetedMethod.getFacet(ActionSemanticsFacet.class);
assertNotNull(facet);
- assertTrue(facet instanceof ActionSemanticsFacetAnnotation);
-
- assertNoMethodsRemoved();
- }
-
- public void testNoAnnotationPickedUp() {
- class Customer {
- @SuppressWarnings("unused")
- public void someAction() {
- }
- }
- final Method actionMethod = findMethod(Customer.class, "someAction");
-
- facetFactory.processSemantics(new ProcessMethodContext(Customer.class, null, null, actionMethod, methodRemover, facetedMethod));
-
- final Facet facet = facetedMethod.getFacet(ActionSemanticsFacet.class);
- assertNull(facet);
+ assertTrue(facet instanceof ActionSemanticsFacetForActionSemanticsAnnotation);
assertNoMethodsRemoved();
}
http://git-wip-us.apache.org/repos/asf/isis/blob/18d470c3/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionSemanticsFacetFallbackToNonIdempotentFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionSemanticsFacetFallbackToNonIdempotentFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionSemanticsFacetFallbackToNonIdempotentFactoryTest.java
new file mode 100644
index 0000000..9e43b48
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionSemanticsFacetFallbackToNonIdempotentFactoryTest.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.actions.action;
+
+import java.lang.reflect.Method;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
+import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
+import org.apache.isis.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetFallbackToNonIdempotent;
+import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
+
+public class ActionSemanticsFacetFallbackToNonIdempotentFactoryTest extends AbstractFacetFactoryTest {
+
+ private ActionAnnotationFacetFactory facetFactory;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ facetFactory = new ActionAnnotationFacetFactory();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ facetFactory = null;
+ super.tearDown();
+ }
+
+ public void testNoAnnotationPickedUp() {
+ class Customer {
+ @SuppressWarnings("unused")
+ public void someAction() {
+ }
+ }
+ final Method actionMethod = findMethod(Customer.class, "someAction");
+
+ facetFactory.processSemantics(new ProcessMethodContext(Customer.class, null, null, actionMethod, methodRemover, facetedMethod));
+
+ final Facet facet = facetedMethod.getFacet(ActionSemanticsFacet.class);
+ assertNotNull(facet);
+ assertTrue(facet instanceof ActionSemanticsFacetFallbackToNonIdempotent);
+
+ assertNoMethodsRemoved();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/18d470c3/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/IdempotentFacetAnnotationFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/IdempotentFacetAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/IdempotentFacetAnnotationFactoryTest.java
new file mode 100644
index 0000000..01a6ef3
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/IdempotentFacetAnnotationFactoryTest.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.actions.action;
+
+import java.lang.reflect.Method;
+
+import org.apache.isis.applib.annotation.Idempotent;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
+import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
+import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
+import org.apache.isis.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetFromIdempotentAnnotation;
+
+public class IdempotentFacetAnnotationFactoryTest extends AbstractFacetFactoryTest {
+
+ private ActionAnnotationFacetFactory facetFactory;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ facetFactory = new ActionAnnotationFacetFactory();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ facetFactory = null;
+ super.tearDown();
+ }
+
+ public void testQueryOnlyAnnotationPickedUp() {
+ class Customer {
+ @Idempotent
+ public void someAction() {
+ }
+ }
+ final Method actionMethod = findMethod(Customer.class, "someAction");
+
+ facetFactory.processSemantics(new ProcessMethodContext(Customer.class, null, null, actionMethod, methodRemover, facetedMethod));
+
+ final Facet facet = facetedMethod.getFacet(ActionSemanticsFacet.class);
+ assertNotNull(facet);
+ assertTrue(facet instanceof ActionSemanticsFacetFromIdempotentAnnotation);
+
+ assertNoMethodsRemoved();
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/18d470c3/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/QueryOnlyFacetAnnotationFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/QueryOnlyFacetAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/QueryOnlyFacetAnnotationFactoryTest.java
new file mode 100644
index 0000000..41f7cee
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/QueryOnlyFacetAnnotationFactoryTest.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.actions.action;
+
+import java.lang.reflect.Method;
+import org.apache.isis.applib.annotation.QueryOnly;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
+import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
+import org.apache.isis.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetFromQueryOnlyAnnotation;
+import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
+
+public class QueryOnlyFacetAnnotationFactoryTest extends AbstractFacetFactoryTest {
+
+ private ActionAnnotationFacetFactory facetFactory;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ facetFactory = new ActionAnnotationFacetFactory();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ facetFactory = null;
+ super.tearDown();
+ }
+
+ public void testQueryOnlyAnnotationPickedUp() {
+ class Customer {
+ @QueryOnly
+ public void someAction() {
+ }
+ }
+ final Method actionMethod = findMethod(Customer.class, "someAction");
+
+ facetFactory.processSemantics(new ProcessMethodContext(Customer.class, null, null, actionMethod, methodRemover, facetedMethod));
+
+ final Facet facet = facetedMethod.getFacet(ActionSemanticsFacet.class);
+ assertNotNull(facet);
+ assertTrue(facet instanceof ActionSemanticsFacetFromQueryOnlyAnnotation);
+
+ assertNoMethodsRemoved();
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/18d470c3/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/prototype/PrototypeFacetAbstractTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/prototype/PrototypeFacetAbstractTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/prototype/PrototypeFacetAbstractTest.java
new file mode 100644
index 0000000..7f3fedd
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/prototype/PrototypeFacetAbstractTest.java
@@ -0,0 +1,47 @@
+package org.apache.isis.core.metamodel.facets.actions.prototype;
+
+import org.jmock.Expectations;
+import org.jmock.auto.Mock;
+import org.junit.Rule;
+import org.junit.Test;
+import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.interactions.VisibilityContext;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+
+import static org.junit.Assert.assertEquals;
+
+public class PrototypeFacetAbstractTest {
+
+ @Rule
+ public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(JUnitRuleMockery2.Mode.INTERFACES_AND_CLASSES);
+
+ @Mock
+ private VisibilityContext mockVisibilityContext;
+ @Mock
+ private FacetHolder mockFacetHolder;
+
+ @Test
+ public void allCombinations() throws Exception {
+ givenWhenThen(DeploymentCategory.EXPLORING, null);
+ givenWhenThen(DeploymentCategory.PROTOTYPING, null);
+ givenWhenThen(DeploymentCategory.PRODUCTION, "Prototyping action not visible in production mode");
+ }
+
+ protected void givenWhenThen(final DeploymentCategory deploymentCategory, final String expected) {
+ // given
+ final PrototypeFacetAbstract facet = new PrototypeFacetAbstract(mockFacetHolder){};
+
+ // expect
+ context.checking(new Expectations() {{
+ oneOf(mockVisibilityContext).getDeploymentCategory();
+ will(returnValue(deploymentCategory));
+ }});
+
+ // when
+ final String reason = facet.hides(mockVisibilityContext);
+
+ // then
+ assertEquals(expected, reason);
+ }
+}
\ No newline at end of file