From 3e47c840d5bf4966548d7b63f40ee59d981a99d6 Mon Sep 17 00:00:00 2001 From: Christian Arenas Date: Fri, 2 Jun 2017 16:33:01 +0200 Subject: [PATCH] Add integration test --- .../IntegrationTests/IntegrationTests.csproj | 4 + .../Marketing/MarketingScenarioBase.cs | 45 ++++++ .../Services/Marketing/MarketingScenarios.cs | 132 ++++++++++++++++++ .../Marketing/MarketingTestsStartup.cs | 26 ++++ .../Services/Marketing/appsettings.json | 5 + 5 files changed, 212 insertions(+) create mode 100644 test/Services/IntegrationTests/Services/Marketing/MarketingScenarioBase.cs create mode 100644 test/Services/IntegrationTests/Services/Marketing/MarketingScenarios.cs create mode 100644 test/Services/IntegrationTests/Services/Marketing/MarketingTestsStartup.cs create mode 100644 test/Services/IntegrationTests/Services/Marketing/appsettings.json diff --git a/test/Services/IntegrationTests/IntegrationTests.csproj b/test/Services/IntegrationTests/IntegrationTests.csproj index 60911dd4d..a44e57ccb 100644 --- a/test/Services/IntegrationTests/IntegrationTests.csproj +++ b/test/Services/IntegrationTests/IntegrationTests.csproj @@ -20,6 +20,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest @@ -28,6 +31,7 @@ + diff --git a/test/Services/IntegrationTests/Services/Marketing/MarketingScenarioBase.cs b/test/Services/IntegrationTests/Services/Marketing/MarketingScenarioBase.cs new file mode 100644 index 000000000..01383410b --- /dev/null +++ b/test/Services/IntegrationTests/Services/Marketing/MarketingScenarioBase.cs @@ -0,0 +1,45 @@ +namespace IntegrationTests.Services.Marketing +{ + using Microsoft.AspNetCore.Hosting; + using Microsoft.AspNetCore.TestHost; + using System.IO; + + public class MarketingScenarioBase + { + private const string _campaignsUrlBase = "api/v1/campaigns"; + + public TestServer CreateServer() + { + var webHostBuilder = new WebHostBuilder(); + webHostBuilder.UseContentRoot(Directory.GetCurrentDirectory() + "\\Services\\Marketing"); + webHostBuilder.UseStartup(); + + return new TestServer(webHostBuilder); + } + + public static class Get + { + public static string Campaigns = _campaignsUrlBase; + + public static string CampaignBy(int id) + => $"{_campaignsUrlBase}/{id}"; + } + + public static class Post + { + public static string AddNewCampaign = _campaignsUrlBase; + } + + public static class Put + { + public static string CampaignBy(int id) + => $"{_campaignsUrlBase}/{id}"; + } + + public static class Delete + { + public static string CampaignBy(int id) + => $"{_campaignsUrlBase}/{id}"; + } + } +} \ No newline at end of file diff --git a/test/Services/IntegrationTests/Services/Marketing/MarketingScenarios.cs b/test/Services/IntegrationTests/Services/Marketing/MarketingScenarios.cs new file mode 100644 index 000000000..931975fb8 --- /dev/null +++ b/test/Services/IntegrationTests/Services/Marketing/MarketingScenarios.cs @@ -0,0 +1,132 @@ +namespace IntegrationTests.Services.Marketing +{ + using System.Net.Http; + using System.Text; + using System.Threading.Tasks; + using Xunit; + using System; + using Newtonsoft.Json; + using Microsoft.eShopOnContainers.Services.Marketing.API.Model; + using System.Collections.Generic; + using System.Net; + using Microsoft.eShopOnContainers.Services.Marketing.API.Dto; + + public class MarketingScenarios + : MarketingScenarioBase + { + [Fact] + public async Task Get_get_all_campaigns_and_response_ok_status_code() + { + using (var server = CreateServer()) + { + var response = await server.CreateClient() + .GetAsync(Get.Campaigns); + + response.EnsureSuccessStatusCode(); + } + } + + [Fact] + public async Task Get_get_campaign_by_id_and_response_ok_status_code() + { + using (var server = CreateServer()) + { + var response = await server.CreateClient() + .GetAsync(Get.CampaignBy(1)); + + response.EnsureSuccessStatusCode(); + } + } + + [Fact] + public async Task Get_get_campaign_by_id_and_response_not_found_status_code() + { + using (var server = CreateServer()) + { + var response = await server.CreateClient() + .GetAsync(Get.CampaignBy(9999999)); + + Assert.True(response.StatusCode == HttpStatusCode.NotFound); + } + } + + [Fact] + public async Task Post_add_new_campaign_and_response_ok_status_code() + { + using (var server = CreateServer()) + { + var content = new StringContent(JsonConvert.SerializeObject(FakeCampaignDto), Encoding.UTF8, "application/json"); + var response = await server.CreateClient() + .PostAsync(Post.AddNewCampaign, content); + + response.EnsureSuccessStatusCode(); + } + } + + [Fact] + public async Task Delete_delete_campaign_and_response_not_content_status_code() + { + using (var server = CreateServer()) + { + var content = new StringContent(JsonConvert.SerializeObject(FakeCampaignDto), Encoding.UTF8, "application/json"); + + //add campaign + var campaignResponse = await server.CreateClient() + .PostAsync(Post.AddNewCampaign, content); + + if (int.TryParse(campaignResponse.Headers.Location.Segments[4], out int id)) + { + var response = await server.CreateClient() + .DeleteAsync(Delete.CampaignBy(id)); + + Assert.True(response.StatusCode == HttpStatusCode.NoContent); + } + + campaignResponse.EnsureSuccessStatusCode(); + } + } + + [Fact] + public async Task Put_update_campaign_and_response_not_content_status_code() + { + using (var server = CreateServer()) + { + var content = new StringContent(JsonConvert.SerializeObject(FakeCampaignDto), Encoding.UTF8, "application/json"); + + //add campaign + var campaignResponse = await server.CreateClient() + .PostAsync(Post.AddNewCampaign, content); + + if (int.TryParse(campaignResponse.Headers.Location.Segments[4], out int id)) + { + FakeCampaignDto.Description = "FakeCampaignUpdatedDescription"; + content = new StringContent(JsonConvert.SerializeObject(FakeCampaignDto), Encoding.UTF8, "application/json"); + var response = await server.CreateClient() + .PutAsync(Put.CampaignBy(id), content); + + Assert.True(response.StatusCode == HttpStatusCode.Created); + } + + campaignResponse.EnsureSuccessStatusCode(); + } + } + + + private static CampaignDTO FakeCampaignDto = new CampaignDTO + { + Description = "FakeCampaignDescription", + From = DateTime.Now, + To = DateTime.Now.AddDays(7), + Url = "http://CampaignUrl.test/fdaf91ad0cef5419719f50198", + Rules = new List + { + new RuleDTO + { + LocationId = 1, + Description = "testDescription", + RuleTypeId = 3, + } + } + }; + } +} diff --git a/test/Services/IntegrationTests/Services/Marketing/MarketingTestsStartup.cs b/test/Services/IntegrationTests/Services/Marketing/MarketingTestsStartup.cs new file mode 100644 index 000000000..b8d337ab2 --- /dev/null +++ b/test/Services/IntegrationTests/Services/Marketing/MarketingTestsStartup.cs @@ -0,0 +1,26 @@ +namespace IntegrationTests.Services.Marketing +{ + using Microsoft.eShopOnContainers.Services.Marketing.API; + using Microsoft.AspNetCore.Hosting; + using Microsoft.AspNetCore.Builder; + using IntegrationTests.Middleware; + + public class MarketingTestsStartup : Startup + { + public MarketingTestsStartup(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/IntegrationTests/Services/Marketing/appsettings.json b/test/Services/IntegrationTests/Services/Marketing/appsettings.json new file mode 100644 index 000000000..8e3e07891 --- /dev/null +++ b/test/Services/IntegrationTests/Services/Marketing/appsettings.json @@ -0,0 +1,5 @@ +{ + "ConnectionString": "Server=tcp:127.0.0.1,5433;Initial Catalog=Microsoft.eShopOnContainers.Services.MarketingDb;User Id=sa;Password=Pass@word", + "IdentityUrl": "http://localhost:5105", + "isTest": "true" +}