using System.Net;
using System.Net.Http.Json;
using FluentAssertions;
using Microsoft.AspNetCore.Mvc.Testing;
using Xunit;
namespace SocialService.FunctionalTests.Controllers;
///
/// EN: Functional tests for Relationships API endpoints.
/// VI: Functional tests cho các endpoints API Relationships.
///
public class RelationshipsControllerTests : IClassFixture
{
private readonly HttpClient _client;
public RelationshipsControllerTests(CustomWebApplicationFactory factory)
{
_client = factory.CreateClient(new WebApplicationFactoryClientOptions
{
AllowAutoRedirect = false
});
}
#region Get Endpoints Tests
[Fact]
public async Task GetFriends_ValidUser_ReturnsOk()
{
// Arrange
var userId = Guid.NewGuid();
// Act
var response = await _client.GetAsync($"/api/v1/relationships/users/{userId}/friends");
// Assert
response.StatusCode.Should().Be(HttpStatusCode.OK);
}
[Fact]
public async Task GetMutualFriends_ValidUsers_ReturnsOk()
{
// Arrange
var userId1 = Guid.NewGuid();
var userId2 = Guid.NewGuid();
// Act
var response = await _client.GetAsync($"/api/v1/relationships/users/{userId1}/mutual-friends/{userId2}");
// Assert
response.StatusCode.Should().Be(HttpStatusCode.OK);
}
[Fact]
public async Task GetFriendSuggestions_ValidUser_ReturnsOk()
{
// Arrange
var userId = Guid.NewGuid();
// Act
var response = await _client.GetAsync($"/api/v1/relationships/users/{userId}/suggestions");
// Assert
response.StatusCode.Should().Be(HttpStatusCode.OK);
}
#endregion
#region Health Check Tests
[Fact]
public async Task HealthCheck_Live_ReturnsHealthy()
{
// Act
var response = await _client.GetAsync("/health/live");
// Assert
response.StatusCode.Should().Be(HttpStatusCode.OK);
}
#endregion
}