using System.Net; using System.Net.Http.Json; using FluentAssertions; using MembershipService.API.Application.Commands; using Xunit; namespace MembershipService.FunctionalTests.Controllers; /// /// EN: Functional tests for MembersController - Authorization tests. /// VI: Functional tests cho MembersController - Tests Authorization. /// [Collection("Sequential")] public class MembersControllerTests : IClassFixture { private readonly CustomWebApplicationFactory _factory; public MembersControllerTests(CustomWebApplicationFactory factory) { _factory = factory; } #region Authorization Tests - All endpoints require auth [Fact] public async Task GetMembers_WithoutAuth_ShouldReturnUnauthorized() { // Arrange var client = _factory.CreateClient(); // Act var response = await client.GetAsync("/api/v1/members?page=1&pageSize=10"); // Assert response.StatusCode.Should().Be(HttpStatusCode.Unauthorized); } [Fact] public async Task GetMemberById_WithoutAuth_ShouldReturnUnauthorized() { // Arrange var client = _factory.CreateClient(); // Act var response = await client.GetAsync($"/api/v1/members/{Guid.NewGuid()}"); // Assert response.StatusCode.Should().Be(HttpStatusCode.Unauthorized); } [Fact] public async Task CreateMember_WithoutAuth_ShouldReturnUnauthorized() { // Arrange var client = _factory.CreateClient(); var command = new CreateMemberCommand { UserId = Guid.NewGuid(), CountryCode = "VN" }; // Act var response = await client.PostAsJsonAsync("/api/v1/members", command); // Assert response.StatusCode.Should().Be(HttpStatusCode.Unauthorized); } [Fact] public async Task AddExperience_WithoutAuth_ShouldReturnUnauthorized() { // Arrange var client = _factory.CreateClient(); var command = new AddExperienceCommand { Points = 50, SourceId = 1 }; // Act var response = await client.PostAsJsonAsync($"/api/v1/members/{Guid.NewGuid()}/experience", command); // Assert response.StatusCode.Should().Be(HttpStatusCode.Unauthorized); } [Fact] public async Task GetProgress_WithoutAuth_ShouldReturnUnauthorized() { // Arrange var client = _factory.CreateClient(); // Act var response = await client.GetAsync($"/api/v1/members/{Guid.NewGuid()}/progress"); // Assert response.StatusCode.Should().Be(HttpStatusCode.Unauthorized); } [Fact] public async Task GetExperienceHistory_WithoutAuth_ShouldReturnUnauthorized() { // Arrange var client = _factory.CreateClient(); // Act var response = await client.GetAsync($"/api/v1/members/{Guid.NewGuid()}/experience"); // Assert response.StatusCode.Should().Be(HttpStatusCode.Unauthorized); } #endregion }