// Copyright (c) 2025 Tudor Stanciu
using Bitip.Client.Services;
using Bitip.Client.Tests.Helpers;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Threading.Tasks;
using Xunit;
namespace Bitip.Client.Tests.Integration
{
///
/// Integration tests that make real API calls to a live Bitip instance.
/// These tests are DISABLED by default (TestConfiguration.UseRealApi = false).
///
public class RealApiIntegrationTests
{
private readonly IServiceProvider? _realServiceProvider;
public RealApiIntegrationTests()
{
_realServiceProvider = BitipClientTestFixture.CreateRealServiceProvider();
}
[Fact]
public async Task GetHealth_ReturnsHealthInfo()
{
// Skip if not configured for real API
if (!TestConfiguration.UseRealApi || _realServiceProvider == null)
return;
// Arrange
var client = _realServiceProvider.GetRequiredService();
// Act
var result = await client.GetHealth();
// Assert
Assert.NotNull(result);
Assert.NotNull(result.Status);
Assert.NotNull(result.Service);
Assert.True(result.Timestamp > DateTime.MinValue);
}
[Fact]
public async Task GetVersion_ReturnsVersionInfo()
{
// Skip if not configured for real API
if (!TestConfiguration.UseRealApi || _realServiceProvider == null)
return;
// Arrange
var client = _realServiceProvider.GetRequiredService();
// Act
var result = await client.GetVersion();
// Assert
Assert.NotNull(result);
Assert.NotNull(result.Version);
Assert.NotNull(result.CommitHash);
Assert.True(result.BuildDate > DateTime.MinValue);
}
[Fact]
public async Task GetIpLocation_ReturnsLocation()
{
// Skip if not configured for real API
if (!TestConfiguration.UseRealApi || _realServiceProvider == null)
return;
// Arrange
var client = _realServiceProvider.GetRequiredService();
// Act
var result = await client.GetIpLocation(TestConfiguration.ValidIpV4);
// Assert
Assert.NotNull(result);
Assert.Equal(TestConfiguration.ValidIpV4, result.Ip);
Assert.NotNull(result.Country);
Assert.NotNull(result.CountryCode);
Assert.NotNull(result.City);
}
[Fact]
public async Task GetDetailedIpLocation_ReturnsDetailedLocation()
{
// Skip if not configured for real API
if (!TestConfiguration.UseRealApi || _realServiceProvider == null)
return;
// Arrange
var client = _realServiceProvider.GetRequiredService();
// Act
var result = await client.GetDetailedIpLocation(TestConfiguration.ValidIpV4);
// Assert
Assert.NotNull(result);
Assert.Equal(TestConfiguration.ValidIpV4, result.Ip);
Assert.NotNull(result.Location);
Assert.NotNull(result.Asn);
}
}
}