Exemplo n.º 1
0
        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);
        }
Exemplo n.º 3
0
        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)));
        }