using System.Net; using System.Net.Http.Json; using BrokerApiCore; using BrokerApiServer; using BrokerTest.Helper; using ServerCommon; using Xunit.Abstractions; namespace BrokerTest; public class PlanetUserControllerTests : IAsyncLifetime { private readonly ITestOutputHelper m_test_output_helper; // const string m_planet_id = "new_earth"; const string m_planet_id = "igm26_iggymob"; const string m_planet_secret_key = "A8h$KmP3sWxZqL5vYnR7uTgBdEjHkMlQoT1wXzCv"; const string m_user_guid = "1052b08b52ef4d69a27ee1f40911a72f"; //park chan heon const string m_account_id = "20462"; //40dbf485dc5b41508b7d53aa77819201 // const string m_account_id = "20437"; // const string m_user_guid = "40dbf485dc5b41508b7d53aa77819201"; private string m_planet_token = string.Empty; private readonly MetaTableTestHelper m_meta_table_test_helper = new(); // private readonly IBrokerTestServer m_server = new BrokerTestServer(); private readonly IBrokerTestServer m_server = new BrokerTestRemoteServer("https://dev.planethub.caliverse.io:12000"); public PlanetUserControllerTests(ITestOutputHelper testOutputHelper) { m_test_output_helper = testOutputHelper; } private HttpClient getTestClient() { var client = m_server.getTestClient(); if (m_planet_token != string.Empty) { client.DefaultRequestHeaders.Add("Authorization", $"Bearer {m_planet_token}"); } return client; } private HttpClient getTestClientWithBearer() { var client = m_server.getTestClient(); if (m_planet_token != string.Empty) { client.DefaultRequestHeaders.Add("Authorization", $"Bearer {m_planet_token}"); } return client; } public async Task InitializeAsync() { m_meta_table_test_helper.load(); // Arrange var client = getTestClient(); var request = new PlanetAuthRequest { PlanetId = m_planet_id, PlanetSecretKey = m_planet_secret_key }; // Act var response = await client.PostAsJsonAsync("/api/v1/planet/auth", request); // Assert response.EnsureSuccessStatusCode(); var response_body = await response.Content.ReadFromJsonAsync(); Assert.NotNull(response_body); Assert.NotEmpty(response_body.AccessToken); m_planet_token = response_body.AccessToken; } public async Task DisposeAsync() { await Task.CompletedTask; } private bool checkError(HttpResponseMessage responseMessage) { if (responseMessage.StatusCode != HttpStatusCode.OK) { var error_body = responseMessage.Content.ReadFromJsonAsync().Result; Assert.NotNull(error_body); m_test_output_helper.WriteLine(error_body.ErrorMessage ?? string.Empty); Assert.True(false); } return true; } [Fact(DisplayName = "아이템 교환 주문 컨트롤러 테스트 모든 Meta")] public async Task allMetaTests() { MetaTableTestHelper meta_table_test_helper = new(); meta_table_test_helper.load(); var meta = meta_table_test_helper.getMetaTableRef(); Assert.NotNull(meta); var meta_tuples = meta.MetaTable.PlanetItemExchangePolicyMetaTable.PlanetItemExchangePolicyDataList .Select(x => string.Equals(x.CaliverseItemType, CaliverseItemType.Currency.ToString(), StringComparison.CurrentCultureIgnoreCase) ? (x.ID, Random.Shared.Next(10, 201)) : (x.ID, 5)); // 테스트 이력용 foreach (var i in Enumerable.Range(0, 1)) { foreach (var meta_tuple in meta_tuples) { await orderTest(meta_tuple.Item1, meta_tuple.Item2); } } } // [Fact(DisplayName = "아이템 교환 주문 예외테스트")] // public async Task exceptionTests() // { // MetaTableTestHelper meta_table_test_helper = new(); // meta_table_test_helper.load(); // var meta = meta_table_test_helper.getMetaTableRef(); // Assert.NotNull(meta); // var meta_tuples = meta.MetaTable.PlanetItemExchangePolicyMetaTable.PlanetItemExchangePolicyDataList // .Select(x => // string.Equals(x.CaliverseItemType, CaliverseItemType.Currency.ToString(), // StringComparison.CurrentCultureIgnoreCase) // ? (x.ID, Random.Shared.Next(10, 201)) // : (x.ID, 1)); // foreach (var meta_tuple in meta_tuples) // { // await orderTest(meta_tuple.Item1, meta_tuple.Item2); // } // } private async Task dailyAmountExceedError(string metaId, int metaAmount, int totalDailyAmount) { const string TEST_SEASON_ID = "TEST_SEASON_ID"; string order_id; { // Arrange var request_uri = "/api/v1/planet/user/exchange/order/create"; var client = getTestClientWithBearer(); var exchange_request = new PlanetItemExchangeRequest { SeasonId = TEST_SEASON_ID, UserGuid = m_user_guid, ExchangeMetaId = metaId, ExchangeMetaAmount = metaAmount, }; // Act var exchange_response = await client.PostAsJsonAsync(request_uri, exchange_request); if (exchange_response.StatusCode == HttpStatusCode.BadRequest) { } // Assert checkError(exchange_response); var exchange_response_body = await exchange_response.Content.ReadFromJsonAsync(); Assert.NotNull(exchange_response_body); Assert.NotNull(exchange_response_body.ExchangeOrder.OrderId); order_id = exchange_response_body.ExchangeOrder.OrderId; } } private async Task orderTest(string metaId, int metaAmount) { const string TEST_SEASON_ID = "TEST_SEASON_ID"; string order_id; { // Arrange var request_uri = "/api/v1/planet/user/exchange/order/create"; var client = getTestClientWithBearer(); var exchange_request = new PlanetItemExchangeRequest { SeasonId = TEST_SEASON_ID, UserGuid = m_user_guid, ExchangeMetaId = metaId, ExchangeMetaAmount = metaAmount, }; // Act var exchange_response = await client.PostAsJsonAsync(request_uri, exchange_request); // Assert checkError(exchange_response); var exchange_response_body = await exchange_response.Content.ReadFromJsonAsync(); Assert.NotNull(exchange_response_body); Assert.NotNull(exchange_response_body.ExchangeOrder.OrderId); order_id = exchange_response_body.ExchangeOrder.OrderId; } { // Arrange var request_uri = "/api/v1/planet/user/exchange/order/list"; var client = getTestClientWithBearer(); var list_request = new PlanetItemExchangeOrderListRequest { PlanetId = m_planet_id, SeasonId = TEST_SEASON_ID, UserGuid = m_user_guid, Option = FindOption.All, ExchangeMetaId = metaId, }; // Act var list_response = await client.PostAsJsonAsync(request_uri, list_request); checkError(list_response); // Assert list_response.EnsureSuccessStatusCode(); var list_response_body = await list_response.Content.ReadFromJsonAsync(); Assert.NotNull(list_response_body); Assert.NotNull(list_response_body.Orders); var order = list_response_body.Orders.FirstOrDefault(x => x.OrderId == order_id); Assert.NotNull(order); Assert.Equal(ExchangeOrderStatus.Pending, order.OrderStatus); } { // Arrange var request_uri = "/api/v1/planet/user/exchange/order/list"; var client = getTestClientWithBearer(); var list_request = new PlanetItemExchangeOrderListRequest { PlanetId = m_planet_id, ExchangeMetaId = metaId, SeasonId = TEST_SEASON_ID, SsoAccountId = m_account_id, Option = FindOption.All, }; // Act var list_response = await client.PostAsJsonAsync(request_uri, list_request); checkError(list_response); // Assert list_response.EnsureSuccessStatusCode(); var list_response_body = await list_response.Content.ReadFromJsonAsync(); Assert.NotNull(list_response_body); Assert.NotNull(list_response_body.Orders); var order = list_response_body.Orders.FirstOrDefault(x => x.OrderId == order_id); Assert.NotNull(order); Assert.Equal(ExchangeOrderStatus.Pending, order.OrderStatus); } { // Arrange var request_uri = "/api/v1/planet/user/exchange/order/list"; var client = getTestClientWithBearer(); var list_request = new PlanetItemExchangeOrderListRequest { PlanetId = m_planet_id, ExchangeMetaId = "", SeasonId = TEST_SEASON_ID, SsoAccountId = m_account_id, Option = FindOption.All, }; // Act var list_response = await client.PostAsJsonAsync(request_uri, list_request); checkError(list_response); // Assert list_response.EnsureSuccessStatusCode(); var list_response_body = await list_response.Content.ReadFromJsonAsync(); Assert.NotNull(list_response_body); Assert.NotNull(list_response_body.Orders); var order = list_response_body.Orders.FirstOrDefault(x => x.OrderId == order_id); Assert.NotNull(order); Assert.Equal(ExchangeOrderStatus.Pending, order.OrderStatus); Assert.True(list_response_body.TotalCount > 0); } { // Arrange var request_uri = "/api/v1/planet/user/exchange/order/complete"; var client = getTestClientWithBearer(); // Act var complete_request = new PlanetItemExchangeCompleteRequest { UserGuid = m_user_guid, ExchangeOrderId = order_id }; var complete_response = await client.PostAsJsonAsync(request_uri, complete_request); checkError(complete_response); // Assert complete_response.EnsureSuccessStatusCode(); var complete_response_body = await complete_response.Content.ReadFromJsonAsync(); Assert.NotNull(complete_response_body); Assert.NotNull(complete_response_body.ExchangeOrder); Assert.Equal(order_id, complete_response_body.ExchangeOrder.OrderId); Assert.Equal(ExchangeOrderStatus.Completed, complete_response_body.ExchangeOrder.OrderStatus); } } }