From 74ab90cff2029d28460ddba89545c263c7fbf5e5 Mon Sep 17 00:00:00 2001 From: dsanz Date: Tue, 7 Mar 2017 13:46:27 +0100 Subject: [PATCH] Add functional tests project and ordering intial tests --- eShopOnContainers-ServicesAndWebApps.sln | 51 +++++++++++++ test/Services/FunctionalTests/Class1.cs | 8 -- .../FunctionalTests/FunctionalTests.csproj | 21 +++++- .../Middleware/AutoAuthorizeMiddleware.cs | 26 +++++++ .../Services/Ordering/OrderingScenarios.cs | 73 +++++++++++++++++++ .../Ordering/OrderingScenariosBase.cs | 36 +++++++++ .../Services/Ordering/OrderingTestsStartup.cs | 29 ++++++++ test/Services/FunctionalTests/settings.json | 5 ++ .../Basket/RedisBasketRepositoryTests.cs | 22 +++++- 9 files changed, 258 insertions(+), 13 deletions(-) delete mode 100644 test/Services/FunctionalTests/Class1.cs create mode 100644 test/Services/FunctionalTests/Middleware/AutoAuthorizeMiddleware.cs create mode 100644 test/Services/FunctionalTests/Services/Ordering/OrderingScenarios.cs create mode 100644 test/Services/FunctionalTests/Services/Ordering/OrderingScenariosBase.cs create mode 100644 test/Services/FunctionalTests/Services/Ordering/OrderingTestsStartup.cs create mode 100644 test/Services/FunctionalTests/settings.json diff --git a/eShopOnContainers-ServicesAndWebApps.sln b/eShopOnContainers-ServicesAndWebApps.sln index 93273a60e..183e75710 100644 --- a/eShopOnContainers-ServicesAndWebApps.sln +++ b/eShopOnContainers-ServicesAndWebApps.sln @@ -48,6 +48,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebSPA", "src\Web\WebSPA\We EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IntegrationTests", "test\Services\IntegrationTests\IntegrationTests.csproj", "{5B810E3D-112E-4857-B197-F09D2FD41E27}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FunctionalTests", "test\Services\FunctionalTests\FunctionalTests.csproj", "{CFE2FACB-4538-4B99-8A10-306F3882952D}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Ad-Hoc|Any CPU = Ad-Hoc|Any CPU @@ -494,6 +496,54 @@ Global {5B810E3D-112E-4857-B197-F09D2FD41E27}.Release|x64.Build.0 = Release|Any CPU {5B810E3D-112E-4857-B197-F09D2FD41E27}.Release|x86.ActiveCfg = Release|Any CPU {5B810E3D-112E-4857-B197-F09D2FD41E27}.Release|x86.Build.0 = Release|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Ad-Hoc|x64.Build.0 = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Ad-Hoc|x86.Build.0 = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.AppStore|Any CPU.Build.0 = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.AppStore|ARM.ActiveCfg = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.AppStore|ARM.Build.0 = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.AppStore|iPhone.ActiveCfg = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.AppStore|iPhone.Build.0 = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.AppStore|x64.ActiveCfg = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.AppStore|x64.Build.0 = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.AppStore|x86.ActiveCfg = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.AppStore|x86.Build.0 = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Debug|ARM.ActiveCfg = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Debug|ARM.Build.0 = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Debug|iPhone.Build.0 = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Debug|x64.ActiveCfg = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Debug|x64.Build.0 = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Debug|x86.ActiveCfg = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Debug|x86.Build.0 = Debug|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Release|Any CPU.Build.0 = Release|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Release|ARM.ActiveCfg = Release|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Release|ARM.Build.0 = Release|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Release|iPhone.ActiveCfg = Release|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Release|iPhone.Build.0 = Release|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Release|x64.ActiveCfg = Release|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Release|x64.Build.0 = Release|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Release|x86.ActiveCfg = Release|Any CPU + {CFE2FACB-4538-4B99-8A10-306F3882952D}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -516,5 +566,6 @@ Global {A579E108-5445-403D-A407-339AC4D1611B} = {24CD3B53-141E-4A07-9B0D-796641E1CF78} {F16E3C6A-1C94-4EAB-BE91-099618060B68} = {E279BF0F-7F66-4F3A-A3AB-2CDA66C1CD04} {5B810E3D-112E-4857-B197-F09D2FD41E27} = {EF0337F2-ED00-4643-89FD-EE10863F1870} + {CFE2FACB-4538-4B99-8A10-306F3882952D} = {EF0337F2-ED00-4643-89FD-EE10863F1870} EndGlobalSection EndGlobal diff --git a/test/Services/FunctionalTests/Class1.cs b/test/Services/FunctionalTests/Class1.cs deleted file mode 100644 index c6e6fecba..000000000 --- a/test/Services/FunctionalTests/Class1.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System; - -namespace FunctionalTests -{ - public class Class1 - { - } -} diff --git a/test/Services/FunctionalTests/FunctionalTests.csproj b/test/Services/FunctionalTests/FunctionalTests.csproj index d78bc78b6..039a734a2 100644 --- a/test/Services/FunctionalTests/FunctionalTests.csproj +++ b/test/Services/FunctionalTests/FunctionalTests.csproj @@ -1,7 +1,26 @@ - + netcoreapp1.1 + + + + + + + + + + + + + + + + PreserveNewest + + + \ No newline at end of file diff --git a/test/Services/FunctionalTests/Middleware/AutoAuthorizeMiddleware.cs b/test/Services/FunctionalTests/Middleware/AutoAuthorizeMiddleware.cs new file mode 100644 index 000000000..72248e29d --- /dev/null +++ b/test/Services/FunctionalTests/Middleware/AutoAuthorizeMiddleware.cs @@ -0,0 +1,26 @@ +using Microsoft.AspNetCore.Http; +using System; +using System.Collections.Generic; +using System.Security.Claims; +using System.Text; +using System.Threading.Tasks; + +namespace FunctionalTests.Middleware +{ + class AutoAuthorizeMiddleware + { + private readonly RequestDelegate _next; + public AutoAuthorizeMiddleware(RequestDelegate rd) + { + _next = rd; + } + + public async Task Invoke(HttpContext httpContext) + { + var identity = new ClaimsIdentity(); + identity.AddClaim(new Claim("sub", "1234")); + httpContext.User.AddIdentity(identity); + await _next.Invoke(httpContext); + } + } +} diff --git a/test/Services/FunctionalTests/Services/Ordering/OrderingScenarios.cs b/test/Services/FunctionalTests/Services/Ordering/OrderingScenarios.cs new file mode 100644 index 000000000..6a00aaf50 --- /dev/null +++ b/test/Services/FunctionalTests/Services/Ordering/OrderingScenarios.cs @@ -0,0 +1,73 @@ +using Microsoft.AspNetCore.TestHost; +using Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands; +using Microsoft.eShopOnContainers.WebMVC.ViewModels; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Data.SqlClient; +using System.Net.Http; +using System.Text; +using System.Threading.Tasks; +using Xunit; +using static Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands.CreateOrderCommand; + +namespace FunctionalTests.Services.Ordering +{ + public class OrderingScenarios : OrderingScenariosBase + { + [Fact] + public async Task Create_order_and_return_the_order_by_id() + { + using (var server = CreateServer()) + { + var client = server.CreateClient(); + + //Arrange + await client.PostAsync(Post.AddNewOrder, new StringContent(BuildOrder(), UTF8Encoding.UTF8, "application/json")); + + var ordersResponse = await client.GetAsync(Get.Orders); + var responseBody = await ordersResponse.Content.ReadAsStringAsync(); + dynamic orders = JsonConvert.DeserializeObject(responseBody); + string orderId = orders[0].ordernumber; + + //Act + var order= await client.GetAsync(Get.OrderBy(int.Parse(orderId))); + var orderBody = await order.Content.ReadAsStringAsync(); + var result = JsonConvert.DeserializeObject(orderBody); + + //Assert + Assert.Equal(orderId, result.OrderNumber); + Assert.Equal("inprocess", result.Status); + Assert.Equal(1, result.OrderItems.Count); + Assert.Equal(10, result.OrderItems[0].UnitPrice); + } + } + + string BuildOrder() + { + var order = new CreateOrderCommand( + cardExpiration: DateTime.UtcNow.AddYears(1), + cardNumber: "5145-555-5555", + cardHolderName: "Jhon Senna", + cardSecurityNumber: "232", + cardTypeId: 1, + city: "Redmon", + country: "USA", + state: "WA", + street: "One way", + zipcode: "zipcode" + ); + + order.AddOrderItem(new OrderItemDTO() + { + ProductId = 1, + Discount = 10M, + UnitPrice = 10, + Units = 1, + ProductName = "Some name" + }); + + return JsonConvert.SerializeObject(order); + } + } +} diff --git a/test/Services/FunctionalTests/Services/Ordering/OrderingScenariosBase.cs b/test/Services/FunctionalTests/Services/Ordering/OrderingScenariosBase.cs new file mode 100644 index 000000000..643a4d8c3 --- /dev/null +++ b/test/Services/FunctionalTests/Services/Ordering/OrderingScenariosBase.cs @@ -0,0 +1,36 @@ +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.TestHost; +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace FunctionalTests.Services.Ordering +{ + public class OrderingScenariosBase + { + public TestServer CreateServer() + { + var webHostBuilder = new WebHostBuilder(); + webHostBuilder.UseContentRoot(Directory.GetCurrentDirectory()); + webHostBuilder.UseStartup(); + + return new TestServer(webHostBuilder); + } + + public static class Get + { + public static string Orders = "api/v1/orders"; + + public static string OrderBy(int id) + { + return $"api/v1/orders/{id}"; + } + } + + public static class Post + { + public static string AddNewOrder = "api/v1/orders/new"; + } + } +} diff --git a/test/Services/FunctionalTests/Services/Ordering/OrderingTestsStartup.cs b/test/Services/FunctionalTests/Services/Ordering/OrderingTestsStartup.cs new file mode 100644 index 000000000..0d8676f61 --- /dev/null +++ b/test/Services/FunctionalTests/Services/Ordering/OrderingTestsStartup.cs @@ -0,0 +1,29 @@ +using FunctionalTests.Middleware; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.eShopOnContainers.Services.Ordering.API; +using System; +using System.Collections.Generic; +using System.Text; + +namespace FunctionalTests.Services.Ordering +{ + public class OrderingTestsStartup : Startup + { + public OrderingTestsStartup(IHostingEnvironment env) : base(env) + { + } + + protected override void ConfigureAuth(IApplicationBuilder app) + { + if (Configuration["isTest"] == bool.TrueString.ToLowerInvariant()) + { + app.UseMiddleware(); + } + else + { + base.ConfigureAuth(app); + } + } + } +} diff --git a/test/Services/FunctionalTests/settings.json b/test/Services/FunctionalTests/settings.json new file mode 100644 index 000000000..3b6023956 --- /dev/null +++ b/test/Services/FunctionalTests/settings.json @@ -0,0 +1,5 @@ +{ + "ConnectionString": "Server=tcp:127.0.0.1,5433;Database=Microsoft.eShopOnContainers.Services.OrderingDb;User Id=sa;Password=Pass@word;", + "IdentityUrl": "http://localhost:5105", + "isTest": "true" +} diff --git a/test/Services/IntegrationTests/Services/Basket/RedisBasketRepositoryTests.cs b/test/Services/IntegrationTests/Services/Basket/RedisBasketRepositoryTests.cs index 931dcee61..5bac70c04 100644 --- a/test/Services/IntegrationTests/Services/Basket/RedisBasketRepositoryTests.cs +++ b/test/Services/IntegrationTests/Services/Basket/RedisBasketRepositoryTests.cs @@ -35,10 +35,24 @@ namespace IntegrationTests.Services.Basket Assert.Equal(1, basket.Items.Count); } - //[Fact] - //public async Task GetBasket_return_existing_basket() - //{ - //} + [Fact] + public async Task Delete_Basket_return_null() + { + var redisBasketRepository = BuildBasketRepository(); + + var basket = await redisBasketRepository.UpdateBasket(new CustomerBasket("customerId") + { + BuyerId = "buyerId", + Items = BuildBasketItems() + }); + + var deleteResult = await redisBasketRepository.DeleteBasket("buyerId"); + + var result = await redisBasketRepository.GetBasket(basket.BuyerId); + + Assert.True(deleteResult); + Assert.Null(result); + } RedisBasketRepository BuildBasketRepository() {