package brainslug.jpa; import brainslug.flow.builder.FlowBuilder; import brainslug.flow.context.BrainslugContext; import brainslug.flow.context.ExecutionContext; import brainslug.flow.definition.Identifier; import brainslug.flow.execution.expression.ContextPredicate; import brainslug.flow.execution.node.task.SimpleTask; import brainslug.flow.expression.PredicateExpression; import brainslug.flow.expression.Property; import brainslug.flow.node.EventDefinition; import brainslug.flow.node.TaskDefinition; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import static brainslug.flow.execution.property.ExecutionProperties.newProperties; public class CreateInstanceIT extends AbstractDatabaseTest { @Autowired BrainslugContext brainslugContext; @Test public void shouldCreateInstanceWithJpaStores() { brainslugContext.addFlowDefinition(new TestFlow().getDefinition()); brainslugContext.startFlow(TestFlow.id, newProperties() .with(TestFlow.emailAddress, "user@localhost")); } public static class TestFlow extends FlowBuilder { public static Identifier id = id("forgot_password"); public static Property<String> emailAddress = property(id("email"), String.class); public static Property<String> username = property(id("username"), String.class); public static Property<String> confirmationCode = property(id("code"), String.class); public static final Identifier confirmationReceivedId = id("confirmationReceivedId"); public EventDefinition confirmationReceived = event(confirmationReceivedId); public static EventDefinition passwordRequest = event(id("password_request")); public EventDefinition invalidEmail = event(id("invalid_email")); TaskDefinition sendConfirmationCode = task(id("send_confirmation_mail"), new SimpleTask() { @Override public void execute(ExecutionContext context) { } }); TaskDefinition sendNewPassword = task(id("send_new_password"), new SimpleTask() { @Override public void execute(ExecutionContext context) { } }); @Override public void define() { flowId(id); start(passwordRequest) .choice(id("user_exists")) .when(userExists()) .execute(sendConfirmationCode) .waitFor(confirmationReceived) .execute(sendNewPassword) .otherwise() .end(invalidEmail); } private PredicateExpression userExists() { return predicate(new ContextPredicate() { @Override public boolean isFulfilled(ExecutionContext context) { context.setProperty(TestFlow.username.getValue().stringValue(), "username"); return true; } }); } } }