Untitled
unknown
plain_text
4 years ago
23 kB
8
Indexable
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using App.BLL;
using App.BLL.DTO;
using App.Contracts.BLL;
using App.Public.DTO.v1.identity.Identity;
using App.Public.DTO.v1;
using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.Extensions.DependencyInjection;
using Moq;
using Xunit.Abstractions;
namespace Tests.WebApp.IntegrationTests;
public class CurrencyInWalletServiceUnitTests : IClassFixture<CustomWebApplicationFactory<Program>>
{
private readonly HttpClient _client;
private readonly CustomWebApplicationFactory<Program> _factory;
private readonly ITestOutputHelper _testOutputHelper;
//private readonly Mock<IAppBLL> _bllMock;
public CurrencyInWalletServiceUnitTests(CustomWebApplicationFactory<Program> factory,
ITestOutputHelper testOutputHelper)
{
_factory = factory;
_testOutputHelper = testOutputHelper;
_client = _factory.CreateClient(
new WebApplicationFactoryClientOptions
{
AllowAutoRedirect = false
}
);
/*
_bllMock = new Mock<IAppBLL>();
_bllMock.Setup(x => x.Wallet.GetAllAsync(true)).ReturnsAsync(new List<Wallet>()
{
new Wallet()
{
Id = Guid.Parse("1ba9f0f5-fada-4ab1-8710-1534b0b307d6"),
},
new Wallet()
{
Id = Guid.Parse("2ba9f0f5-fada-4ab1-8710-1534b0b307d6"),
}
});
_bllMock.Setup(x => x.CurrencyInWallet.GetAllAsync(true)).ReturnsAsync(new List<CurrencyInWallet>()
{
new CurrencyInWallet()
{
Amount = "1",
WalletId = Guid.Parse("1ba9f0f5-fada-4ab1-8710-1534b0b307d6"),
CurrencyId = Guid.Parse("2ba9f0f5-fada-4ab1-8710-1534b0b307d6")
}
});
_bllMock.Setup(x => x.Currency.GetAllAsync(true)).ReturnsAsync(new List<Currency>()
{
new Currency()
{
Id = Guid.Parse("2ba9f0f5-fada-4ab1-8710-1534b0b307d1")
},
new Currency()
{
Id = Guid.Parse("2ba9f0f5-fada-4ab1-8710-1534b0b307d2")
}
}
);*/
}
[Fact]
public async Task WalletFromHasFundsToSendAsset_CurrencyNotDouble_Test()
{
var loginDto = new Login()
{
Email = "test@test.ee",
Password = "Test_Password!"
};
var jsonStrLogIn = System.Text.Json.JsonSerializer.Serialize(loginDto);
var logInData = new StringContent(jsonStrLogIn, Encoding.UTF8, "application/json");
var responseLogIn = await _client.PostAsync("api/v1/identity/Account/LogIn", logInData);
responseLogIn.EnsureSuccessStatusCode();
var requestContent = await responseLogIn.Content.ReadAsStringAsync();
var resultJwt = System.Text.Json.JsonSerializer.Deserialize<JwtResponse>(
requestContent,
new JsonSerializerOptions() {PropertyNamingPolicy = JsonNamingPolicy.CamelCase}
);
var walletDTO = new WalletDTO()
{
WalletName = "Test_Wallet"
};
_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", resultJwt!.Token);
var jsonStrWallet = System.Text.Json.JsonSerializer.Serialize(walletDTO);
var walletCreationData = new StringContent(jsonStrWallet, Encoding.UTF8, "application/json");
var apiresponseCreateWallet = await _client.PostAsync("/api/v1/Wallet/", walletCreationData);
apiresponseCreateWallet.EnsureSuccessStatusCode();
var apiresponseWalletNowCreated = await _client.GetAsync("/api/v1/wallet/");
var requestWalletsCreated = await apiresponseWalletNowCreated.Content.ReadAsStringAsync();
var walletDtoFromResponse = System.Text.Json.JsonSerializer.Deserialize<List<WalletDTO>>(
requestWalletsCreated,
new JsonSerializerOptions() {PropertyNamingPolicy = JsonNamingPolicy.CamelCase}
);
var jsonStrBuy = System.Text.Json.JsonSerializer.Serialize(walletDTO);
var buyData = new StringContent(jsonStrBuy, Encoding.UTF8, "application/json");
var apiResponseBuy = await _client.PostAsync($"/api/v1/Buy/{walletDtoFromResponse!.First().Id}/BNB/ASD", buyData);
var requestBuy = await apiResponseBuy.Content.ReadAsStringAsync();
Assert.Contains("Amount is not a number", requestBuy);
}
[Fact]
public async Task WalletFromHasFundsToSendAsset_CurrencyNotInDb_Test()
{
var loginDto = new Login()
{
Email = "test@test.ee",
Password = "Test_Password!"
};
var jsonStrLogIn = System.Text.Json.JsonSerializer.Serialize(loginDto);
var logInData = new StringContent(jsonStrLogIn, Encoding.UTF8, "application/json");
var responseLogIn = await _client.PostAsync("api/v1/identity/Account/LogIn", logInData);
responseLogIn.EnsureSuccessStatusCode();
var requestContent = await responseLogIn.Content.ReadAsStringAsync();
var resultJwt = System.Text.Json.JsonSerializer.Deserialize<JwtResponse>(
requestContent,
new JsonSerializerOptions() {PropertyNamingPolicy = JsonNamingPolicy.CamelCase}
);
var walletDTO = new WalletDTO()
{
WalletName = "Test_Wallet"
};
_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", resultJwt!.Token);
var jsonStrWallet = System.Text.Json.JsonSerializer.Serialize(walletDTO);
var walletCreationData = new StringContent(jsonStrWallet, Encoding.UTF8, "application/json");
var apiresponseCreateWallet = await _client.PostAsync("/api/v1/Wallet/", walletCreationData);
apiresponseCreateWallet.EnsureSuccessStatusCode();
var apiresponseWalletNowCreated = await _client.GetAsync("/api/v1/wallet/");
var requestWalletsCreated = await apiresponseWalletNowCreated.Content.ReadAsStringAsync();
var walletDtoFromResponse = System.Text.Json.JsonSerializer.Deserialize<List<WalletDTO>>(
requestWalletsCreated,
new JsonSerializerOptions() {PropertyNamingPolicy = JsonNamingPolicy.CamelCase}
);
var jsonStrBuy = System.Text.Json.JsonSerializer.Serialize(walletDTO);
var buyData = new StringContent(jsonStrBuy, Encoding.UTF8, "application/json");
var apiResponseBuy = await _client.PostAsync($"/api/v1/Buy/{walletDtoFromResponse!.First().Id}/ASD/1", buyData);
var requestBuy = await apiResponseBuy.Content.ReadAsStringAsync();
Assert.Contains("Wallet or currency does not exist", requestBuy);
}
[Fact]
public async Task WalletFromHasFundsToSendAsset_WrongGuid_Test()
{
var loginDto = new Login()
{
Email = "test@test.ee",
Password = "Test_Password!"
};
var jsonStrLogIn = System.Text.Json.JsonSerializer.Serialize(loginDto);
var logInData = new StringContent(jsonStrLogIn, Encoding.UTF8, "application/json");
var responseLogIn = await _client.PostAsync("api/v1/identity/Account/LogIn", logInData);
responseLogIn.EnsureSuccessStatusCode();
var requestContent = await responseLogIn.Content.ReadAsStringAsync();
var resultJwt = System.Text.Json.JsonSerializer.Deserialize<JwtResponse>(
requestContent,
new JsonSerializerOptions() {PropertyNamingPolicy = JsonNamingPolicy.CamelCase}
);
var walletDTO = new WalletDTO()
{
WalletName = "Test_Wallet"
};
_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", resultJwt!.Token);
var jsonStrWallet = System.Text.Json.JsonSerializer.Serialize(walletDTO);
var walletCreationData = new StringContent(jsonStrWallet, Encoding.UTF8, "application/json");
var apiresponseCreateWallet = await _client.PostAsync("/api/v1/Wallet/", walletCreationData);
apiresponseCreateWallet.EnsureSuccessStatusCode();
var apiresponseWalletNowCreated = await _client.GetAsync("/api/v1/wallet/");
var requestWalletsCreated = await apiresponseWalletNowCreated.Content.ReadAsStringAsync();
var walletDtoFromResponse = System.Text.Json.JsonSerializer.Deserialize<List<WalletDTO>>(
requestWalletsCreated,
new JsonSerializerOptions() {PropertyNamingPolicy = JsonNamingPolicy.CamelCase}
);
var jsonStrBuy = System.Text.Json.JsonSerializer.Serialize(walletDTO);
var buyData = new StringContent(jsonStrBuy, Encoding.UTF8, "application/json");
var apiResponseBuy = await _client.PostAsync($"/api/v1/Buy/{Guid.NewGuid()}/ASD/1", buyData);
var requestBuy = await apiResponseBuy.Content.ReadAsStringAsync();
Assert.Contains("Wallet or currency does not exist", requestBuy);
}
[Fact]
public async Task WalletFromHasFundsToSendAsset_WalletDoesNotHaveEnoughFunds_Test()
{
var loginDto = new Login()
{
Email = "test@test.ee",
Password = "Test_Password!"
};
var jsonStrLogIn = System.Text.Json.JsonSerializer.Serialize(loginDto);
var logInData = new StringContent(jsonStrLogIn, Encoding.UTF8, "application/json");
var responseLogIn = await _client.PostAsync("api/v1/identity/Account/LogIn", logInData);
responseLogIn.EnsureSuccessStatusCode();
var requestContent = await responseLogIn.Content.ReadAsStringAsync();
var resultJwt = System.Text.Json.JsonSerializer.Deserialize<JwtResponse>(
requestContent,
new JsonSerializerOptions() {PropertyNamingPolicy = JsonNamingPolicy.CamelCase}
);
var walletDTO = new WalletDTO()
{
WalletName = "Test_Wallet"
};
_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", resultJwt!.Token);
var jsonStrWallet = System.Text.Json.JsonSerializer.Serialize(walletDTO);
var walletCreationData = new StringContent(jsonStrWallet, Encoding.UTF8, "application/json");
var apiresponseCreateWallet = await _client.PostAsync("/api/v1/Wallet/", walletCreationData);
apiresponseCreateWallet.EnsureSuccessStatusCode();
var apiresponseWalletNowCreated = await _client.GetAsync("/api/v1/wallet/");
var requestWalletsCreated = await apiresponseWalletNowCreated.Content.ReadAsStringAsync();
var walletDtoFromResponse = System.Text.Json.JsonSerializer.Deserialize<List<WalletDTO>>(
requestWalletsCreated,
new JsonSerializerOptions() {PropertyNamingPolicy = JsonNamingPolicy.CamelCase}
);
var jsonStrBuy = System.Text.Json.JsonSerializer.Serialize(walletDTO);
var buyData = new StringContent(jsonStrBuy, Encoding.UTF8, "application/json");
var apiResponseBuy = await _client.PostAsync($"/api/v1/Buy/{walletDtoFromResponse!.First().Id}/BNB/1000", buyData);
var requestBuy = await apiResponseBuy.Content.ReadAsStringAsync();
Assert.Contains("Wallet does not have enough funds to make this transaction", requestBuy);
}
[Fact]
public async Task WalletFromHasFundsToSendAsset_NegativeAmountToBeSent_Test()
{
var loginDto = new Login()
{
Email = "test@test.ee",
Password = "Test_Password!"
};
var jsonStrLogIn = System.Text.Json.JsonSerializer.Serialize(loginDto);
var logInData = new StringContent(jsonStrLogIn, Encoding.UTF8, "application/json");
var responseLogIn = await _client.PostAsync("api/v1/identity/Account/LogIn", logInData);
responseLogIn.EnsureSuccessStatusCode();
var requestContent = await responseLogIn.Content.ReadAsStringAsync();
var resultJwt = System.Text.Json.JsonSerializer.Deserialize<JwtResponse>(
requestContent,
new JsonSerializerOptions() {PropertyNamingPolicy = JsonNamingPolicy.CamelCase}
);
var walletDTO = new WalletDTO()
{
WalletName = "Test_Wallet"
};
_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", resultJwt!.Token);
var jsonStrWallet = System.Text.Json.JsonSerializer.Serialize(walletDTO);
var walletCreationData = new StringContent(jsonStrWallet, Encoding.UTF8, "application/json");
var apiresponseCreateWallet = await _client.PostAsync("/api/v1/Wallet/", walletCreationData);
apiresponseCreateWallet.EnsureSuccessStatusCode();
var apiresponseWalletNowCreated = await _client.GetAsync("/api/v1/wallet/");
var requestWalletsCreated = await apiresponseWalletNowCreated.Content.ReadAsStringAsync();
var walletDtoFromResponse = System.Text.Json.JsonSerializer.Deserialize<List<WalletDTO>>(
requestWalletsCreated,
new JsonSerializerOptions() {PropertyNamingPolicy = JsonNamingPolicy.CamelCase}
);
var jsonStrBuy = System.Text.Json.JsonSerializer.Serialize(walletDTO);
var buyData = new StringContent(jsonStrBuy, Encoding.UTF8, "application/json");
var apiResponseBuy = await _client.PostAsync($"/api/v1/Buy/{walletDtoFromResponse!.First().Id}/BNB/-1", buyData);
var requestBuy = await apiResponseBuy.Content.ReadAsStringAsync();
Assert.Contains("Negative amounts can not be Bought", requestBuy);
}
[Fact]
public async Task WalletFromHasFundsToSendAsset_SellNotExistingCurrency_Test()
{
var loginDto = new Login()
{
Email = "test@test.ee",
Password = "Test_Password!"
};
var jsonStrLogIn = System.Text.Json.JsonSerializer.Serialize(loginDto);
var logInData = new StringContent(jsonStrLogIn, Encoding.UTF8, "application/json");
var responseLogIn = await _client.PostAsync("api/v1/identity/Account/LogIn", logInData);
responseLogIn.EnsureSuccessStatusCode();
var requestContent = await responseLogIn.Content.ReadAsStringAsync();
var resultJwt = System.Text.Json.JsonSerializer.Deserialize<JwtResponse>(
requestContent,
new JsonSerializerOptions() {PropertyNamingPolicy = JsonNamingPolicy.CamelCase}
);
var walletDTO = new WalletDTO()
{
WalletName = "Test_Wallet"
};
_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", resultJwt!.Token);
var jsonStrWallet = System.Text.Json.JsonSerializer.Serialize(walletDTO);
var walletCreationData = new StringContent(jsonStrWallet, Encoding.UTF8, "application/json");
var apiresponseCreateWallet = await _client.PostAsync("/api/v1/Wallet/", walletCreationData);
apiresponseCreateWallet.EnsureSuccessStatusCode();
var apiresponseWalletNowCreated = await _client.GetAsync("/api/v1/wallet/");
var requestWalletsCreated = await apiresponseWalletNowCreated.Content.ReadAsStringAsync();
var walletDtoFromResponse = System.Text.Json.JsonSerializer.Deserialize<List<WalletDTO>>(
requestWalletsCreated,
new JsonSerializerOptions() {PropertyNamingPolicy = JsonNamingPolicy.CamelCase}
);
var jsonStrBuy = System.Text.Json.JsonSerializer.Serialize(walletDTO);
var buyData = new StringContent(jsonStrBuy, Encoding.UTF8, "application/json");
var apiResponseBuy = await _client.PostAsync($"/api/v1/Buy/{walletDtoFromResponse!.First().Id}/BNB/1", buyData);
var apiResponseSell = await _client.PostAsync($"/api/v1/Sell/{walletDtoFromResponse!.First().Id}/ASD/1", buyData);
var requestBuy = await apiResponseSell.Content.ReadAsStringAsync();
Assert.Contains("Wallet or currency does not exist", requestBuy);
}
[Fact]
public async Task WalletFromHasFundsToSendAsset_SellTooMuchOfCurrency_Test()
{
var loginDto = new Login()
{
Email = "test@test.ee",
Password = "Test_Password!"
};
var jsonStrLogIn = System.Text.Json.JsonSerializer.Serialize(loginDto);
var logInData = new StringContent(jsonStrLogIn, Encoding.UTF8, "application/json");
var responseLogIn = await _client.PostAsync("api/v1/identity/Account/LogIn", logInData);
responseLogIn.EnsureSuccessStatusCode();
var requestContent = await responseLogIn.Content.ReadAsStringAsync();
var resultJwt = System.Text.Json.JsonSerializer.Deserialize<JwtResponse>(
requestContent,
new JsonSerializerOptions() {PropertyNamingPolicy = JsonNamingPolicy.CamelCase}
);
var walletDTO = new WalletDTO()
{
WalletName = "Test_Wallet"
};
_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", resultJwt!.Token);
var jsonStrWallet = System.Text.Json.JsonSerializer.Serialize(walletDTO);
var walletCreationData = new StringContent(jsonStrWallet, Encoding.UTF8, "application/json");
var apiresponseCreateWallet = await _client.PostAsync("/api/v1/Wallet/", walletCreationData);
apiresponseCreateWallet.EnsureSuccessStatusCode();
var apiresponseWalletNowCreated = await _client.GetAsync("/api/v1/wallet/");
var requestWalletsCreated = await apiresponseWalletNowCreated.Content.ReadAsStringAsync();
var walletDtoFromResponse = System.Text.Json.JsonSerializer.Deserialize<List<WalletDTO>>(
requestWalletsCreated,
new JsonSerializerOptions() {PropertyNamingPolicy = JsonNamingPolicy.CamelCase}
);
var jsonStrBuy = System.Text.Json.JsonSerializer.Serialize(walletDTO);
var buyData = new StringContent(jsonStrBuy, Encoding.UTF8, "application/json");
var apiResponseBuy = await _client.PostAsync($"/api/v1/Buy/{walletDtoFromResponse!.First().Id}/BNB/1", buyData);
var apiResponseSell = await _client.PostAsync($"/api/v1/Sell/{walletDtoFromResponse!.First().Id}/BNB/59", buyData);
var requestBuy = await apiResponseSell.Content.ReadAsStringAsync();
Assert.Contains("Wallet does not have enough funds to make this transaction", requestBuy);
}
[Fact]
public async Task WalletFromHasFundsToSendAsset_SellNegavtiveAmountOfCurrency()
{
var loginDto = new Login()
{
Email = "test@test.ee",
Password = "Test_Password!"
};
var jsonStrLogIn = System.Text.Json.JsonSerializer.Serialize(loginDto);
var logInData = new StringContent(jsonStrLogIn, Encoding.UTF8, "application/json");
var responseLogIn = await _client.PostAsync("api/v1/identity/Account/LogIn", logInData);
responseLogIn.EnsureSuccessStatusCode();
var requestContent = await responseLogIn.Content.ReadAsStringAsync();
var resultJwt = System.Text.Json.JsonSerializer.Deserialize<JwtResponse>(
requestContent,
new JsonSerializerOptions() {PropertyNamingPolicy = JsonNamingPolicy.CamelCase}
);
var walletDTO = new WalletDTO()
{
WalletName = "Test_Wallet"
};
_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", resultJwt!.Token);
var jsonStrWallet = System.Text.Json.JsonSerializer.Serialize(walletDTO);
var walletCreationData = new StringContent(jsonStrWallet, Encoding.UTF8, "application/json");
var apiresponseCreateWallet = await _client.PostAsync("/api/v1/Wallet/", walletCreationData);
apiresponseCreateWallet.EnsureSuccessStatusCode();
var apiresponseWalletNowCreated = await _client.GetAsync("/api/v1/wallet/");
var requestWalletsCreated = await apiresponseWalletNowCreated.Content.ReadAsStringAsync();
var walletDtoFromResponse = System.Text.Json.JsonSerializer.Deserialize<List<WalletDTO>>(
requestWalletsCreated,
new JsonSerializerOptions() {PropertyNamingPolicy = JsonNamingPolicy.CamelCase}
);
var jsonStrBuy = System.Text.Json.JsonSerializer.Serialize(walletDTO);
var buyData = new StringContent(jsonStrBuy, Encoding.UTF8, "application/json");
var apiResponseBuy = await _client.PostAsync($"/api/v1/Buy/{walletDtoFromResponse!.First().Id}/BNB/1", buyData);
var apiResponseSell = await _client.PostAsync($"/api/v1/Sell/{walletDtoFromResponse!.First().Id}/BNB/-1", buyData);
var requestBuy = await apiResponseSell.Content.ReadAsStringAsync();
Assert.Contains("Negative amounts can not be sold", requestBuy);
}
}Editor is loading...