67 lines
2.2 KiB
C#
67 lines
2.2 KiB
C#
using System.Net;
|
|
using System.Net.Http.Json;
|
|
using Microsoft.AspNetCore.Mvc.Testing;
|
|
using NeonSprawl.Server.Game.PositionState;
|
|
using Xunit;
|
|
|
|
namespace NeonSprawl.Server.Tests.Game.PositionState;
|
|
|
|
/// <summary>Integration tests for <see cref="NeonSprawl.Server.Game.PositionState.PositionStateApi"/> GET routes.</summary>
|
|
public class PositionStateApiTests(WebApplicationFactory<Program> factory)
|
|
: IClassFixture<WebApplicationFactory<Program>>
|
|
{
|
|
private readonly HttpClient _client = factory.CreateClient();
|
|
|
|
[Fact]
|
|
public async Task GetPosition_ShouldReturnVersionedPayloadAtOrigin_WhenDevPlayerRequested()
|
|
{
|
|
// Arrange
|
|
const string url = "/game/players/dev-local-1/position";
|
|
|
|
// Act
|
|
var response = await _client.GetAsync(url);
|
|
|
|
// Assert
|
|
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
|
|
var body = await response.Content.ReadFromJsonAsync<PositionStateResponse>();
|
|
Assert.NotNull(body);
|
|
Assert.Equal(PositionStateResponse.CurrentSchemaVersion, body.SchemaVersion);
|
|
Assert.Equal("dev-local-1", body.PlayerId);
|
|
Assert.NotNull(body.Position);
|
|
Assert.Equal(0, body.Position.X);
|
|
Assert.Equal(0, body.Position.Y);
|
|
Assert.Equal(0, body.Position.Z);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task GetPosition_ShouldReturnOk_WhenPathIdDiffersOnlyByCase()
|
|
{
|
|
// Arrange
|
|
const string url = "/game/players/DEV-LOCAL-1/position";
|
|
|
|
// Act
|
|
var response = await _client.GetAsync(url);
|
|
|
|
// Assert
|
|
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
|
|
var body = await response.Content.ReadFromJsonAsync<PositionStateResponse>();
|
|
Assert.NotNull(body);
|
|
Assert.Equal(PositionStateResponse.CurrentSchemaVersion, body!.SchemaVersion);
|
|
Assert.Equal("DEV-LOCAL-1", body.PlayerId);
|
|
Assert.Equal(0, body.Position!.X);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task GetPosition_ShouldReturnNotFound_WhenPlayerIsUnknown()
|
|
{
|
|
// Arrange
|
|
const string url = "/game/players/unknown-player/position";
|
|
|
|
// Act
|
|
var response = await _client.GetAsync(url);
|
|
|
|
// Assert
|
|
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
|
|
}
|
|
}
|