Closes #4
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
using System.Text.Json;
|
||||
|
||||
namespace FinalFactory.Rendezvous.Tests.Contracts;
|
||||
|
||||
public sealed class OpenApiCompatibilityTests
|
||||
{
|
||||
private static readonly string[] ExpectedPaths =
|
||||
[
|
||||
"/health/live",
|
||||
"/health/ready",
|
||||
"/v1/join-attempts",
|
||||
"/v1/join-attempts/{attemptId}/outcome",
|
||||
"/v1/sessions",
|
||||
"/v1/sessions/{listingId}",
|
||||
"/v1/sessions/{listingId}/join-attempts",
|
||||
"/v1/sessions/{listingId}/renew",
|
||||
];
|
||||
|
||||
private static readonly string[] ExpectedListingProperties =
|
||||
[
|
||||
"buildVersion",
|
||||
"capacity",
|
||||
"contractVersion",
|
||||
"displayName",
|
||||
"environmentId",
|
||||
"gameId",
|
||||
"listingId",
|
||||
"metadata",
|
||||
"protocolVersion",
|
||||
"publisherTrustMode",
|
||||
"regionId",
|
||||
"visibility",
|
||||
];
|
||||
|
||||
[Fact]
|
||||
public void GeneratedOpenApiContainsTheFrozenV1Surface()
|
||||
{
|
||||
string path = Path.Combine(
|
||||
ContractTestFiles.Directory,
|
||||
"../../../../../docs/api/rendezvous-v1.json");
|
||||
using JsonDocument document = JsonDocument.Parse(File.ReadAllText(Path.GetFullPath(path)));
|
||||
JsonElement root = document.RootElement;
|
||||
|
||||
Assert.Equal("3.1.1", root.GetProperty("openapi").GetString());
|
||||
string[] paths = root.GetProperty("paths")
|
||||
.EnumerateObject()
|
||||
.Select(static item => item.Name)
|
||||
.Order(StringComparer.Ordinal)
|
||||
.ToArray();
|
||||
Assert.Equal(ExpectedPaths, paths);
|
||||
|
||||
JsonElement schemas = root.GetProperty("components").GetProperty("schemas");
|
||||
Assert.Equal("string", schemas.GetProperty("GameId").GetProperty("type").GetString());
|
||||
Assert.Equal("uuid", schemas.GetProperty("SessionListingId").GetProperty("format").GetString());
|
||||
|
||||
string[] listingProperties = schemas.GetProperty("SessionListing")
|
||||
.GetProperty("properties")
|
||||
.EnumerateObject()
|
||||
.Select(static item => item.Name)
|
||||
.Order(StringComparer.Ordinal)
|
||||
.ToArray();
|
||||
Assert.Equal(ExpectedListingProperties, listingProperties);
|
||||
Assert.DoesNotContain(listingProperties, static property =>
|
||||
property.Contains("token", StringComparison.OrdinalIgnoreCase)
|
||||
|| property.Contains("endpoint", StringComparison.OrdinalIgnoreCase)
|
||||
|| property.Contains("playerId", StringComparison.OrdinalIgnoreCase));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user