Files
JiboExperiments/OpenJibo/tests/Jibo.Cloud.Tests/Fixtures/ProtocolFixtureLoader.cs
2026-04-11 21:19:35 -05:00

49 lines
2.0 KiB
C#

using System.Text.Json;
using Jibo.Cloud.Domain.Models;
namespace Jibo.Cloud.Tests.Fixtures;
internal static class ProtocolFixtureLoader
{
public static ProtocolFixture Load(string relativePath)
{
var fullPath = Path.Combine(AppContext.BaseDirectory, relativePath);
using var document = JsonDocument.Parse(File.ReadAllText(fullPath));
var root = document.RootElement;
var headers = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
if (root.TryGetProperty("headers", out var headerElement) && headerElement.ValueKind == JsonValueKind.Object)
{
foreach (var property in headerElement.EnumerateObject())
{
headers[property.Name] = property.Value.ToString();
}
}
var bodyText = root.TryGetProperty("body", out var bodyElement)
? bodyElement.GetRawText()
: string.Empty;
var target = headers.TryGetValue("x-amz-target", out var targetValue)
? targetValue
: string.Empty;
var targetParts = target.Split('.', 2, StringSplitOptions.RemoveEmptyEntries);
return new ProtocolFixture
{
Name = Path.GetFileNameWithoutExtension(relativePath),
Request = new ProtocolEnvelope
{
HostName = root.TryGetProperty("host", out var hostElement) ? hostElement.GetString() ?? "api.jibo.com" : "api.jibo.com",
Method = root.TryGetProperty("method", out var methodElement) ? methodElement.GetString() ?? "POST" : "POST",
Path = root.TryGetProperty("path", out var pathElement) ? pathElement.GetString() ?? "/" : "/",
Headers = headers,
ServicePrefix = targetParts.Length > 0 ? targetParts[0] : null,
Operation = targetParts.Length > 1 ? targetParts[1] : null,
BodyText = bodyText
},
ExpectedStatusCode = 200
};
}
}