303 lines
9.4 KiB
C#
303 lines
9.4 KiB
C#
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<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, 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<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);
|
|
}
|
|
}
|
|
}
|