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