neon-sprawl/server/NeonSprawl.Server.Tests/Game/Encounters/EncounterDefinitionsWorldAp...

51 lines
2.1 KiB
C#

using System.Linq;
using System.Net;
using System.Net.Http.Json;
using NeonSprawl.Server.Game.Encounters;
using Xunit;
namespace NeonSprawl.Server.Tests.Game.Encounters;
public class EncounterDefinitionsWorldApiTests
{
/// <summary>Frozen prototype encounter id. Keep in sync with Bruno.</summary>
public const string PrototypeCombatPocket = "prototype_combat_pocket";
[Fact]
public async Task GetEncounterDefinitions_ShouldReturnSchemaV1_WithFrozenEncounterAndNestedRewardTable()
{
// Arrange
await using var factory = new InMemoryWebApplicationFactory();
var client = factory.CreateClient();
// Act
var response = await client.GetAsync("/game/world/encounter-definitions");
// Assert
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
var body = await response.Content.ReadFromJsonAsync<EncounterDefinitionsListResponse>();
Assert.NotNull(body);
Assert.Equal(EncounterDefinitionsListResponse.CurrentSchemaVersion, body!.SchemaVersion);
Assert.NotNull(body.Encounters);
Assert.Single(body.Encounters);
var encounter = body.Encounters[0];
Assert.Equal(PrototypeCombatPocket, encounter.Id);
Assert.Equal("Prototype Combat Pocket", encounter.DisplayName);
Assert.NotNull(encounter.CompletionCriteria);
Assert.Equal("defeat_all_targets", encounter.CompletionCriteria.Kind);
Assert.Equal(
["prototype_npc_melee", "prototype_npc_ranged", "prototype_npc_elite"],
encounter.RequiredNpcInstanceIds);
Assert.NotNull(encounter.RewardTable);
Assert.Equal("prototype_combat_pocket_clear", encounter.RewardTable.Id);
Assert.Equal("Prototype Combat Pocket Clear", encounter.RewardTable.DisplayName);
Assert.Equal(2, encounter.RewardTable.FixedGrants.Count);
var scrapGrant = encounter.RewardTable.FixedGrants.Single(g => g.ItemId == "scrap_metal_bulk");
Assert.Equal(10, scrapGrant.Quantity);
var tokenGrant = encounter.RewardTable.FixedGrants.Single(g => g.ItemId == "contract_handoff_token");
Assert.Equal(1, tokenGrant.Quantity);
}
}