コード例 #1
0
        public async Task ProcessCreatedArtifacts_SendsSingleMessage_WhenSingleGenerateChildrenTriggerExistsForArtifact()
        {
            // Arrange
            _workflowRepoMock.Setup(t => t.GetWorkflowMessageArtifactInfoAsync(_userId,
                                                                               It.IsAny <IEnumerable <int> >(),
                                                                               _revisionId,
                                                                               It.IsAny <IDbTransaction>())).ReturnsAsync(_workflowMessageArtifactInfos);
            var workflowTriggersContainer = new WorkflowTriggersContainer();

            workflowTriggersContainer.AsynchronousTriggers.Add(new WorkflowEventTrigger
            {
                Name      = "Trigger One",
                Condition = new WorkflowEventCondition(),
                Action    = new GenerateChildrenAction
                {
                    ArtifactTypeId = ItemTypeId,
                    ChildCount     = 3
                }
            });
            _workflowRepoMock.Setup(t => t.GetWorkflowEventTriggersForNewArtifactEvent(_userId,
                                                                                       It.IsAny <IEnumerable <int> >(),
                                                                                       _revisionId, true)).ReturnsAsync(workflowTriggersContainer);

            // Act
            var result = await CreatedArtifactsNotificationHandler.ProcessCreatedArtifacts(_tenant,
                                                                                           _message,
                                                                                           _artifactsPublishedRepositoryMock.Object,
                                                                                           _serviceLogRepositoryMock.Object,
                                                                                           _wfMessagingMock.Object);

            // Assert
            Assert.IsTrue(result, "One message was sent successfully");
            _wfMessagingMock.Verify(m => m.SendMessageAsync(It.IsAny <string>(), It.IsAny <IWorkflowMessage>()), Times.Exactly(1));
        }
コード例 #2
0
        public async Task ProcessCreatedArtifacts_SendsMultipleMessages_WhenMultipleEmailNotificationTriggersExistForArtifact()
        {
            // Arrange
            _workflowRepoMock.Setup(t => t.GetWorkflowMessageArtifactInfoAsync(_userId, It.IsAny <IEnumerable <int> >(), _revisionId, It.IsAny <IDbTransaction>())).ReturnsAsync(_workflowMessageArtifactInfos);
            var workflowTriggersContainer = new WorkflowTriggersContainer();

            _workflowRepoMock.Setup(t => t.GetWorkflowEventTriggersForNewArtifactEvent(_userId, It.IsAny <IEnumerable <int> >(), _revisionId, true)).ReturnsAsync(workflowTriggersContainer);

            var workflowEventTriggers = new List <WorkflowEventTrigger>();

            for (int i = 0; i < 7; i++)
            {
                workflowEventTriggers.Add(
                    new WorkflowEventTrigger
                {
                    Name      = $"Email Notification Trigger {i}",
                    Condition = new WorkflowEventCondition(),
                    Action    = new EmailNotificationAction()
                });
            }
            workflowTriggersContainer.AsynchronousTriggers.AddRange(workflowEventTriggers);

            // Act
            var result = await CreatedArtifactsNotificationHandler.ProcessCreatedArtifacts(_tenant, _message, _artifactsPublishedRepositoryMock.Object, _serviceLogRepositoryMock.Object, _wfMessagingMock.Object);

            // Assert
            Assert.IsTrue(result, "Multiple messages were sent successfully");
            _wfMessagingMock.Verify(m => m.SendMessageAsync(It.IsAny <string>(), It.IsAny <IWorkflowMessage>()), Times.Exactly(workflowEventTriggers.Count));
        }
コード例 #3
0
        private static WorkflowTriggersContainer GetWorkflowTriggersContainer(WorkflowEventTriggers eventTriggers)
        {
            var workflowTriggersContainer = new WorkflowTriggersContainer();

            foreach (var workflowEventTrigger in eventTriggers.Where(t => t?.Action != null))
            {
                if (workflowEventTrigger.Action is IWorkflowEventSynchronousAction)
                {
                    workflowTriggersContainer.SynchronousTriggers.Add(workflowEventTrigger);
                }
                else if (workflowEventTrigger.Action is IWorkflowEventASynchronousAction)
                {
                    workflowTriggersContainer.AsynchronousTriggers.Add(workflowEventTrigger);
                }
            }
            return(workflowTriggersContainer);
        }
コード例 #4
0
        public async Task ProcessCreatedArtifacts_OnlySynchronousTriggersForArtifact_ReturnsFalseAndSendsNoMessages()
        {
            // Arrange
            _workflowRepoMock.Setup(t => t.GetWorkflowMessageArtifactInfoAsync(_userId, It.IsAny <IEnumerable <int> >(), _revisionId, It.IsAny <IDbTransaction>())).ReturnsAsync(_workflowMessageArtifactInfos);
            var workflowTriggersContainer = new WorkflowTriggersContainer();

            workflowTriggersContainer.SynchronousTriggers.Add(
                new WorkflowEventTrigger
            {
                Name      = "Property Change Trigger",
                Condition = new WorkflowEventCondition(),
                Action    = new PropertyChangeAction()
            });
            _workflowRepoMock.Setup(t => t.GetWorkflowEventTriggersForNewArtifactEvent(_userId, It.IsAny <IEnumerable <int> >(), _revisionId, true)).ReturnsAsync(workflowTriggersContainer);

            // Act
            var result = await CreatedArtifactsNotificationHandler.ProcessCreatedArtifacts(_tenant, _message, _artifactsPublishedRepositoryMock.Object, _serviceLogRepositoryMock.Object, _wfMessagingMock.Object);

            // Assert
            Assert.IsFalse(result, "No messages should be sent for synchronous triggers");
            _wfMessagingMock.Verify(m => m.SendMessageAsync(It.IsAny <string>(), It.IsAny <IWorkflowMessage>()), Times.Exactly(0));
        }
コード例 #5
0
        public async Task ExecuteInternal_WhenSynchronouTriggersErrors_ThrowsConflictException()
        {
            // Arrange
            _artifactVersionsRepository.Setup(t => t.IsItemDeleted(ArtifactId))
            .ReturnsAsync(false);
            _applicationSettingsRepositoryMock.Setup(t => t.GetTenantInfo(It.IsAny <IDbTransaction>())).ReturnsAsync(new TenantInfo()
            {
                TenantId = Guid.NewGuid().ToString()
            });

            var vcArtifactInfo = new VersionControlArtifactInfo
            {
                Id           = ArtifactId,
                VersionCount = CurrentVersionId,
                LockedByUser = new UserGroup
                {
                    Id = UserId
                }
            };

            _artifactVersionsRepository.Setup(t => t.GetVersionControlArtifactInfoAsync(ArtifactId, null, UserId))
            .ReturnsAsync(vcArtifactInfo);

            var fromState = new WorkflowState
            {
                Id         = FromStateId,
                WorkflowId = WorkflowId,
                Name       = "Ready"
            };

            _workflowRepository.Setup(t => t.GetStateForArtifactAsync(UserId, ArtifactId, int.MaxValue, true))
            .ReturnsAsync(fromState);

            var toState = new WorkflowState
            {
                Id         = ToStateId,
                Name       = "Close",
                WorkflowId = WorkflowId
            };
            var transition = new WorkflowTransition()
            {
                FromState  = fromState,
                Id         = TransitionId,
                ToState    = toState,
                WorkflowId = WorkflowId,
                Name       = "Ready to Closed"
            };

            _workflowRepository.Setup(
                t => t.GetTransitionForAssociatedStatesAsync(UserId, ArtifactId, WorkflowId, FromStateId, ToStateId, TransitionId))
            .ReturnsAsync(transition);

            var workflowEventAction = new Mock <IWorkflowEventAction>();

            workflowEventAction.Setup(a => a.ValidateAction(It.IsAny <IExecutionParameters>())).Returns(new PropertySetResult(-1, -1, ""));
            var triggerContainer = new WorkflowTriggersContainer();

            triggerContainer.SynchronousTriggers.Add(new WorkflowEventTrigger()
            {
                Action = workflowEventAction.Object,
                Name   = "Test'"
            });

            _workflowRepository.Setup(
                t => t.GetWorkflowEventTriggersForTransition(UserId, ArtifactId, WorkflowId, FromStateId, ToStateId, TransitionId))
            .ReturnsAsync(triggerContainer);

            _workflowRepository.Setup(t => t.ChangeStateForArtifactAsync(UserId, ArtifactId, It.IsAny <WorkflowStateChangeParameterEx>(), It.IsAny <IDbTransaction>()))
            .ReturnsAsync((WorkflowState)null);

            // Act
            await _stateChangeExecutor.Execute();
        }