Skip to content

Commit 6963cf7

Browse files
committed
put INTEGRATION TEST
1 parent 07e0cca commit 6963cf7

File tree

5 files changed

+20
-36
lines changed

5 files changed

+20
-36
lines changed

src/Api.Test/EndpointsTests/IntegrationTests/ProductControllerTest.cs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616
using Xero.Demo.Api.Domain.Models;
1717
using Xero.Demo.Api.Tests.EndpointTests.UnitTests.V1.TestData;
1818
using Xero.Demo.Api.Tests.Setup;
19+
using Xero.Demo.Api.Xero.Demo.Domain.Models;
1920
using Xunit;
21+
using static Xero.Demo.Api.Domain.Models.CONSTANTS;
2022

2123
namespace Xero.Demo.Api.Tests.EndpointTests.IntegrationTests
2224
{
@@ -50,21 +52,14 @@ public ProductControllerTest()
5052

5153
[Theory]
5254
[InlineData("en-US", "1")]
53-
//[InlineData("en-US", "2")]
55+
//[InlineData("en-US", "2")] :: TO-DO
5456
public async Task GetAsync_Returns_200(string culture, string version)
5557
{
5658
// Given
57-
var client = factory.WithWebHostBuilder(builder =>
58-
{
59-
builder.ConfigureTestServices(services =>
60-
{
61-
services.AddAuthentication("Test")
62-
.AddScheme<AuthenticationSchemeOptions, TestAuthHandler>(
63-
"Test", options => { });
64-
});
65-
})
66-
.CreateClient();
67-
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Test");
59+
var client = factory.CreateClient();
60+
var authResponse = await client.PostAsync(string.Format(SampleDataV1.readerLoginEndpoint, culture, version, Roles.Reader), null);
61+
var authDetails = JsonConvert.DeserializeObject<AuthenticateResponse>(await authResponse.Content.ReadAsStringAsync());
62+
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authDetails.Token);
6863

6964
// When
7065
var response = await client.GetAsync(string.Format(SampleDataV1.productEndpoint, culture, version));
@@ -75,11 +70,13 @@ public async Task GetAsync_Returns_200(string culture, string version)
7570

7671
[Theory]
7772
[InlineData("en-US", "1")]
78-
[InlineData("en-US", "2")]
7973
public async Task GetByIdAsync_Returns_200(string culture, string version)
8074
{
8175
// Given
8276
var client = factory.CreateClient();
77+
var authResponse = await client.PostAsync(string.Format(SampleDataV1.readerLoginEndpoint, culture, version, Roles.Reader), null);
78+
var authDetails = JsonConvert.DeserializeObject<AuthenticateResponse>(await authResponse.Content.ReadAsStringAsync());
79+
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authDetails.Token);
8380
var addProductResponse = await client.PostAsJsonAsync(string.Format(SampleDataV1.productEndpoint, culture, version), SampleDataV1.Product);
8481
var addedProduct = JsonConvert.DeserializeObject<Product>(await addProductResponse.Content.ReadAsStringAsync());
8582
var id = addedProduct.Id;
@@ -93,11 +90,13 @@ public async Task GetByIdAsync_Returns_200(string culture, string version)
9390

9491
[Theory]
9592
[InlineData("en-US", "1")]
96-
[InlineData("en-US", "2")]
9793
public async Task PostAsync_Returns_201(string culture, string version)
9894
{
9995
// Given
10096
var client = factory.CreateClient();
97+
var authResponse = await client.PostAsync(string.Format(SampleDataV1.readerLoginEndpoint, culture, version, Roles.Admin), null);
98+
var authDetails = JsonConvert.DeserializeObject<AuthenticateResponse>(await authResponse.Content.ReadAsStringAsync());
99+
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authDetails.Token);
101100

102101
// When
103102
var response = await client.PostAsJsonAsync(string.Format(SampleDataV1.productEndpoint, culture, version), SampleDataV1.Product);
@@ -108,12 +107,13 @@ public async Task PostAsync_Returns_201(string culture, string version)
108107

109108
[Theory]
110109
[InlineData("en-US", "1")]
111-
[InlineData("en-US", "2")]
112110
public async Task PutAsync_Returns_204(string culture, string version)
113111
{
114112
// Given
115113
var client = factory.CreateClient();
116-
var addResponse = await client.PostAsJsonAsync(string.Format(SampleDataV1.productEndpoint, culture, version), SampleDataV1.Product);
114+
var authResponse = await client.PostAsync(string.Format(SampleDataV1.readerLoginEndpoint, culture, version, Roles.Editor), null);
115+
var authDetails = JsonConvert.DeserializeObject<AuthenticateResponse>(await authResponse.Content.ReadAsStringAsync());
116+
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authDetails.Token);
117117

118118
var productResponse = await client.GetAsync(string.Format(SampleDataV1.productEndpoint, culture, version));
119119
var products = JsonConvert.DeserializeObject<List<ProductDTO>>(await productResponse.Content.ReadAsStringAsync());

src/Api.Test/EndpointsTests/UnitTests/V1/TestData/SampleData.cs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ internal class SampleDataV1
88
{
99
public static string productEndpoint = "/api/{0}/v{1}/products", DatabaseString = "Filename=Product.db", TraceIdentifier = "TraceIdentifier", Database = "Database", NewDescription = "NewDescription";
1010
public static Guid ProductId = Guid.NewGuid();
11+
public static string readerLoginEndpoint = "/api/{0}/v{1}/login/{2}";
1112

1213
public static Product Product
1314
{
1415
get
1516
{
1617
return new Product
1718
{
18-
//Id = ProductId,
1919
Name = "product1",
2020
Description = "Description",
2121
Price = 11,
@@ -31,13 +31,5 @@ public static IReadOnlyList<Product> Products
3131
return new List<Product> { Product };
3232
}
3333
}
34-
35-
public static Dictionary<string, string> Traits
36-
{
37-
get
38-
{
39-
return new Dictionary<string, string> { { "Test1", "Unit" }, { "Test2", "Integration" } };
40-
}
41-
}
4234
}
4335
}

src/Api.Test/Setup/SetupStartup.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using Microsoft.AspNetCore.Authentication;
12
using Microsoft.AspNetCore.Hosting;
23
using Microsoft.AspNetCore.Mvc.Testing;
34
using Microsoft.EntityFrameworkCore;
@@ -7,6 +8,7 @@
78
using System.Linq;
89
using System.Threading.Tasks;
910
using Xero.Demo.Api.Datastore;
11+
using Xero.Demo.Api.Tests.EndpointTests.IntegrationTests;
1012
using Xero.Demo.Api.Tests.EndpointTests.UnitTests.V1.TestData;
1113

1214
namespace Xero.Demo.Api.Tests.Setup
@@ -22,7 +24,6 @@ protected override void ConfigureWebHost(IWebHostBuilder builder)
2224
services.Remove(descriptor);
2325

2426
services.AddDbContext<Database>(options => options.UseInMemoryDatabase("TestDB"));
25-
2627
var sp = services.BuildServiceProvider();
2728

2829
using var scope = sp.CreateScope();

src/Api/Xero.Demo.Domain/Models/AuthenticateResponse.cs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,5 @@ public class AuthenticateResponse
77
public string Username { get; set; }
88
public string Token { get; set; }
99
public string Role { get; set; }
10-
11-
public AuthenticateResponse(User user, string token, string role)
12-
{
13-
Id = user.Id;
14-
Name = user.Name;
15-
Username = user.Username;
16-
Token = token;
17-
Role = role;
18-
}
1910
}
2011
}

src/Api/Xero.Demo.Domain/Services/UserService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public AuthenticateResponse Authenticate(string role)
2929
{
3030
var user = User.Users.First(u => u.Role == role);
3131

32-
return new AuthenticateResponse(user, GenerateJWTToken(user), user.Role);
32+
return new AuthenticateResponse() { Id = user.Id, Token = GenerateJWTToken(user), Name = user.Name, Role = user.Role, Username = user.Username };
3333
}
3434

3535
public User GetById(int userId)

0 commit comments

Comments
 (0)