Skip to content

Commit 31fd93d

Browse files
committed
Add Functional Test to marketing
1 parent 432994d commit 31fd93d

5 files changed

Lines changed: 223 additions & 0 deletions

File tree

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
namespace FunctionalTests.Services.Locations
2+
{
3+
using Microsoft.AspNetCore.Hosting;
4+
using Microsoft.AspNetCore.TestHost;
5+
using System;
6+
using System.IO;
7+
8+
public class LocationsScenariosBase
9+
{
10+
public TestServer CreateServer()
11+
{
12+
var webHostBuilder = new WebHostBuilder();
13+
webHostBuilder.UseContentRoot(Directory.GetCurrentDirectory() + "\\Services\\Locations");
14+
webHostBuilder.UseStartup<LocationsTestsStartup>();
15+
16+
return new TestServer(webHostBuilder);
17+
}
18+
19+
public static class Get
20+
{
21+
public static string Locations = "api/v1/locations";
22+
23+
public static string LocationBy(string id)
24+
{
25+
return $"api/v1/locations/{id}";
26+
}
27+
28+
public static string UserLocationBy(Guid id)
29+
{
30+
return $"api/v1/locations/user/{id}";
31+
}
32+
}
33+
34+
public static class Post
35+
{
36+
public static string AddNewLocation = "api/v1/locations/";
37+
}
38+
}
39+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
namespace FunctionalTests.Services.Locations
2+
{
3+
using Microsoft.AspNetCore.Builder;
4+
using Microsoft.AspNetCore.Hosting;
5+
using Microsoft.AspNetCore.Http;
6+
using Microsoft.eShopOnContainers.Services.Locations.API;
7+
using System.Security.Claims;
8+
using System.Threading.Tasks;
9+
10+
public class LocationsTestsStartup : Startup
11+
{
12+
public LocationsTestsStartup(IHostingEnvironment env) : base(env)
13+
{
14+
}
15+
16+
protected override void ConfigureAuth(IApplicationBuilder app)
17+
{
18+
if (Configuration["isTest"] == bool.TrueString.ToLowerInvariant())
19+
{
20+
app.UseMiddleware<LocationAuthorizeMiddleware>();
21+
}
22+
else
23+
{
24+
base.ConfigureAuth(app);
25+
}
26+
}
27+
28+
class LocationAuthorizeMiddleware
29+
{
30+
private readonly RequestDelegate _next;
31+
public LocationAuthorizeMiddleware(RequestDelegate rd)
32+
{
33+
_next = rd;
34+
}
35+
36+
public async Task Invoke(HttpContext httpContext)
37+
{
38+
var identity = new ClaimsIdentity("cookies");
39+
identity.AddClaim(new Claim("sub", "4611ce3f-380d-4db5-8d76-87a8689058ed"));
40+
httpContext.User.AddIdentity(identity);
41+
await _next.Invoke(httpContext);
42+
}
43+
}
44+
}
45+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
namespace FunctionalTests.Services.Marketing
2+
{
3+
using UserLocationDTO = Microsoft.eShopOnContainers.Services.Marketing.API.Dto.UserLocationDTO;
4+
using UserLocation = Microsoft.eShopOnContainers.Services.Locations.API.Model.UserLocation;
5+
using LocationRequest = Microsoft.eShopOnContainers.Services.Locations.API.ViewModel.LocationRequest;
6+
using FunctionalTests.Extensions;
7+
using FunctionalTests.Services.Basket;
8+
using FunctionalTests.Services.Locations;
9+
using Microsoft.eShopOnContainers.Services.Basket.API.Model;
10+
using Microsoft.eShopOnContainers.WebMVC.ViewModels;
11+
using Newtonsoft.Json;
12+
using System;
13+
using System.Collections.Generic;
14+
using System.Linq;
15+
using System.Net.Http;
16+
using System.Text;
17+
using System.Threading.Tasks;
18+
using WebMVC.Models;
19+
using Xunit;
20+
21+
public class MarketingScenarios : MarketingScenariosBase
22+
{
23+
[Fact]
24+
public async Task Set_new_user_location_and_get_location_campaign_by_user_id()
25+
{
26+
using (var locationsServer = new LocationsScenariosBase().CreateServer())
27+
using (var marketingServer = CreateServer())
28+
{
29+
var location = new LocationRequest
30+
{
31+
Longitude = -122.315752,
32+
Latitude = 47.604610
33+
};
34+
var content = new StringContent(JsonConvert.SerializeObject(location),
35+
Encoding.UTF8, "application/json");
36+
37+
var userId = new Guid("4611ce3f-380d-4db5-8d76-87a8689058ed");
38+
39+
40+
// GIVEN a new location of user is created
41+
var response = await locationsServer.CreateClient()
42+
.PostAsync(LocationsScenariosBase.Post.AddNewLocation, content);
43+
44+
//Get location user from Location.API
45+
var userLocationResponse = await locationsServer.CreateClient()
46+
.GetAsync(LocationsScenariosBase.Get.UserLocationBy(userId));
47+
48+
var responseBody = await userLocationResponse.Content.ReadAsStringAsync();
49+
var userLocation = JsonConvert.DeserializeObject<UserLocation>(responseBody);
50+
51+
await Task.Delay(5000);
52+
53+
//Get campaing from Marketing.API given a userId
54+
var UserLocationCampaignResponse = await locationsServer.CreateClient()
55+
.GetAsync(Get.UserCampaignByUserId(userId));
56+
57+
responseBody = await UserLocationCampaignResponse.Content.ReadAsStringAsync();
58+
var userLocationCampaign = JsonConvert.DeserializeObject<UserLocationDTO>(responseBody);
59+
60+
// Assert
61+
Assert.Equal(userLocation.LocationId, userLocationCampaign.LocationId);
62+
}
63+
}
64+
}
65+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
namespace FunctionalTests.Services.Marketing
2+
{
3+
using Microsoft.AspNetCore.Hosting;
4+
using Microsoft.AspNetCore.TestHost;
5+
using System.IO;
6+
7+
public class MarketingScenariosBase
8+
{
9+
public static string CampaignsUrlBase => "api/v1/campaigns";
10+
11+
public TestServer CreateServer()
12+
{
13+
var webHostBuilder = new WebHostBuilder();
14+
webHostBuilder.UseContentRoot(Directory.GetCurrentDirectory() + "\\Services\\Marketing");
15+
webHostBuilder.UseStartup<MarketingTestsStartup>();
16+
17+
return new TestServer(webHostBuilder);
18+
}
19+
20+
public static class Get
21+
{
22+
public static string Campaigns = CampaignsUrlBase;
23+
24+
public static string CampaignBy(int id)
25+
=> $"{CampaignsUrlBase}/{id}";
26+
27+
public static string UserCampaignByUserId(System.Guid userId)
28+
=> $"{CampaignsUrlBase}/user/{userId}";
29+
}
30+
31+
public static class Post
32+
{
33+
public static string AddNewCampaign = CampaignsUrlBase;
34+
}
35+
36+
public static class Put
37+
{
38+
public static string CampaignBy(int id)
39+
=> $"{CampaignsUrlBase}/{id}";
40+
}
41+
42+
public static class Delete
43+
{
44+
public static string CampaignBy(int id)
45+
=> $"{CampaignsUrlBase}/{id}";
46+
}
47+
}
48+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using FunctionalTests.Middleware;
2+
using Microsoft.AspNetCore.Builder;
3+
using Microsoft.AspNetCore.Hosting;
4+
using Microsoft.eShopOnContainers.Services.Ordering.API;
5+
6+
namespace FunctionalTests.Services.Marketing
7+
{
8+
public class MarketingTestsStartup : Startup
9+
{
10+
public MarketingTestsStartup(IHostingEnvironment env) : base(env)
11+
{
12+
}
13+
14+
protected override void ConfigureAuth(IApplicationBuilder app)
15+
{
16+
if (Configuration["isTest"] == bool.TrueString.ToLowerInvariant())
17+
{
18+
app.UseMiddleware<AutoAuthorizeMiddleware>();
19+
}
20+
else
21+
{
22+
base.ConfigureAuth(app);
23+
}
24+
}
25+
}
26+
}

0 commit comments

Comments
 (0)