public async Task <QuerySingleResult <WorkflowState> > ChangeStateForArtifactAsync(int userId, string userName, int artifactId, WorkflowStateChangeParameter stateChangeParameter) { // We will be getting state information and then will construct the property constraints and post operation actions over here var stateChangeExecutor = new StateChangeExecutor(userId, new WorkflowStateChangeParameterEx(stateChangeParameter) { ArtifactId = artifactId, UserName = userName }, _sqlHelper, _stateChangeExecutorRepositories, new StateChangeExecutorHelper(_stateChangeExecutorRepositories), _workflowEventsMessagesHelper); return(await stateChangeExecutor.Execute()); }
public async Task GetTransitionsAsync_ChangeStateForArtifactAsync_SuccessfullyCallsRepo() { // Arrange int itemId = 1; int userId = 1; int workflowId = 4; int fromStateId = 2; int toStateId = 5; const int transitionId = 10; var vcArtifactInfo = new VersionControlArtifactInfo { Id = itemId, VersionCount = 10, LockedByUser = new UserGroup { Id = userId } }; _artifactVersionsRepositoryMock.Setup(t => t.IsItemDeleted(itemId)) .ReturnsAsync(false); _artifactVersionsRepositoryMock.Setup(t => t.GetVersionControlArtifactInfoAsync(itemId, null, 1)) .ReturnsAsync(vcArtifactInfo); _applicationSettingsRepositoryMock.Setup(t => t.GetTenantInfo(It.IsAny <IDbTransaction>())).ReturnsAsync(new TenantInfo() { TenantId = Guid.NewGuid().ToString() }); var wfStateChangeParam = new WorkflowStateChangeParameter { CurrentVersionId = 10, ToStateId = toStateId, FromStateId = fromStateId, TransitionId = transitionId }; var fromState = new WorkflowState { Id = fromStateId, WorkflowId = workflowId, Name = "Ready" }; var toState = new WorkflowState { Id = toStateId, Name = "Close", WorkflowId = workflowId }; _workflowRepositoryMock.Setup(t => t.GetStateForArtifactAsync(userId, itemId, int.MaxValue, true)) .ReturnsAsync(fromState); var transition = new WorkflowTransition() { FromState = fromState, Id = transitionId, ToState = toState, WorkflowId = workflowId, Name = "Ready to Closed" }; _workflowRepositoryMock.Setup( t => t.GetTransitionForAssociatedStatesAsync(userId, itemId, workflowId, fromStateId, toStateId, transitionId)) .ReturnsAsync(transition); _workflowRepositoryMock.Setup( t => t.GetWorkflowEventTriggersForTransition(userId, itemId, workflowId, fromStateId, toStateId, transitionId)) .ReturnsAsync(new WorkflowTriggersContainer()); _workflowRepositoryMock.Setup(t => t.ChangeStateForArtifactAsync(1, itemId, It.IsAny <WorkflowStateChangeParameterEx>(), It.IsAny <IDbTransaction>())) .ReturnsAsync(toState); // Act var result = await _workflowServiceMock.ChangeStateForArtifactAsync(1, "admin", itemId, wfStateChangeParam); // Assert Assert.AreEqual(toState, result.Item); Assert.AreEqual(QueryResultCode.Success, result.ResultCode); }
public async Task <IHttpActionResult> ChangeStateForArtifactAsync([FromUri] int artifactId, [FromBody] WorkflowStateChangeParameter stateChangeParameter) { // We assume that Session always exist as we have SessionRequired attribute if (artifactId <= 0 || stateChangeParameter == null || !ModelState.IsValid || stateChangeParameter.FromStateId == stateChangeParameter.ToStateId) { throw new BadRequestException("Please provide valid state change parameters"); } return(Ok(await _workflowService.ChangeStateForArtifactAsync(Session.UserId, Session.UserName, artifactId, stateChangeParameter))); }