/* * Copyright 2014 Effektif GmbH. * * Licensed 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 com.effektif.workflow.test.api; import static org.junit.Assert.*; import java.util.Date; import java.util.List; import org.joda.time.LocalDateTime; import org.junit.Test; import com.effektif.workflow.api.json.GenericType; import com.effektif.workflow.api.model.Money; import com.effektif.workflow.api.model.TriggerInstance; import com.effektif.workflow.api.model.VariableValues; import com.effektif.workflow.api.model.WorkflowInstanceId; import com.effektif.workflow.api.types.DateType; import com.effektif.workflow.api.types.EmailAddressType; import com.effektif.workflow.api.types.JavaBeanType; import com.effektif.workflow.api.types.LinkType; import com.effektif.workflow.api.types.ListType; import com.effektif.workflow.api.types.MoneyType; import com.effektif.workflow.api.types.NumberType; import com.effektif.workflow.api.workflow.ExecutableWorkflow; import com.effektif.workflow.api.workflowinstance.WorkflowInstance; import com.effektif.workflow.impl.util.Lists; import com.effektif.workflow.test.WorkflowTest; /** * @author Tom Baeyens */ public class VariableTypesTest extends WorkflowTest { @Test public void testDateType() { ExecutableWorkflow workflow = new ExecutableWorkflow() .variable("v", new DateType()); deploy(workflow); LocalDateTime value = new LocalDateTime(); WorkflowInstance workflowInstance = workflowEngine.start(new TriggerInstance() .workflowId(workflow.getId()) .data("v", value)); assertEquals(value, workflowInstance.getVariableValue("v")); } @Test public void testDateTypeSetVariables() { ExecutableWorkflow workflow = new ExecutableWorkflow() .variable("v", new DateType()); deploy(workflow); WorkflowInstance workflowInstance = workflowEngine.start(new TriggerInstance() .workflowId(workflow.getId())); WorkflowInstanceId workflowInstanceId = workflowInstance.getId(); LocalDateTime value = new LocalDateTime(); VariableValues variableValues = new VariableValues(); variableValues.value("v", value); workflowEngine.setVariableValues(workflowInstanceId, variableValues); VariableValues retrieved = workflowEngine.getVariableValues(workflowInstanceId); assertEqualsVariableValue("v", variableValues, retrieved); } @Test public void testListOfDatesType() { ExecutableWorkflow workflow = new ExecutableWorkflow() .variable("v", new ListType(new DateType())); deploy(workflow); long time1 = new Date().getTime(); long time2 = time1+1; WorkflowInstance workflowInstance = workflowEngine.start(new TriggerInstance() .workflowId(workflow.getId()) .data("v", Lists.of(new LocalDateTime(time1), new LocalDateTime(time2)))); List<LocalDateTime> variableValue = (List<LocalDateTime>) workflowInstance.getVariableValue("v"); assertEquals(new LocalDateTime(time1), variableValue.get(0)); assertEquals(new LocalDateTime(time2), variableValue.get(1)); } @Test public void testEmailAddressType() { ExecutableWorkflow workflow = new ExecutableWorkflow() .variable("v", new EmailAddressType()); deploy(workflow); WorkflowInstance workflowInstance = workflowEngine.start(new TriggerInstance().workflowId(workflow.getId()) .data("v", "info@effektif.com")); Object value = workflowInstance.getVariableValue("v"); assertEquals("info@effektif.com", value); } @Test public void testListOfEmailAddressesType() { ExecutableWorkflow workflow = new ExecutableWorkflow() .variable("v", new ListType(new EmailAddressType())); deploy(workflow); WorkflowInstance workflowInstance = workflowEngine.start(new TriggerInstance().workflowId(workflow.getId()) .data("v", Lists.of("info@effektif.com", "sales@effektif.com"))); List<String> value = (List<String>) workflowInstance.getVariableValue("v"); assertEquals("info@effektif.com", value.get(0)); assertEquals("sales@effektif.com", value.get(1)); value = (List<String>)workflowInstance.getVariableValue("v"); assertEquals("info@effektif.com", value.get(0)); assertEquals("sales@effektif.com", value.get(1)); } @Test public void testNumberType() { ExecutableWorkflow workflow = new ExecutableWorkflow() .variable("v", new NumberType()); deploy(workflow); WorkflowInstance workflowInstance = workflowEngine.start(new TriggerInstance() .workflowId(workflow.getId()) .data("v", 5)); assertEquals(new Long(5), workflowInstance.getVariableValue("v", Long.class)); } @Test public void testListOfNumbersType() { ExecutableWorkflow workflow = new ExecutableWorkflow() .variable("v", new ListType(new NumberType())); deploy(workflow); WorkflowInstance workflowInstance = workflowEngine.start(new TriggerInstance() .workflowId(workflow.getId()) .data("v", Lists.of(5, 6))); GenericType genericType = new GenericType(List.class, Long.class); List<Long> listOfNumbers = workflowInstance.getVariableValue("v", genericType); assertEquals(new Long(5), listOfNumbers.get(0)); assertEquals(new Long(6), listOfNumbers.get(1)); } @Test public void testLinkType() { ExecutableWorkflow workflow = new ExecutableWorkflow() .variable("v", new LinkType()); deploy(workflow); WorkflowInstance workflowInstance = workflowEngine.start( new TriggerInstance().workflowId(workflow.getId()) .data("v", "http://www.effektif.com/")); Object link = workflowInstance.getVariableValue("v"); assertEquals("http://www.effektif.com/", link); } @Test public void testListOfLinkType() { ExecutableWorkflow workflow = new ExecutableWorkflow() .variable("v", new ListType(new LinkType())); deploy(workflow); WorkflowInstance workflowInstance = workflowEngine.start( new TriggerInstance().workflowId(workflow.getId()) .data("v", Lists.of( "http://effektif.com/", "http://signavio.com/"))); List<String> links = (List<String>) workflowInstance.getVariableValue("v"); assertEquals("http://effektif.com/", links.get(0)); assertEquals("http://signavio.com/", links.get(1)); } @Test public void testMoneyType() { ExecutableWorkflow workflow = new ExecutableWorkflow() .variable("v", new MoneyType()); deploy(workflow); WorkflowInstance workflowInstance = workflowEngine.start(new TriggerInstance() .workflowId(workflow.getId()) .data("v", new Money().amount(5d).currency("USD"))); Money money = workflowInstance.getVariableValue("v", Money.class); assertEquals(new Double(5d), money.getAmount()); assertEquals("USD", money.getCurrency()); } @Test public void testListOfMoneyType() { ExecutableWorkflow workflow = new ExecutableWorkflow() .variable("v", new ListType(new MoneyType())); deploy(workflow); WorkflowInstance workflowInstance = workflowEngine.start(new TriggerInstance() .workflowId(workflow.getId()) .data("v", Lists.of( new Money().amount(5d).currency("USD"), new Money().amount(6d).currency("EUR")))); List<Money> moneys = workflowInstance.getVariableValue("v"); assertEquals(new Double(5d), moneys.get(0).getAmount()); assertEquals("USD", moneys.get(0).getCurrency()); assertEquals(new Double(6d), moneys.get(1).getAmount()); assertEquals("EUR", moneys.get(1).getCurrency()); } public static class MyBean { String name; List<String> values; } @Test public void testJavaBeanType() { ExecutableWorkflow workflow = new ExecutableWorkflow() .variable("v", new JavaBeanType().javaClass(MyBean.class)); deploy(workflow); MyBean myBean = new MyBean(); WorkflowInstance workflowInstance = start(createTriggerInstance(workflow) .data("v", myBean)); MyBean retrievedBean = workflowInstance.getVariableValue("v"); assertNotNull(retrievedBean); } protected void assertEqualsVariableValue(String variableId, VariableValues expected, VariableValues actual) { assertEquals(expected.getValue(variableId), actual.getValue(variableId)); } }