88 lines
4.5 KiB
C#
88 lines
4.5 KiB
C#
using System.Net.Http.Json;
|
|
using System.Text.Json;
|
|
using SVSim.UnitTests.Infrastructure;
|
|
|
|
namespace SVSim.UnitTests.Integration.Guild;
|
|
|
|
public class GuildCreateInfoFlowTests
|
|
{
|
|
[Test]
|
|
public async Task PostingCreate_then_Info_returns_populated_guild()
|
|
{
|
|
using var factory = new SVSimTestFactory();
|
|
long viewerId = await factory.SeedViewerAsync(
|
|
steamId: 76_561_198_200_000_001UL,
|
|
displayName: "AlphaIntPlayer");
|
|
|
|
using var client = factory.CreateAuthenticatedClient(viewerId);
|
|
|
|
// POST /guild/create — mirror the arena integration test style: include the base-request fields
|
|
const string Vid = "0"; const int Sid = 0; const string Stk = "";
|
|
var create = await client.PostAsync("/guild/create",
|
|
System.Net.Http.Json.JsonContent.Create(new { guild_name = "AlphaInt", activity = 1, join_condition = 1,
|
|
viewer_id = Vid, steam_id = Sid, steam_session_ticket = Stk }));
|
|
Assert.That(create.IsSuccessStatusCode, Is.True, $"create failed ({create.StatusCode}): {await create.Content.ReadAsStringAsync()}");
|
|
|
|
// POST /guild/info — expect JOINING state with guild populated
|
|
var info = await client.PostAsync("/guild/info",
|
|
System.Net.Http.Json.JsonContent.Create(new { viewer_id = Vid, steam_id = Sid, steam_session_ticket = Stk }));
|
|
var json = await info.Content.ReadAsStringAsync();
|
|
Assert.That(info.IsSuccessStatusCode, Is.True, $"info failed: {json}");
|
|
|
|
// In test mode (no UnityPlayer user-agent) the translation middleware is a no-op;
|
|
// the controller's raw DTO is returned directly (no {data_headers, data} envelope).
|
|
using var doc = JsonDocument.Parse(json);
|
|
var root = doc.RootElement;
|
|
|
|
Assert.That(root.GetProperty("guild_status").GetString(), Is.EqualTo("2"),
|
|
"guild_status should be JOINING (2)");
|
|
Assert.That(root.GetProperty("guild").GetProperty("detail").GetProperty("guild_name").GetString(),
|
|
Is.EqualTo("AlphaInt"));
|
|
Assert.That(root.GetProperty("guild").GetProperty("members").GetArrayLength(),
|
|
Is.EqualTo(1));
|
|
}
|
|
|
|
[Test]
|
|
public async Task PostingCreate_twice_returns_error_second_time()
|
|
{
|
|
using var factory = new SVSimTestFactory();
|
|
long viewerId = await factory.SeedViewerAsync(
|
|
steamId: 76_561_198_200_000_002UL,
|
|
displayName: "DoubleCreatePlayer");
|
|
|
|
using var client = factory.CreateAuthenticatedClient(viewerId);
|
|
|
|
const string Vid = "0"; const int Sid = 0; const string Stk = "";
|
|
var createBody = new { guild_name = "OnlyOnce", activity = 1, join_condition = 1,
|
|
viewer_id = Vid, steam_id = Sid, steam_session_ticket = Stk };
|
|
|
|
// First create should succeed
|
|
var first = await client.PostAsync("/guild/create",
|
|
System.Net.Http.Json.JsonContent.Create(createBody));
|
|
Assert.That(first.IsSuccessStatusCode, Is.True, $"First create failed: {await first.Content.ReadAsStringAsync()}");
|
|
var firstJson = await first.Content.ReadAsStringAsync();
|
|
using var firstDoc = JsonDocument.Parse(firstJson);
|
|
// In test mode (no envelope), result_code may be present (failure) or absent (success EmptyResponse).
|
|
// Success path returns EmptyResponse ({}), so result_code will not be present.
|
|
var firstRoot = firstDoc.RootElement;
|
|
if (firstRoot.TryGetProperty("result_code", out var rc1))
|
|
{
|
|
// If present it must not be 2 (error code).
|
|
Assert.That(rc1.GetInt32(), Is.Not.EqualTo(2), "First create must not error");
|
|
}
|
|
|
|
// Second create for the same viewer should return an error envelope (result_code = 2).
|
|
var secondBody = new { guild_name = "OnlyOnceAgain", activity = 1, join_condition = 1,
|
|
viewer_id = Vid, steam_id = Sid, steam_session_ticket = Stk };
|
|
var second = await client.PostAsync("/guild/create",
|
|
System.Net.Http.Json.JsonContent.Create(secondBody));
|
|
Assert.That(second.IsSuccessStatusCode, Is.True, "HTTP level should still be 200");
|
|
var secondJson = await second.Content.ReadAsStringAsync();
|
|
using var secondDoc = JsonDocument.Parse(secondJson);
|
|
// Error path: the MapErrorToWire helper returns { result_code = 2 }
|
|
Assert.That(secondDoc.RootElement.TryGetProperty("result_code", out var rc2), Is.True,
|
|
$"Second create should return result_code field, got: {secondJson}");
|
|
Assert.That(rc2.GetInt32(), Is.EqualTo(2), "Second create should fail with result_code=2");
|
|
}
|
|
}
|