internal static void AssertNotInTerminalState(this IIdxResponse response) { if (response?.IdxMessages?.Messages?.Any() ?? false) { throw new TerminalStateException(response.IdxMessages); } }
internal static async Task <IIdxResponse> ProceedWithRemediationOptionAsync(this IIdxResponse response, string remediationType, IdxRequestPayload request, CancellationToken cancellationToken = default) { var remediationOption = response.FindRemediationOption(remediationType, true); return(await remediationOption .ProceedAsync(request, cancellationToken)); }
internal static IRemediationOption FindRemediationOption(this IIdxResponse response, string remediationType, bool throwIfNotFound = false) { var option = response .Remediation? .RemediationOptions? .FirstOrDefault(x => x.Name == remediationType); if (option == null && throwIfNotFound) { throw new UnexpectedRemediationException(remediationType, response); } return(option); }
private static string GetDetailedErrorMessage(IList <string> expectedRemediationNames, IIdxResponse receivedResponse) { var remediationNamesList = receivedResponse?.Remediation?.RemediationOptions?.Select(x => x.Name).ToList() ?? new List <string>(); return($@"Unexpected remediation step: Expected '['{string.Join(" or ", expectedRemediationNames)}']' but received ['{string.Join(",", remediationNamesList)}']. Verify that your policies are configured as expected."); }
/// <summary> /// Initializes a new instance of the <see cref="UnexpectedRemediationException"/> class. /// </summary> /// <param name="expectedRemediationNames">The expected remediation names.</param> /// <param name="receivedResponse">The received response.</param> public UnexpectedRemediationException(IList <string> expectedRemediationNames, IIdxResponse receivedResponse) : base(GetDetailedErrorMessage(expectedRemediationNames, receivedResponse)) { }
internal static bool ContainsRemediationOption(this IIdxResponse response, string remediationType) => response.Remediation?.RemediationOptions?.Any(x => x.Name == remediationType) ?? false;