1
- using System ;
2
1
using System . Collections . Generic ;
3
2
using System . Net ;
4
3
using System . Net . Http ;
5
4
using System . Net . Http . Headers ;
6
5
using System . Threading . Tasks ;
7
- using Bogus ;
8
6
using JsonApiDotNetCore . Serialization ;
9
- using JsonApiDotNetCoreExample . Data ;
10
7
using JsonApiDotNetCoreExample . Models ;
11
8
using JsonApiDotNetCoreExampleTests . Helpers . Extensions ;
12
- using Microsoft . AspNetCore . Hosting ;
13
- using Microsoft . AspNetCore . TestHost ;
14
9
using Newtonsoft . Json ;
15
10
using Xunit ;
16
11
17
12
namespace ResourceEntitySeparationExampleTests . Acceptance . Extensibility
18
13
{
19
- public class ResourceEntitySeparationExampleTests
14
+ public class ResourceEntitySeparationExampleTests : IClassFixture < TestFixture >
20
15
{
21
- private readonly TestServer _server ;
22
- private readonly AppDbContext _context ;
16
+ private readonly TestFixture _fixture ;
23
17
24
- private Faker < StudentEntity > _studentFaker ;
25
-
26
- public ResourceEntitySeparationExampleTests ( )
18
+ public ResourceEntitySeparationExampleTests ( TestFixture fixture )
27
19
{
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 ;
37
21
}
38
-
22
+
39
23
[ Fact ]
40
24
public async Task Can_Get_Students ( )
41
25
{
42
26
// 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 ( ) ;
47
29
48
30
var httpMethod = new HttpMethod ( "GET" ) ;
49
31
var route = $ "/api/v1/students";
50
32
51
33
var request = new HttpRequestMessage ( httpMethod , route ) ;
52
34
53
35
// act
54
- var response = await client . SendAsync ( request ) ;
36
+ var response = await _fixture . Server . CreateClient ( ) . SendAsync ( request ) ;
55
37
var responseBody = await response . Content . ReadAsStringAsync ( ) ;
56
- var deserializedBody = _server . GetService < IJsonApiDeSerializer > ( )
38
+ var deserializedBody = _fixture . Server . GetService < IJsonApiDeSerializer > ( )
57
39
. DeserializeList < StudentDto > ( responseBody ) ;
58
40
59
41
// assert
@@ -66,21 +48,19 @@ public async Task Can_Get_Students()
66
48
public async Task Can_Get_Students_By_Id ( )
67
49
{
68
50
// 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 ( ) ;
74
54
75
55
var httpMethod = new HttpMethod ( "GET" ) ;
76
56
var route = $ "/api/v1/students/{ student . Id } ";
77
57
78
58
var request = new HttpRequestMessage ( httpMethod , route ) ;
79
59
80
60
// act
81
- var response = await client . SendAsync ( request ) ;
61
+ var response = await _fixture . Server . CreateClient ( ) . SendAsync ( request ) ;
82
62
var responseBody = await response . Content . ReadAsStringAsync ( ) ;
83
- var deserializedBody = ( StudentDto ) _server . GetService < IJsonApiDeSerializer > ( )
63
+ var deserializedBody = ( StudentDto ) _fixture . Server . GetService < IJsonApiDeSerializer > ( )
84
64
. Deserialize ( responseBody ) ;
85
65
86
66
// assert
@@ -93,8 +73,7 @@ public async Task Can_Get_Students_By_Id()
93
73
public async Task Can_Create_Students ( )
94
74
{
95
75
// arrange
96
- var student = _studentFaker . Generate ( ) ;
97
- var client = _server . CreateClient ( ) ;
76
+ var student = _fixture . StudentFaker . Generate ( ) ;
98
77
var httpMethod = new HttpMethod ( "POST" ) ;
99
78
var route = $ "/api/v1/students/";
100
79
var content = new
@@ -114,9 +93,9 @@ public async Task Can_Create_Students()
114
93
request . Content . Headers . ContentType = new MediaTypeHeaderValue ( "application/vnd.api+json" ) ;
115
94
116
95
// act
117
- var response = await client . SendAsync ( request ) ;
96
+ var response = await _fixture . Server . CreateClient ( ) . SendAsync ( request ) ;
118
97
var responseBody = await response . Content . ReadAsStringAsync ( ) ;
119
- var deserializedBody = ( StudentDto ) _server . GetService < IJsonApiDeSerializer > ( )
98
+ var deserializedBody = ( StudentDto ) _fixture . Server . GetService < IJsonApiDeSerializer > ( )
120
99
. Deserialize ( responseBody ) ;
121
100
122
101
// assert
0 commit comments