Files
git.stella-ops.org/docs/router/examples/tests/Examples.Integration.Tests/InventoryEndpointTests.cs
2025-12-25 23:10:09 +02:00

75 lines
2.1 KiB
C#

using System.Net;
using System.Text.Json;
using FluentAssertions;
using Xunit;
namespace Examples.Integration.Tests;
/// <summary>
/// Integration tests for the Inventory microservice endpoints.
/// </summary>
public sealed class InventoryEndpointTests : IClassFixture<GatewayFixture>
{
private readonly GatewayFixture _fixture;
public InventoryEndpointTests(GatewayFixture fixture)
{
_fixture = fixture;
}
[Fact]
public async Task ListItems_WithoutFilters_ReturnsAllItems()
{
// Act
var response = await _fixture.GatewayClient.GetAsync("/items");
// Assert
response.StatusCode.Should().Be(HttpStatusCode.OK);
var content = await response.Content.ReadAsStringAsync();
content.Should().Contain("items");
content.Should().Contain("totalCount");
}
[Fact]
public async Task ListItems_WithCategoryFilter_ReturnsFilteredItems()
{
// Act
var response = await _fixture.GatewayClient.GetAsync("/items?category=widgets");
// Assert
response.StatusCode.Should().Be(HttpStatusCode.OK);
var content = await response.Content.ReadAsStringAsync();
content.Should().Contain("widgets");
}
[Fact]
public async Task ListItems_WithPagination_ReturnsPaginatedResponse()
{
// Act
var response = await _fixture.GatewayClient.GetAsync("/items?page=1&pageSize=10");
// Assert
response.StatusCode.Should().Be(HttpStatusCode.OK);
var content = await response.Content.ReadAsStringAsync();
content.Should().Contain("\"page\":1");
content.Should().Contain("\"pageSize\":10");
}
[Fact]
public async Task GetItem_WithValidSku_ReturnsItem()
{
// Arrange
var sku = "SKU-001";
// Act
var response = await _fixture.GatewayClient.GetAsync($"/items/{sku}");
// Assert
response.StatusCode.Should().Be(HttpStatusCode.OK);
var content = await response.Content.ReadAsStringAsync();
content.Should().Contain(sku);
content.Should().Contain("name");
content.Should().Contain("quantityOnHand");
}
}