in src/Testing/Emulator/Policies/ReturnResponseHandler.cs [40:91]
private void Handle(GatewayContext context, ReturnResponseConfig config)
{
MockResponse response = new();
if (!string.IsNullOrWhiteSpace(config.ResponseVariableName))
{
//copy variable
response = context.Variables[config.ResponseVariableName] as MockResponse ??
throw new ArgumentException($"Variable {config.ResponseVariableName} should be response");
}
if (config.Status is not null)
{
response.StatusCode = config.Status.Code;
response.StatusReason = config.Status.Reason;
}
foreach (var header in config.Headers ?? [])
{
switch (header.ExistsAction)
{
case "delete":
response.Headers.Remove(header.Name);
break;
case "skip":
if (!response.Headers.TryGetValue(header.Name, out _))
{
ArgumentNullException.ThrowIfNull(header.Values);
response.Headers[header.Name] = header.Values;
}
break;
case "append":
ArgumentNullException.ThrowIfNull(header.Values);
response.Headers[header.Name] = response.Headers.TryGetValue(header.Name, out var v)
? v.Concat(header.Values).ToArray()
: header.Values;
break;
case "override":
default:
ArgumentNullException.ThrowIfNull(header.Values);
response.Headers[header.Name] = header.Values;
break;
}
}
if (config.Body is not null)
{
response.Body.Content = config.Body.Content as string ?? throw new NotImplementedException();
}
context.Response = response;
}