Skip to content

Commit afee0fe

Browse files
committed
Add TestFixture to account for otherwise repeated AutoMapper initialization
1 parent 6097476 commit afee0fe

File tree

3 files changed

+52
-38
lines changed

3 files changed

+52
-38
lines changed

src/JsonApiDotNetCore/JsonApiDotNetCore.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
<PublishRepositoryUrl>true</PublishRepositoryUrl>
1818
<EmbedUntrackedSources>true</EmbedUntrackedSources>
1919
<AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
20+
<Version>2.4.1</Version>
2021
</PropertyGroup>
2122

2223
<ItemGroup>

test/ResourceEntitySeparationExampleTests/Acceptance/Extensibility/ResourceEntitySeparationExampleTests.cs

Lines changed: 17 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,41 @@
1-
using System;
21
using System.Collections.Generic;
32
using System.Net;
43
using System.Net.Http;
54
using System.Net.Http.Headers;
65
using System.Threading.Tasks;
7-
using Bogus;
86
using JsonApiDotNetCore.Serialization;
9-
using JsonApiDotNetCoreExample.Data;
107
using JsonApiDotNetCoreExample.Models;
118
using JsonApiDotNetCoreExampleTests.Helpers.Extensions;
12-
using Microsoft.AspNetCore.Hosting;
13-
using Microsoft.AspNetCore.TestHost;
149
using Newtonsoft.Json;
1510
using Xunit;
1611

1712
namespace ResourceEntitySeparationExampleTests.Acceptance.Extensibility
1813
{
19-
public class ResourceEntitySeparationExampleTests
14+
public class ResourceEntitySeparationExampleTests : IClassFixture<TestFixture>
2015
{
21-
private readonly TestServer _server;
22-
private readonly AppDbContext _context;
16+
private readonly TestFixture _fixture;
2317

24-
private Faker<StudentEntity> _studentFaker;
25-
26-
public ResourceEntitySeparationExampleTests()
18+
public ResourceEntitySeparationExampleTests(TestFixture fixture)
2719
{
28-
var builder = new WebHostBuilder()
29-
.UseStartup<TestStartup>();
30-
_server = new TestServer(builder);
31-
_context = _server.GetService<AppDbContext>();
32-
_context.Database.EnsureCreated();
33-
34-
_studentFaker = new Faker<StudentEntity>()
35-
.RuleFor(s => s.FirstName, f => f.Name.FirstName())
36-
.RuleFor(s => s.LastName, f => f.Name.LastName());
20+
_fixture = fixture;
3721
}
38-
22+
3923
[Fact]
4024
public async Task Can_Get_Students()
4125
{
4226
// arrange
43-
_context.Students.Add(_studentFaker.Generate());
44-
_context.SaveChanges();
45-
46-
var client = _server.CreateClient();
27+
_fixture.Context.Students.Add(_fixture.StudentFaker.Generate());
28+
_fixture.Context.SaveChanges();
4729

4830
var httpMethod = new HttpMethod("GET");
4931
var route = $"/api/v1/students";
5032

5133
var request = new HttpRequestMessage(httpMethod, route);
5234

5335
// act
54-
var response = await client.SendAsync(request);
36+
var response = await _fixture.Server.CreateClient().SendAsync(request);
5537
var responseBody = await response.Content.ReadAsStringAsync();
56-
var deserializedBody = _server.GetService<IJsonApiDeSerializer>()
38+
var deserializedBody = _fixture.Server.GetService<IJsonApiDeSerializer>()
5739
.DeserializeList<StudentDto>(responseBody);
5840

5941
// assert
@@ -66,21 +48,19 @@ public async Task Can_Get_Students()
6648
public async Task Can_Get_Students_By_Id()
6749
{
6850
// arrange
69-
var student = _studentFaker.Generate();
70-
_context.Students.Add(student);
71-
_context.SaveChanges();
72-
73-
var client = _server.CreateClient();
51+
var student = _fixture.StudentFaker.Generate();
52+
_fixture.Context.Students.Add(student);
53+
_fixture.Context.SaveChanges();
7454

7555
var httpMethod = new HttpMethod("GET");
7656
var route = $"/api/v1/students/{student.Id}";
7757

7858
var request = new HttpRequestMessage(httpMethod, route);
7959

8060
// act
81-
var response = await client.SendAsync(request);
61+
var response = await _fixture.Server.CreateClient().SendAsync(request);
8262
var responseBody = await response.Content.ReadAsStringAsync();
83-
var deserializedBody = (StudentDto)_server.GetService<IJsonApiDeSerializer>()
63+
var deserializedBody = (StudentDto)_fixture.Server.GetService<IJsonApiDeSerializer>()
8464
.Deserialize(responseBody);
8565

8666
// assert
@@ -93,8 +73,7 @@ public async Task Can_Get_Students_By_Id()
9373
public async Task Can_Create_Students()
9474
{
9575
// arrange
96-
var student = _studentFaker.Generate();
97-
var client = _server.CreateClient();
76+
var student = _fixture.StudentFaker.Generate();
9877
var httpMethod = new HttpMethod("POST");
9978
var route = $"/api/v1/students/";
10079
var content = new
@@ -114,9 +93,9 @@ public async Task Can_Create_Students()
11493
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.api+json");
11594

11695
// act
117-
var response = await client.SendAsync(request);
96+
var response = await _fixture.Server.CreateClient().SendAsync(request);
11897
var responseBody = await response.Content.ReadAsStringAsync();
119-
var deserializedBody = (StudentDto)_server.GetService<IJsonApiDeSerializer>()
98+
var deserializedBody = (StudentDto)_fixture.Server.GetService<IJsonApiDeSerializer>()
12099
.Deserialize(responseBody);
121100

122101
// assert
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using Bogus;
2+
using JsonApiDotNetCoreExample.Data;
3+
using JsonApiDotNetCoreExample.Models;
4+
using JsonApiDotNetCoreExampleTests.Helpers.Extensions;
5+
using Microsoft.AspNetCore.Hosting;
6+
using Microsoft.AspNetCore.TestHost;
7+
using System;
8+
9+
namespace ResourceEntitySeparationExampleTests
10+
{
11+
public class TestFixture : IDisposable
12+
{
13+
public AppDbContext Context { get; private set; }
14+
public Faker<StudentEntity> StudentFaker { get; private set; }
15+
public TestServer Server { get; private set; }
16+
17+
public TestFixture()
18+
{
19+
var builder = new WebHostBuilder().UseStartup<TestStartup>();
20+
Server = new TestServer(builder);
21+
Context = Server.GetService<AppDbContext>();
22+
Context.Database.EnsureCreated();
23+
24+
StudentFaker = new Faker<StudentEntity>()
25+
.RuleFor(s => s.FirstName, f => f.Name.FirstName())
26+
.RuleFor(s => s.LastName, f => f.Name.LastName());
27+
}
28+
29+
public void Dispose()
30+
{
31+
Server.Dispose();
32+
}
33+
}
34+
}

0 commit comments

Comments
 (0)