From 5978b36fbad103e41f4c3526d317b570b7d2e7ae Mon Sep 17 00:00:00 2001
From: Jeffrey Phillips Freeman <jeffrey.freeman@syncleus.com>
Date: Fri, 14 Nov 2014 07:56:36 -0500
Subject: [PATCH] Added unit tests to check that the
 AbdstractPrioritySerialTrigger properly orders the edges when executing.

Change-Id: Ifa0cd1579875a1a81a8d975374d4d2d7ecf87043
---
 .../AbstractPrioritySerialTriggerTest.java    | 66 +++++++++++++++++++
 .../action/AbstractSimpleActionNode.java      | 24 +++++++
 .../grail/graph/action/SimpleActionNode.java  | 16 +++++
 3 files changed, 106 insertions(+)

diff --git a/src/test/java/com/syncleus/grail/graph/action/AbstractPrioritySerialTriggerTest.java b/src/test/java/com/syncleus/grail/graph/action/AbstractPrioritySerialTriggerTest.java
index 0f01848..f6901f4 100644
--- a/src/test/java/com/syncleus/grail/graph/action/AbstractPrioritySerialTriggerTest.java
+++ b/src/test/java/com/syncleus/grail/graph/action/AbstractPrioritySerialTriggerTest.java
@@ -52,6 +52,72 @@ public class AbstractPrioritySerialTriggerTest {
         Assert.assertTrue(actionNode.isDone());
     }
 
+    @Test
+    public void testDoesTriggerInOrder() {
+        final FramedTransactionalGraph<?> graph = FACTORY.create(new MockTransactionalTinkerGraph());
+
+        final List<String> triggerOrder = new ArrayList<String>(2);
+
+        // construct graph
+        final SimpleActionNode firstActionNode = (SimpleActionNode) graph.addVertex(null, SimpleActionNode.class);
+        firstActionNode.setTriggerOrder(triggerOrder);
+        final SimpleActionNode secondActionNode = (SimpleActionNode) graph.addVertex(null, SimpleActionNode.class);
+        secondActionNode.setTriggerOrder(triggerOrder);
+        final PrioritySerialTrigger trigger = (PrioritySerialTrigger) graph.addVertex(null, PrioritySerialTrigger.class);
+        final PrioritySerialTriggerEdge firstTriggerEdge = (PrioritySerialTriggerEdge) graph.addEdge(null, trigger.asVertex(), firstActionNode.asVertex(), "triggers", PrioritySerialTriggerEdge.class);
+        firstTriggerEdge.setTriggerAction("first");
+        firstTriggerEdge.setTriggerPriority(1000);
+        final PrioritySerialTriggerEdge secondTriggerEdge = (PrioritySerialTriggerEdge) graph.addEdge(null, trigger.asVertex(), secondActionNode.asVertex(), "triggers", PrioritySerialTriggerEdge.class);
+        secondTriggerEdge.setTriggerAction("second");
+        secondTriggerEdge.setTriggerPriority(0);
+
+        Assert.assertTrue(triggerOrder.isEmpty());
+
+        //process the weight
+        trigger.trigger();
+
+        //make sure we clear out the action node since the attribute is static.
+        firstActionNode.setTriggerOrder(null);
+        secondActionNode.setTriggerOrder(null);
+
+        Assert.assertTrue(triggerOrder.size() == 2);
+        Assert.assertTrue(triggerOrder.get(0).equals("first"));
+        Assert.assertTrue(triggerOrder.get(1).equals("second"));
+    }
+
+    @Test
+    public void testDoesTriggerInOrderReversed() {
+        final FramedTransactionalGraph<?> graph = FACTORY.create(new MockTransactionalTinkerGraph());
+
+        final List<String> triggerOrder = new ArrayList<String>(2);
+
+        // construct graph
+        final SimpleActionNode firstActionNode = (SimpleActionNode) graph.addVertex(null, SimpleActionNode.class);
+        firstActionNode.setTriggerOrder(triggerOrder);
+        final SimpleActionNode secondActionNode = (SimpleActionNode) graph.addVertex(null, SimpleActionNode.class);
+        secondActionNode.setTriggerOrder(triggerOrder);
+        final PrioritySerialTrigger trigger = (PrioritySerialTrigger) graph.addVertex(null, PrioritySerialTrigger.class);
+        final PrioritySerialTriggerEdge secondTriggerEdge = (PrioritySerialTriggerEdge) graph.addEdge(null, trigger.asVertex(), secondActionNode.asVertex(), "triggers", PrioritySerialTriggerEdge.class);
+        secondTriggerEdge.setTriggerAction("second");
+        secondTriggerEdge.setTriggerPriority(0);
+        final PrioritySerialTriggerEdge firstTriggerEdge = (PrioritySerialTriggerEdge) graph.addEdge(null, trigger.asVertex(), firstActionNode.asVertex(), "triggers", PrioritySerialTriggerEdge.class);
+        firstTriggerEdge.setTriggerAction("first");
+        firstTriggerEdge.setTriggerPriority(1000);
+
+        Assert.assertTrue(triggerOrder.isEmpty());
+
+        //process the weight
+        trigger.trigger();
+
+        //make sure we clear out the action node since the attribute is static.
+        firstActionNode.setTriggerOrder(null);
+        secondActionNode.setTriggerOrder(null);
+
+        Assert.assertTrue(triggerOrder.size() == 2);
+        Assert.assertTrue(triggerOrder.get(0).equals("first"));
+        Assert.assertTrue(triggerOrder.get(1).equals("second"));
+    }
+
     @Test(expected = UndeclaredThrowableException.class )
     public void testBadArguments() {
         final FramedTransactionalGraph<?> graph = FACTORY.create(new MockTransactionalTinkerGraph());
diff --git a/src/test/java/com/syncleus/grail/graph/action/AbstractSimpleActionNode.java b/src/test/java/com/syncleus/grail/graph/action/AbstractSimpleActionNode.java
index 33a666f..7677ade 100644
--- a/src/test/java/com/syncleus/grail/graph/action/AbstractSimpleActionNode.java
+++ b/src/test/java/com/syncleus/grail/graph/action/AbstractSimpleActionNode.java
@@ -20,9 +20,33 @@ package com.syncleus.grail.graph.action;
 
 import com.tinkerpop.frames.modules.javahandler.JavaHandlerContext;
 
+import java.util.List;
+
 public abstract class AbstractSimpleActionNode implements SimpleActionNode, JavaHandlerContext {
+    private static List<String> triggerOrder;
+
+    @Override
+    public void setTriggerOrder(final List<String> triggerOrder) {
+        this.triggerOrder = triggerOrder;
+    }
+
+    @Override
+    public List<String> getTriggerOrder() {
+        return this.triggerOrder;
+    }
+
     @Override
     public void doSomething() {
         this.setDone(true);
     }
+
+    @Override
+    public void doSomethingFirst() {
+        this.triggerOrder.add("first");
+    }
+
+    @Override
+    public void doSomethingSecond() {
+        this.triggerOrder.add("second");
+    }
 }
diff --git a/src/test/java/com/syncleus/grail/graph/action/SimpleActionNode.java b/src/test/java/com/syncleus/grail/graph/action/SimpleActionNode.java
index 4c0e96a..766eba9 100644
--- a/src/test/java/com/syncleus/grail/graph/action/SimpleActionNode.java
+++ b/src/test/java/com/syncleus/grail/graph/action/SimpleActionNode.java
@@ -23,6 +23,8 @@ import com.tinkerpop.frames.*;
 import com.tinkerpop.frames.modules.javahandler.*;
 import com.tinkerpop.frames.modules.typedgraph.*;
 
+import java.util.List;
+
 @TypeValue("SimpleActionNode")
 @JavaHandlerClass(AbstractSimpleActionNode.class)
 public interface SimpleActionNode extends Node {
@@ -32,7 +34,21 @@ public interface SimpleActionNode extends Node {
     @Property("isDone")
     void setDone(boolean isDone);
 
+    @JavaHandler
+    void setTriggerOrder(List<String> triggerOrder);
+
+    @JavaHandler
+    List<String> getTriggerOrder();
+
     @JavaHandler
     @Action("action")
     void doSomething();
+
+    @JavaHandler
+    @Action("first")
+    void doSomethingFirst();
+
+    @JavaHandler
+    @Action("second")
+    void doSomethingSecond();
 }
-- 
GitLab