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")); } }
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)); }
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); } }
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")); } }