namespace BrokerTest.Controllers; using System.Net; using System.Net.Http.Json; using System.Text.Json; using BrokerCore.ApiModels; using Helper; using Xunit; public class AccountControllerTests { private readonly BrokerTestServer m_server = new BrokerTestServer(); [Fact] public async Task initializeAsync() { await Task.CompletedTask; } [Fact] public async Task Login_ValidRequest_ReturnsOkWithLoginResponse() { // Arrange const string validToken = "valid_web_portal_token"; const string userGuid = "test_user_guid"; const string nickname = "test_nickname"; var client = m_server.getTestClient(); Assert.NotNull(client); var request = new LoginRequest { WebPortalToken = validToken }; // Act var response = await client.PostAsJsonAsync("/api/v1/account/login", request); // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); // ReadFromJsonAsync 사용 시, 올바른 options 주입 var login_response = await response.Content.ReadFromJsonAsync(); Assert.NotNull(login_response); Assert.Equal(userGuid, login_response.UserGuid); Assert.Equal(nickname, login_response.Nickname); // mockUserAuthService.Verify(m => m.authByWebPortalToken(validToken), Times.Once); //정확히 한번 호출되었는지 확인 // mockUserAuthService.VerifyGet(x=>x.UserGuid, Times.AtLeastOnce); //최소 한번 호출되었는지 확인 // mockUserAuthService.VerifyGet(x=>x.Nickname, Times.AtLeastOnce); } // [Fact] // public async Task Login_InvalidRequest_EmptyToken_ReturnsBadRequest() // { // // Arrange // var client = _factory.CreateClient(); // var request = new LoginRequest { WebPortalToken = "" }; // Empty token // // // Act // var response = await client.PostAsJsonAsync("/api/v1/account/login", request); // // // Assert // Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); // // //응답 내용 확인 (선택) // var errorResponse = await response.Content.ReadFromJsonAsync(_jsonOptions); // Assert.NotNull(errorResponse); // Assert.Equal((int)ServerErrorCode.InvalidRequest, errorResponse.Code); // Assert.Contains("WebPortalToken does not exist", errorResponse.Message); // // } // // [Fact] // public async Task Login_InvalidRequest_NullToken_ReturnsBadRequest() // { // // Arrange // var client = _factory.CreateClient(); // var request = new LoginRequest { WebPortalToken = null }; // null token // // // Act // var response = await client.PostAsJsonAsync("/api/v1/account/login", request); // // // // Assert // Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); // // //응답 내용 확인 (선택) // var errorResponse = await response.Content.ReadFromJsonAsync(_jsonOptions); // Assert.NotNull(errorResponse); // Assert.Equal((int)ServerErrorCode.InvalidRequest, errorResponse.Code); // Assert.Contains("WebPortalToken does not exist", errorResponse.Message); // } // [Fact] // public async Task Login_InvalidRequest_NullRequest_ReturnsBadRequest() // { // // Arrange // var client = _factory.CreateClient(); // LoginRequest? request = null; // Null request // // // Act // var response = await client.PostAsJsonAsync("/api/v1/account/login", request); // // // Assert // Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); // // //응답 내용 확인 (선택) // var errorResponse = await response.Content.ReadFromJsonAsync(_jsonOptions); // Assert.NotNull(errorResponse); // Assert.Equal((int)ServerErrorCode.InvalidRequest, errorResponse.Code); // Assert.Contains("Request is empty", errorResponse.Message); // } // // [Fact] // public async Task Login_AuthServiceReturnsFail_ReturnsBadRequest() // { // // Arrange // const string invalidToken = "invalid_token"; // // // Mock UserAuthService // var mockUserAuthService = new Mock(MockBehavior.Strict, null, null,null,null,null); // mockUserAuthService.Setup(m => m.authByWebPortalToken(invalidToken)) // .ReturnsAsync(Result.Fail(ServerErrorCode.InvalidToken, "Invalid token")); // // // var client = _factory.WithWebHostBuilder(builder => // { // builder.ConfigureTestServices(services => // { // services.AddScoped(_ => mockUserAuthService.Object); // }); // }).CreateClient(); // // // var request = new LoginRequest { WebPortalToken = invalidToken }; // // // Act // var response = await client.PostAsJsonAsync("/api/v1/account/login", request); // // // Assert // Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); // var errorResponse = await response.Content.ReadFromJsonAsync(_jsonOptions); // Assert.NotNull(errorResponse); // Assert.Equal((int)ServerErrorCode.InvalidToken, errorResponse.Code); // Assert.Equal("Invalid token", errorResponse.Message); // // mockUserAuthService.Verify(m=>m.authByWebPortalToken(invalidToken), Times.Once); // } // // [Fact] // public async Task Dummy_ValidRequest_ReturnsOk() // { // // Arrange // var client = _factory.CreateClient(); // var request = new DummyRequest { Dummy = "test" }; // // // Act // var response = await client.PostAsJsonAsync("/api/v1/account/dummy", request); // // // Assert // Assert.Equal(HttpStatusCode.OK, response.StatusCode); // var dummyResponse = await response.Content.ReadFromJsonAsync(); // Assert.NotNull(dummyResponse); // Assert.Equal("test", dummyResponse.Dummy); // } }