3
3
using System . Net ;
4
4
using System . Threading . Tasks ;
5
5
using Bogus ;
6
- using JsonApiDotNetCore . Extensions ;
7
6
using JsonApiDotNetCore . Models . Operations ;
8
7
using Microsoft . EntityFrameworkCore ;
9
8
using OperationsExample . Data ;
@@ -24,20 +23,20 @@ public AddTests(Fixture fixture)
24
23
}
25
24
26
25
[ Fact ]
27
- public async Task Can_Create_Article ( )
26
+ public async Task Can_Create_Author ( )
28
27
{
29
28
// arrange
30
29
var context = _fixture . GetService < AppDbContext > ( ) ;
31
- var article = ArticleFactory . Get ( ) ;
30
+ var author = AuthorFactory . Get ( ) ;
32
31
var content = new
33
32
{
34
33
operations = new [ ] {
35
34
new {
36
35
op = "add" ,
37
36
data = new {
38
- type = "articles " ,
37
+ type = "authors " ,
39
38
attributes = new {
40
- name = article . Name
39
+ name = author . Name
41
40
}
42
41
}
43
42
}
@@ -48,21 +47,21 @@ public async Task Can_Create_Article()
48
47
var result = await _fixture . PatchAsync < OperationsDocument > ( "api/bulk" , content ) ;
49
48
50
49
// assert
51
- Assert . NotNull ( result ) ;
50
+ Assert . NotNull ( result . response ) ;
52
51
Assert . Equal ( HttpStatusCode . OK , result . response . StatusCode ) ;
53
52
54
- var id = ( string ) result . data . Operations . Single ( ) . DataObject . Id ;
55
- var lastArticle = await context . Articles . SingleAsync ( a => a . StringId == id ) ;
56
- Assert . Equal ( article . Name , lastArticle . Name ) ;
53
+ var id = result . data . Operations . Single ( ) . DataObject . Id ;
54
+ var lastAuthor = await context . Authors . SingleAsync ( a => a . StringId == id ) ;
55
+ Assert . Equal ( author . Name , lastAuthor . Name ) ;
57
56
}
58
57
59
58
[ Fact ]
60
- public async Task Can_Create_Articles ( )
59
+ public async Task Can_Create_Authors ( )
61
60
{
62
61
// arrange
63
62
var expectedCount = _faker . Random . Int ( 1 , 10 ) ;
64
63
var context = _fixture . GetService < AppDbContext > ( ) ;
65
- var articles = ArticleFactory . Get ( expectedCount ) ;
64
+ var authors = AuthorFactory . Get ( expectedCount ) ;
66
65
var content = new
67
66
{
68
67
operations = new List < object > ( )
@@ -76,30 +75,97 @@ public async Task Can_Create_Articles()
76
75
op = "add" ,
77
76
data = new
78
77
{
79
- type = "articles " ,
78
+ type = "authors " ,
80
79
attributes = new
81
80
{
82
- name = articles [ i ] . Name
81
+ name = authors [ i ] . Name
83
82
}
84
83
}
85
84
}
86
85
) ;
87
86
}
88
87
89
88
// act
90
- var result = await _fixture . PatchAsync < OperationsDocument > ( "api/bulk" , content ) ;
89
+ var ( response , data ) = await _fixture . PatchAsync < OperationsDocument > ( "api/bulk" , content ) ;
91
90
92
91
// assert
93
- Assert . NotNull ( result ) ;
94
- Assert . Equal ( HttpStatusCode . OK , result . response . StatusCode ) ;
95
- Assert . Equal ( expectedCount , result . data . Operations . Count ) ;
92
+ Assert . NotNull ( response ) ;
93
+ Assert . Equal ( HttpStatusCode . OK , response . StatusCode ) ;
94
+ Assert . Equal ( expectedCount , data . Operations . Count ) ;
96
95
97
96
for ( int i = 0 ; i < expectedCount ; i ++ )
98
97
{
99
- var data = result . data . Operations [ i ] . DataObject ;
100
- var article = context . Articles . Single ( a => a . StringId == data . Id . ToString ( ) ) ;
101
- Assert . Equal ( articles [ i ] . Name , article . Name ) ;
98
+ var dataObject = data . Operations [ i ] . DataObject ;
99
+ var author = context . Authors . Single ( a => a . StringId == dataObject . ToString ( ) ) ;
100
+ Assert . Equal ( authors [ i ] . Name , author . Name ) ;
102
101
}
102
+ }
103
+
104
+ [ Fact ]
105
+ public async Task Can_Create_Author_With_Article ( )
106
+ {
107
+ // arrange
108
+ var context = _fixture . GetService < AppDbContext > ( ) ;
109
+ var author = AuthorFactory . Get ( ) ;
110
+ var article = ArticleFactory . Get ( ) ;
111
+ const string authorLocalId = "author-1" ;
112
+
113
+ var content = new
114
+ {
115
+ operations = new object [ ] {
116
+ new {
117
+ op = "add" ,
118
+ data = new {
119
+ lid = authorLocalId ,
120
+ type = "authors" ,
121
+ attributes = new {
122
+ name = author . Name
123
+ } ,
124
+ }
125
+ } ,
126
+ new {
127
+ op = "add" ,
128
+ data = new {
129
+ type = "articles" ,
130
+ attributes = new {
131
+ name = article . Name
132
+ } ,
133
+ relationships = new {
134
+ author = new {
135
+ data = new {
136
+ type = "authors" ,
137
+ lid = authorLocalId
138
+ }
139
+ }
140
+ }
141
+ }
142
+ }
143
+ }
144
+ } ;
145
+
146
+ // act
147
+ var ( response , data ) = await _fixture . PatchAsync < OperationsDocument > ( "api/bulk" , content ) ;
148
+
149
+ // assert
150
+ Assert . NotNull ( response ) ;
151
+ Assert . Equal ( HttpStatusCode . OK , response . StatusCode ) ;
152
+ Assert . Equal ( 2 , data . Operations . Count ) ;
153
+
154
+ var authorOperationResult = data . Operations [ 0 ] ;
155
+ var id = authorOperationResult . DataObject . Id ;
156
+ var lastAuthor = await context . Authors
157
+ . Include ( a => a . Articles )
158
+ . SingleAsync ( a => a . StringId == id ) ;
159
+ var articleOperationResult = data . Operations [ 1 ] ;
160
+
161
+ // author validation
162
+ Assert . Equal ( authorLocalId , authorOperationResult . DataObject . LocalId ) ;
163
+ Assert . Equal ( author . Name , lastAuthor . Name ) ;
164
+
165
+ // article validation
166
+ Assert . Equal ( 1 , lastAuthor . Articles . Count ) ;
167
+ Assert . Equal ( article . Name , lastAuthor . Articles [ 0 ] . Name ) ;
168
+ Assert . Equal ( articleOperationResult . DataObject . Id , lastAuthor . Articles [ 0 ] . StringId ) ;
103
169
}
104
170
}
105
171
}
0 commit comments