Files
caliverse_server/BrokerApiTest/ControllerTests/QAPlanetUserControllerTests.cs
2025-05-01 07:23:28 +09:00

306 lines
9.5 KiB
C#

using System.Net;
using System.Net.Http.Json;
using BrokerApiCore;
using Xunit.Abstractions;
using ServerCommon;
using ServerCore;
using BrokerApiServer;
using BrokerTest.Helper;
namespace BrokerTest;
public class QaPlanetUserControllerTests : 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";
// tenafter71@gmail.com
string m_user_guid = "";
// tenafter71@gmail.com
const string m_account_id = "40305"; // 40305
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://qa.planethub.caliverse.io:12000");
public QaPlanetUserControllerTests(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()
{
if (m_user_guid.isNullOrWhiteSpace())
{
var helper = new TestUserHelper("QA");
m_user_guid = await helper.getUserGuidByAccountId(m_account_id);
}
Assert.NotEmpty(m_user_guid);
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<PlanetAuthResponse>();
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<ApiErrorResponse>().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, 1));
// 테스트 이력용
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<PlanetItemExchangeResponse>();
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<PlanetItemExchangeResponse>();
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<PlanetItemExchangeOrderListResponse>();
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<PlanetItemExchangeOrderListResponse>();
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<PlanetItemExchangeOrderListResponse>();
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<PlanetItemExchangeResponse>();
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);
}
}
}