Included file-scoped namespaces Basket.FunctionalTests
This commit is contained in:
parent
886c6070c6
commit
4e6700d3c6
@ -1,31 +1,26 @@
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using System.Security.Claims;
|
||||
using System.Threading.Tasks;
|
||||
namespace Basket.FunctionalTests.Base;
|
||||
|
||||
namespace Basket.FunctionalTests.Base
|
||||
class AutoAuthorizeMiddleware
|
||||
{
|
||||
class AutoAuthorizeMiddleware
|
||||
public const string IDENTITY_ID = "9e3163b9-1ae6-4652-9dc6-7898ab7b7a00";
|
||||
|
||||
private readonly RequestDelegate _next;
|
||||
|
||||
public AutoAuthorizeMiddleware(RequestDelegate rd)
|
||||
{
|
||||
public const string IDENTITY_ID = "9e3163b9-1ae6-4652-9dc6-7898ab7b7a00";
|
||||
_next = rd;
|
||||
}
|
||||
|
||||
private readonly RequestDelegate _next;
|
||||
public async Task Invoke(HttpContext httpContext)
|
||||
{
|
||||
var identity = new ClaimsIdentity("cookies");
|
||||
|
||||
public AutoAuthorizeMiddleware(RequestDelegate rd)
|
||||
{
|
||||
_next = rd;
|
||||
}
|
||||
identity.AddClaim(new Claim("sub", IDENTITY_ID));
|
||||
identity.AddClaim(new Claim("unique_name", IDENTITY_ID));
|
||||
identity.AddClaim(new Claim(ClaimTypes.Name, IDENTITY_ID));
|
||||
|
||||
public async Task Invoke(HttpContext httpContext)
|
||||
{
|
||||
var identity = new ClaimsIdentity("cookies");
|
||||
httpContext.User.AddIdentity(identity);
|
||||
|
||||
identity.AddClaim(new Claim("sub", IDENTITY_ID));
|
||||
identity.AddClaim(new Claim("unique_name", IDENTITY_ID));
|
||||
identity.AddClaim(new Claim(ClaimTypes.Name, IDENTITY_ID));
|
||||
|
||||
httpContext.User.AddIdentity(identity);
|
||||
|
||||
await _next.Invoke(httpContext);
|
||||
}
|
||||
await _next.Invoke(httpContext);
|
||||
}
|
||||
}
|
||||
|
@ -1,43 +1,36 @@
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.TestHost;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
namespace Basket.FunctionalTests.Base;
|
||||
|
||||
namespace Basket.FunctionalTests.Base
|
||||
public class BasketScenarioBase
|
||||
{
|
||||
public class BasketScenarioBase
|
||||
private const string ApiUrlBase = "api/v1/basket";
|
||||
|
||||
public TestServer CreateServer()
|
||||
{
|
||||
private const string ApiUrlBase = "api/v1/basket";
|
||||
var path = Assembly.GetAssembly(typeof(BasketScenarioBase))
|
||||
.Location;
|
||||
|
||||
public TestServer CreateServer()
|
||||
{
|
||||
var path = Assembly.GetAssembly(typeof(BasketScenarioBase))
|
||||
.Location;
|
||||
|
||||
var hostBuilder = new WebHostBuilder()
|
||||
.UseContentRoot(Path.GetDirectoryName(path))
|
||||
.ConfigureAppConfiguration(cb =>
|
||||
{
|
||||
cb.AddJsonFile("appsettings.json", optional: false)
|
||||
.AddEnvironmentVariables();
|
||||
}).UseStartup<BasketTestsStartup>();
|
||||
|
||||
return new TestServer(hostBuilder);
|
||||
}
|
||||
|
||||
public static class Get
|
||||
{
|
||||
public static string GetBasket(int id)
|
||||
var hostBuilder = new WebHostBuilder()
|
||||
.UseContentRoot(Path.GetDirectoryName(path))
|
||||
.ConfigureAppConfiguration(cb =>
|
||||
{
|
||||
return $"{ApiUrlBase}/{id}";
|
||||
}
|
||||
}
|
||||
cb.AddJsonFile("appsettings.json", optional: false)
|
||||
.AddEnvironmentVariables();
|
||||
}).UseStartup<BasketTestsStartup>();
|
||||
|
||||
public static class Post
|
||||
return new TestServer(hostBuilder);
|
||||
}
|
||||
|
||||
public static class Get
|
||||
{
|
||||
public static string GetBasket(int id)
|
||||
{
|
||||
public static string Basket = $"{ApiUrlBase}/";
|
||||
public static string CheckoutOrder = $"{ApiUrlBase}/checkout";
|
||||
return $"{ApiUrlBase}/{id}";
|
||||
}
|
||||
}
|
||||
|
||||
public static class Post
|
||||
{
|
||||
public static string Basket = $"{ApiUrlBase}/";
|
||||
public static string CheckoutOrder = $"{ApiUrlBase}/checkout";
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,4 @@
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Routing;
|
||||
using Microsoft.eShopOnContainers.Services.Basket.API;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using System;
|
||||
|
||||
|
||||
namespace Basket.FunctionalTests.Base
|
||||
{
|
||||
|
@ -1,18 +1,13 @@
|
||||
using Microsoft.AspNetCore.TestHost;
|
||||
using System;
|
||||
using System.Net.Http;
|
||||
namespace Basket.FunctionalTests.Base;
|
||||
|
||||
namespace Basket.FunctionalTests.Base
|
||||
static class HttpClientExtensions
|
||||
{
|
||||
static class HttpClientExtensions
|
||||
public static HttpClient CreateIdempotentClient(this TestServer server)
|
||||
{
|
||||
public static HttpClient CreateIdempotentClient(this TestServer server)
|
||||
{
|
||||
var client = server.CreateClient();
|
||||
var client = server.CreateClient();
|
||||
|
||||
client.DefaultRequestHeaders.Add("x-requestid", Guid.NewGuid().ToString());
|
||||
client.DefaultRequestHeaders.Add("x-requestid", Guid.NewGuid().ToString());
|
||||
|
||||
return client;
|
||||
}
|
||||
return client;
|
||||
}
|
||||
}
|
||||
|
@ -1,95 +1,85 @@
|
||||
using Basket.FunctionalTests.Base;
|
||||
using Microsoft.eShopOnContainers.Services.Basket.API.Model;
|
||||
using System;
|
||||
using System.Net.Http;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit;
|
||||
namespace Basket.FunctionalTests;
|
||||
|
||||
namespace Basket.FunctionalTests
|
||||
public class BasketScenarios
|
||||
: BasketScenarioBase
|
||||
{
|
||||
public class BasketScenarios
|
||||
: BasketScenarioBase
|
||||
[Fact]
|
||||
public async Task Post_basket_and_response_ok_status_code()
|
||||
{
|
||||
[Fact]
|
||||
public async Task Post_basket_and_response_ok_status_code()
|
||||
using (var server = CreateServer())
|
||||
{
|
||||
using (var server = CreateServer())
|
||||
{
|
||||
var content = new StringContent(BuildBasket(), UTF8Encoding.UTF8, "application/json");
|
||||
var response = await server.CreateClient()
|
||||
.PostAsync(Post.Basket, content);
|
||||
var content = new StringContent(BuildBasket(), UTF8Encoding.UTF8, "application/json");
|
||||
var response = await server.CreateClient()
|
||||
.PostAsync(Post.Basket, content);
|
||||
|
||||
response.EnsureSuccessStatusCode();
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Get_basket_and_response_ok_status_code()
|
||||
{
|
||||
using (var server = CreateServer())
|
||||
{
|
||||
var response = await server.CreateClient()
|
||||
.GetAsync(Get.GetBasket(1));
|
||||
|
||||
response.EnsureSuccessStatusCode();
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Send_Checkout_basket_and_response_ok_status_code()
|
||||
{
|
||||
using (var server = CreateServer())
|
||||
{
|
||||
var contentBasket = new StringContent(BuildBasket(), UTF8Encoding.UTF8, "application/json");
|
||||
|
||||
await server.CreateClient()
|
||||
.PostAsync(Post.Basket, contentBasket);
|
||||
|
||||
var contentCheckout = new StringContent(BuildCheckout(), UTF8Encoding.UTF8, "application/json");
|
||||
|
||||
var response = await server.CreateIdempotentClient()
|
||||
.PostAsync(Post.CheckoutOrder, contentCheckout);
|
||||
|
||||
response.EnsureSuccessStatusCode();
|
||||
}
|
||||
}
|
||||
|
||||
string BuildBasket()
|
||||
{
|
||||
var order = new CustomerBasket(AutoAuthorizeMiddleware.IDENTITY_ID);
|
||||
|
||||
order.Items.Add(new BasketItem
|
||||
{
|
||||
ProductId = 1,
|
||||
ProductName = ".NET Bot Black Hoodie",
|
||||
UnitPrice = 10,
|
||||
Quantity = 1
|
||||
});
|
||||
|
||||
return JsonSerializer.Serialize(order);
|
||||
}
|
||||
|
||||
string BuildCheckout()
|
||||
{
|
||||
var checkoutBasket = new
|
||||
{
|
||||
City = "city",
|
||||
Street = "street",
|
||||
State = "state",
|
||||
Country = "coutry",
|
||||
ZipCode = "zipcode",
|
||||
CardNumber = "1234567890123456",
|
||||
CardHolderName = "CardHolderName",
|
||||
CardExpiration = DateTime.UtcNow.AddDays(1),
|
||||
CardSecurityNumber = "123",
|
||||
CardTypeId = 1,
|
||||
Buyer = "Buyer",
|
||||
RequestId = Guid.NewGuid()
|
||||
};
|
||||
|
||||
return JsonSerializer.Serialize(checkoutBasket);
|
||||
response.EnsureSuccessStatusCode();
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Get_basket_and_response_ok_status_code()
|
||||
{
|
||||
using (var server = CreateServer())
|
||||
{
|
||||
var response = await server.CreateClient()
|
||||
.GetAsync(Get.GetBasket(1));
|
||||
|
||||
response.EnsureSuccessStatusCode();
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Send_Checkout_basket_and_response_ok_status_code()
|
||||
{
|
||||
using (var server = CreateServer())
|
||||
{
|
||||
var contentBasket = new StringContent(BuildBasket(), UTF8Encoding.UTF8, "application/json");
|
||||
|
||||
await server.CreateClient()
|
||||
.PostAsync(Post.Basket, contentBasket);
|
||||
|
||||
var contentCheckout = new StringContent(BuildCheckout(), UTF8Encoding.UTF8, "application/json");
|
||||
|
||||
var response = await server.CreateIdempotentClient()
|
||||
.PostAsync(Post.CheckoutOrder, contentCheckout);
|
||||
|
||||
response.EnsureSuccessStatusCode();
|
||||
}
|
||||
}
|
||||
|
||||
string BuildBasket()
|
||||
{
|
||||
var order = new CustomerBasket(AutoAuthorizeMiddleware.IDENTITY_ID);
|
||||
|
||||
order.Items.Add(new BasketItem
|
||||
{
|
||||
ProductId = 1,
|
||||
ProductName = ".NET Bot Black Hoodie",
|
||||
UnitPrice = 10,
|
||||
Quantity = 1
|
||||
});
|
||||
|
||||
return JsonSerializer.Serialize(order);
|
||||
}
|
||||
|
||||
string BuildCheckout()
|
||||
{
|
||||
var checkoutBasket = new
|
||||
{
|
||||
City = "city",
|
||||
Street = "street",
|
||||
State = "state",
|
||||
Country = "coutry",
|
||||
ZipCode = "zipcode",
|
||||
CardNumber = "1234567890123456",
|
||||
CardHolderName = "CardHolderName",
|
||||
CardExpiration = DateTime.UtcNow.AddDays(1),
|
||||
CardSecurityNumber = "123",
|
||||
CardTypeId = 1,
|
||||
Buyer = "Buyer",
|
||||
RequestId = Guid.NewGuid()
|
||||
};
|
||||
|
||||
return JsonSerializer.Serialize(checkoutBasket);
|
||||
}
|
||||
}
|
||||
|
@ -1,12 +1,4 @@
|
||||
using Basket.FunctionalTests.Base;
|
||||
using Microsoft.eShopOnContainers.Services.Basket.API.Infrastructure.Repositories;
|
||||
using Microsoft.eShopOnContainers.Services.Basket.API.Model;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using StackExchange.Redis;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit;
|
||||
|
||||
|
||||
namespace Basket.FunctionalTests
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user