diff --git a/PowerAutomateMockUp/FlowParser/ActionState.cs b/PowerAutomateMockUp/FlowParser/ActionState.cs index 2a4bb73..98caf64 100644 --- a/PowerAutomateMockUp/FlowParser/ActionState.cs +++ b/PowerAutomateMockUp/FlowParser/ActionState.cs @@ -18,23 +18,8 @@ public FlowResult() public class ActionState { - private ValueContainer? _actionInput; #nullable enable - public ValueContainer? ActionInput - { - get => _actionInput; - set - { - _actionInput = value; - if (_actionInput == null || _actionInput.Type() != ValueContainer.ValueType.Object) return; - if (_actionInput.AsDict().ContainsKey("parameters")) - { - ActionParameters = _actionInput.AsDict()["parameters"]; - } - } - } - - public ValueContainer? ActionParameters { set; get; } + public ValueContainer? ActionInput { get; set; } public ActionResult? ActionOutput { get; set; } #nullable disable diff --git a/PowerAutomateMockUp/FlowParser/FlowRunner.cs b/PowerAutomateMockUp/FlowParser/FlowRunner.cs index 2efe206..45d4914 100644 --- a/PowerAutomateMockUp/FlowParser/FlowRunner.cs +++ b/PowerAutomateMockUp/FlowParser/FlowRunner.cs @@ -114,9 +114,12 @@ private async Task RunFlow() if (_flowRunnerSettings.LogActionsStates) { + var jsonInputs = currentAd.First?.SelectToken("$.inputs"); + _actionSates[currentAd.Name] = new ActionState { - ActionInput = actionExecutor?.Inputs, + ActionInput = actionExecutor?.Inputs ?? + (jsonInputs == null ? null : new ValueContainer(jsonInputs)), ActionOutput = actionResult, ActionOrder = _actionsExecuted++, ActionName = actionExecutor?.ActionName @@ -151,7 +154,7 @@ private async Task RunFlow() if (currentAd == null && actionResultStatus == ActionStatus.Failed) { _logger.LogError( - "No succeeding action found after last action had status: Failed. Throwing error."); + "No succeeding action found after last action had status: Failed. Throwing error"); throw actionResult?.ActionExecutorException ?? new PowerAutomateMockUpException( $"No exception recorded - {actionExecutor.ActionName} ended with status: Failed."); diff --git a/PowerAutomateMockUp/FlowRunnerDependencyExtension.cs b/PowerAutomateMockUp/FlowRunnerDependencyExtension.cs index 8df1625..ab33dc4 100644 --- a/PowerAutomateMockUp/FlowRunnerDependencyExtension.cs +++ b/PowerAutomateMockUp/FlowRunnerDependencyExtension.cs @@ -1,9 +1,11 @@ -using Microsoft.Extensions.DependencyInjection; +using System.Diagnostics; +using Microsoft.Extensions.DependencyInjection; using Parser.ExpressionParser; using Parser.ExpressionParser.Functions.Base; using Parser.ExpressionParser.Functions.Implementations.CollectionFunctions; using Parser.ExpressionParser.Functions.Implementations.ConversionFunctions; using Parser.ExpressionParser.Functions.Implementations.LogicalComparisonFunctions; +using Parser.ExpressionParser.Functions.Implementations.Miscellaneous; using Parser.ExpressionParser.Functions.Implementations.StringFunctions; using Parser.ExpressionParser.Functions.Storage; using Parser.FlowParser; @@ -33,6 +35,7 @@ public static void AddFlowRunner(this IServiceCollection services) AddStringFunctions(services); AddCollectionFunction(services); AddConversionFunction(services); + AddMiscellaneousFunctions(services); services.AddTransient(); services.AddTransient(); @@ -52,6 +55,11 @@ public static void AddFlowRunner(this IServiceCollection services) services.AddLogging(); } + private static void AddMiscellaneousFunctions(IServiceCollection services) + { + services.AddTransient(); + } + private static void AddStringFunctions(IServiceCollection services) { services.AddTransient(); diff --git a/Test/FullFlowTestV2.cs b/Test/FullFlowTestV2.cs index ee04a16..6ff2805 100644 --- a/Test/FullFlowTestV2.cs +++ b/Test/FullFlowTestV2.cs @@ -23,6 +23,12 @@ public async Task TestFlowFalse() var services = new ServiceCollection(); services.AddFlowRunner(); + const string authentication = "Custom value"; + services.Configure(x => x.Parameters = new Dictionary + { + {"$authentication", new ValueContainer(authentication)} + }); + services.AddFlowActionByName(UpdateAccountInvalidId.FlowActionName); services.AddFlowActionByApiIdAndOperationsName(SendEmailNotification.ApiId, SendEmailNotification.SupportedOperations); @@ -47,16 +53,25 @@ public async Task TestFlowFalse() const string actionName = "Send_me_an_email_notification"; Assert.IsTrue(flowResult.ActionStates.ContainsKey(actionName), "Action is expected to be triggered."); - Assert.NotNull(flowResult.ActionStates[actionName].ActionParameters, "Action input is expected."); - var actionInput = flowResult.ActionStates[actionName].ActionParameters.AsDict(); - Assert.IsTrue(actionInput.ContainsKey("NotificationEmailDefinition"), "Action input should contain this object."); + Assert.NotNull(flowResult.ActionStates[actionName].ActionInput?["parameters"], "Action input is expected."); + var actionInput = flowResult.ActionStates[actionName].ActionInput?["parameters"].AsDict(); + Assert.IsTrue(actionInput.ContainsKey("NotificationEmailDefinition"), + "Action input should contain this object."); var notification = actionInput["NotificationEmailDefinition"].AsDict(); - Assert.AreEqual("A new Account have been added", notification["notificationSubject"].GetValue(), "Asserting the input"); - - Assert.IsFalse(flowResult.ActionStates.ContainsKey(SendOutWarning.FlowActionName), "Action is not expected to be triggered."); + Assert.AreEqual("A new Account have been added", notification["notificationSubject"].GetValue(), + "Asserting the input"); + + Assert.IsFalse(flowResult.ActionStates.ContainsKey(SendOutWarning.FlowActionName), + "Action is not expected to be triggered."); + + var getRecordValidIdActionAuth = + flowResult.ActionStates["Get_a_record_-_Valid_Id"].ActionInput?["authentication"]; + Assert.IsNotNull(getRecordValidIdActionAuth); + Assert.AreEqual(ValueContainer.ValueType.String, getRecordValidIdActionAuth.Type()); + Assert.AreEqual(authentication, getRecordValidIdActionAuth.GetValue()); } - private class UpdateAccountInvalidId : OpenApiConnectionActionExecutorBase + private class UpdateAccountInvalidId : OpenApiConnectionActionExecutorBase { public const string FlowActionName = "Update_Account_-_Invalid_Id";