using System.Net; using System.Text.Json; using FluentAssertions; using Xunit; namespace Examples.Integration.Tests; /// /// Integration tests for the Inventory microservice endpoints. /// public sealed class InventoryEndpointTests : IClassFixture { 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"); } }