public async Task BuildTriggerExecutionParameters_WhenTriggersAreEmpty_ReturnsNull() { // Arrange var result = await _stateChangeExecutorHelper.BuildTriggerExecutionParameters(1, null, new WorkflowEventTriggers(), null); // Assert Assert.IsNull(result); }
private Func <IDbTransaction, long, Task <StateChangeResult> > GetTransactionAction() { Func <IDbTransaction, long, Task <StateChangeResult> > action = async(transaction, transactionId) => { var publishRevision = await CreateRevision(transaction); _input.RevisionId = publishRevision; var artifactInfo = await _stateChangeExecutorRepositories.ArtifactVersionsRepository.GetVersionControlArtifactInfoAsync(_input.ArtifactId, null, _userId); await ValidateArtifact(artifactInfo); var currentState = await ValidateCurrentState(); var triggers = await _stateChangeExecutorRepositories.WorkflowRepository.GetWorkflowEventTriggersForTransition( _userId, _input.ArtifactId, currentState.WorkflowId, _input.FromStateId, _input.ToStateId, _input.TransitionId); var constraints = new List <IConstraint>(); await ProcessConstraints(constraints); var stateChangeResult = await ChangeStateForArtifactAsync(_input, transaction); var executionParameters = await _stateChangeExecutorHelper.BuildTriggerExecutionParameters(_userId, artifactInfo, triggers.SynchronousTriggers, transaction); var errors = await triggers.SynchronousTriggers.ProcessTriggers(executionParameters); var artifactResultSet = await PublishArtifacts(publishRevision, transaction); // Collecting all errors so that we can distinguish between errors at a later stage. if (errors.Count > 0) { await _stateChangeExecutorRepositories.ServiceLogRepository.LogInformation(LogSource, $"State cannot be modified as the trigger cannot be executed. {string.Join(", ", errors.Values)}"); throw new ConflictException("State cannot be modified as the trigger cannot be executed", ErrorCodes.WorkflowInvalidPropertyChange); } var result = new StateChangeResult { Result = stateChangeResult }; // Generate asynchronous messages for sending result.ActionMessages.AddRange(await _workflowEventsMessagesHelper.GenerateMessages( _userId, publishRevision, _input.UserName, transactionId, triggers.AsynchronousTriggers, artifactInfo, artifactResultSet?.Projects?.FirstOrDefault(d => d.Id == artifactInfo.ProjectId)?.Name, artifactResultSet?.ModifiedProperties, currentState, stateChangeResult.Item, true, null, null, _stateChangeExecutorRepositories.UsersRepository, _stateChangeExecutorRepositories.ServiceLogRepository, _stateChangeExecutorRepositories.WebhooksRepository, _stateChangeExecutorRepositories.ProjectMetaRepository, _stateChangeExecutorRepositories.ArtifactVersionsRepository, transaction)); await _workflowEventsMessagesHelper.ProcessMessages(LogSource, _stateChangeExecutorRepositories.ApplicationSettingsRepository, _stateChangeExecutorRepositories.ServiceLogRepository, result.ActionMessages, $"Error on successful transition of artifact: {_input.ArtifactId} from {_input.FromStateId} to {_input.ToStateId}", transaction); return(result); }; return(action); }