test(free-battle): two-viewer PvP pairing flow

This commit is contained in:
gamer147
2026-06-12 21:28:00 -04:00
parent 4a09b03820
commit db298a0652

View File

@@ -62,4 +62,35 @@ public class FreeBattleControllerTests
Assert.That(data.GetProperty("node_server_url").GetString(), Is.EqualTo(""),
"Empty string, not absent — Phase 2 fix pattern.");
}
[Test]
public async Task DoMatching_unlimited_two_viewers_pair_PvP()
{
await using var factory = new SVSimTestFactory();
var v1 = await factory.SeedViewerAsync(steamId: 76_561_198_000_000_011UL, displayName: "Alice");
var v2 = await factory.SeedViewerAsync(steamId: 76_561_198_000_000_012UL, displayName: "Bob");
await factory.SeedGlobalsAsync();
await factory.SeedDeckAsync(v1, Format.Unlimited, 1);
await factory.SeedDeckAsync(v2, Format.Unlimited, 1);
// Alice polls first → parks.
var c1 = factory.CreateAuthenticatedClient(v1);
var r1 = await c1.PostAsJsonAsync("/unlimited_free_battle/do_matching", DoMatchingBody);
var j1 = JsonDocument.Parse(await r1.Content.ReadAsStringAsync()).RootElement;
Assert.That(j1.GetProperty("matching_state").GetInt32(), Is.EqualTo(3002));
// Bob polls — pairs, returns joiner (3004).
var c2 = factory.CreateAuthenticatedClient(v2);
var r2 = await c2.PostAsJsonAsync("/unlimited_free_battle/do_matching", DoMatchingBody);
var j2 = JsonDocument.Parse(await r2.Content.ReadAsStringAsync()).RootElement;
Assert.That(j2.GetProperty("matching_state").GetInt32(), Is.EqualTo(3004), "Joiner = 3004.");
Assert.That(j2.GetProperty("battle_id").GetString(), Is.Not.Null.And.Not.Empty);
Assert.That(j2.GetProperty("node_server_url").GetString(), Is.Not.Empty);
// Alice polls again — gets cached match, owner role (3007).
var r3 = await c1.PostAsJsonAsync("/unlimited_free_battle/do_matching", DoMatchingBody);
var j3 = JsonDocument.Parse(await r3.Content.ReadAsStringAsync()).RootElement;
Assert.That(j3.GetProperty("matching_state").GetInt32(), Is.EqualTo(3007), "Owner = 3007.");
Assert.That(j3.GetProperty("battle_id").GetString(), Is.EqualTo(j2.GetProperty("battle_id").GetString()));
}
}