Exemple #1
0
        public async Task IntegrationTestApiServiceCreateWorkflowWithArguments()
        {
            using (var client = new HttpClient())
            {
                var workflowId      = Guid.NewGuid();
                var requestContract = new CreateWorkflowRequestContract <UpdateArgumentWorkflow>(
                    ArgumentContract.Create("TestArg", "Initial message"),
                    ArgumentContract.Create("SleepTime", 1000))
                {
                    WorkflowId = workflowId
                };

                var url      = "Workflow/Create".ToApiUrl(BaseApiAddress);
                var response = await client.PostAsync(url, requestContract.AsJsonContent());

                var responseString = await response.Content.ReadAsStringAsync();

                Assert.IsTrue(response.IsSuccessStatusCode);

                var contract = JsonHelper.Deserialize <CreateWorkflowResponseContract>(responseString);
                Assert.AreEqual(workflowId, contract.WorkflowId);

                // try getting workflow until it's complete
                var getUrl = "Workflow".ToApiUrl(BaseApiAddress, new KeyValuePair <string, object>("id", workflowId));

                GetWorkflowResponseContract getContract;
                var triesLeft = 100;
                do
                {
                    await Task.Delay(250);

                    var getResponse = await client.GetAsync(getUrl);

                    var getResponseString = await getResponse.Content.ReadAsStringAsync();

                    getContract = JsonHelper.Deserialize <GetWorkflowResponseContract>(getResponseString);
                }while (--triesLeft > 0 && !getContract.IsComplete);

                Assert.IsTrue(triesLeft > 0);
                Assert.AreEqual("Initial message", getContract.GetArgument <string>("OriginalArg"));
                Assert.AreEqual("Updated argument", getContract.GetArgument <string>("TestArg"));
            }
        }
Exemple #2
0
        public async Task <IHttpActionResult> CreateWorkflowAsync([FromBody] CreateWorkflowRequestContract request)
        {
            var workflow = WorkflowEngine.CreateWorkflowType(request.WorkflowType, request.Parameters);

            var instance = _engine.CreateWorkflow(workflow, request.WorkflowId);

            if (request.StartImmediately)
            {
                await Task.Run(async() => await instance.Start(request.GetArguments()));
            }

            if (request.WaitOnComplete)
            {
                await instance.Wait();
            }

            var contract = new CreateWorkflowResponseContract(instance);

            return(Json(contract));
        }
Exemple #3
0
        public async Task IntegrationTestApiServiceCreateWorkflow()
        {
            using (var client = new HttpClient())
            {
                var workflowId      = Guid.NewGuid();
                var requestContract = new CreateWorkflowRequestContract <UpdateArgumentWorkflow>
                {
                    WorkflowId = workflowId
                };

                var url      = "Workflow/Create".ToApiUrl(BaseApiAddress);
                var response = await client.PostAsync(url, requestContract.AsJsonContent());

                var responseString = await response.Content.ReadAsStringAsync();

                Assert.IsTrue(response.IsSuccessStatusCode);

                var contract = JsonHelper.Deserialize <GetWorkflowResponseContract>(responseString);
                Assert.AreEqual(workflowId, contract.WorkflowId);
            }
        }
Exemple #4
0
        public async Task IntegrationTestApiServiceWorkflowClientCreateAndAction()
        {
            using (var client = new WorkflowClient(BaseApiAddress))
            {
                var createRequest =
                    new CreateWorkflowRequestContract <PhoneCallWorkflow>(ArgumentContract.Create("CanDial", true));

                var createResponse = await client.CreateAsync(createRequest);

                var workflowId = createResponse.WorkflowId;

                await client.ActionAsync(new ActionWorkflowRequestContract(workflowId, "Call Dialed"));

                await client.ActionAsync(new ActionWorkflowRequestContract(workflowId, "No Answer"));

                var waitResponse = await client.WaitAsync(workflowId);

                Assert.AreEqual(
                    PhoneStates.Disconnected,
                    TypeHelper.ChangeType <PhoneStates>(waitResponse.WorkflowState));
                Assert.AreEqual("Hello World!", waitResponse.GetArgument <string>("Message"));
            }
        }