using System.Net; using System.Net.Http.Json; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using NeonSprawl.Server.Game.Combat; using NeonSprawl.Server.Game.Npc; using NeonSprawl.Server.Tests; using Xunit; namespace NeonSprawl.Server.Tests.Game.Combat; public sealed class CombatTargetFixtureApiTests { private const string FixturePath = "/game/__dev/combat-targets-fixture"; [Fact] public async Task PostCombatTargetFixture_ShouldResetPrototypeTargets_WhenEnabled() { // Arrange await using var factory = new InMemoryWebApplicationFactory(); var client = factory.CreateClient(); var store = factory.Services.GetRequiredService(); _ = store.TryApplyDamage(PrototypeNpcRegistry.PrototypeNpcMeleeId, 100, out _); // Act var response = await client.PostAsJsonAsync( FixturePath, new CombatTargetFixtureRequest { SchemaVersion = CombatTargetFixtureRequest.CurrentSchemaVersion, }); // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); var body = await response.Content.ReadFromJsonAsync(); Assert.NotNull(body); Assert.True(body!.Applied); store.TryGet(PrototypeNpcRegistry.PrototypeNpcMeleeId, out var melee); Assert.Equal(100, melee.CurrentHp); Assert.False(melee.Defeated); } [Fact] public async Task PostCombatTargetFixture_ShouldReturnNotFound_WhenRouteNotRegistered() { // Arrange await using var factory = new InMemoryWebApplicationFactory(); var client = factory.WithWebHostBuilder(b => { b.UseEnvironment("Production"); b.UseSetting("Game:EnableCombatTargetFixtureApi", "false"); }).CreateClient(); // Act var response = await client.PostAsJsonAsync( FixturePath, new CombatTargetFixtureRequest { SchemaVersion = CombatTargetFixtureRequest.CurrentSchemaVersion, }); // Assert Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); } }