-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathMetadataTests.cs
More file actions
81 lines (63 loc) · 3.01 KB
/
MetadataTests.cs
File metadata and controls
81 lines (63 loc) · 3.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
using System.Net;
using System.Text.Json;
namespace OpenShock.API.IntegrationTests.Tests;
public sealed class MetadataTests
{
[ClassDataSource<WebApplicationFactory>(Shared = SharedType.PerTestSession)]
public required WebApplicationFactory WebApplicationFactory { get; init; }
[Test]
public async Task GetMetadata_ShouldMatchBackendInfoResponseContract()
{
using var client = WebApplicationFactory.CreateClient();
var response = await client.GetAsync("/1");
await Assert.That(response.StatusCode).IsEqualTo(HttpStatusCode.OK);
var mediaType = response.Content.Headers.ContentType?.MediaType;
await Assert.That(mediaType).IsEqualTo("application/json");
var json = await response.Content.ReadAsStringAsync();
using var doc = JsonDocument.Parse(json);
var root = doc.RootElement;
// Validate Message
var message = root.GetProperty("message").GetString();
await Assert.That(message).IsEqualTo("OpenShock");
// Fetch data
var data = root.GetProperty("data");
// Validate Version
var version = data.GetProperty("version").GetString();
await Assert.That(version).IsNotNullOrWhiteSpace();
// Validate Commit
var commit = data.GetProperty("commit").GetString();
await Assert.That(commit).Matches("[a-fA-F0-9]{4,64}");
// Validate CurrentTime
var currentTime = data.GetProperty("currentTime").GetDateTimeOffset();
await Assert.That(currentTime).IsBetween(
DateTimeOffset.UtcNow.AddSeconds(-5),
DateTimeOffset.UtcNow.AddSeconds(5)
);
// Validate FrontendUrl
var frontendUrlStr = data.GetProperty("frontendUrl").GetString();
await Assert.That(Uri.TryCreate(frontendUrlStr, UriKind.Absolute, out _))
.IsTrue();
// Validate ShortLinkUrl
var shortLinkUrlStr = data.GetProperty("shortLinkUrl").GetString();
await Assert.That(Uri.TryCreate(shortLinkUrlStr, UriKind.Absolute, out _))
.IsTrue();
// Validate TurnstileSiteKey (nullable, can be null or string)
var turnstileSiteKeyProp = data.GetProperty("turnstileSiteKey");
if (turnstileSiteKeyProp.ValueKind is not JsonValueKind.Null)
{
var turnstileSiteKey = turnstileSiteKeyProp.GetString();
await Assert.That(turnstileSiteKey).IsNotNullOrWhiteSpace();
}
// Validate OAuthProviders (string[])
var oauthProviders = data.GetProperty("oAuthProviders");
await Assert.That(oauthProviders.ValueKind).IsEqualTo(JsonValueKind.Array);
foreach (var provider in oauthProviders.EnumerateArray())
{
var p = provider.GetString();
await Assert.That(p).IsNotNullOrWhiteSpace();
}
// Validate IsUserAuthenticated (bool)
var isUserAuthenticated = data.GetProperty("isUserAuthenticated").GetBoolean();
await Assert.That(isUserAuthenticated).IsIn(true, false);
}
}