@@ -50,7 +50,7 @@ public async Task Respond_415_If_Content_Type_Header_Is_Not_JsonApi_Media_Type()
50
50
var server = new TestServer ( builder ) ;
51
51
var client = server . CreateClient ( ) ;
52
52
var request = new HttpRequestMessage ( new HttpMethod ( "POST" ) , route ) { Content = new StringContent ( string . Empty ) } ;
53
- request . Content . Headers . ContentType = new MediaTypeHeaderValue ( "text/html" ) ;
53
+ request . Content . Headers . ContentType = MediaTypeHeaderValue . Parse ( "text/html" ) ;
54
54
55
55
// Act
56
56
var response = await client . SendAsync ( request ) ;
@@ -78,7 +78,7 @@ public async Task Respond_201_If_Content_Type_Header_Is_JsonApi_Media_Type()
78
78
var server = new TestServer ( builder ) ;
79
79
var client = server . CreateClient ( ) ;
80
80
var request = new HttpRequestMessage ( HttpMethod . Post , route ) { Content = new StringContent ( serializer . Serialize ( todoItem ) ) } ;
81
- request . Content . Headers . ContentType = new MediaTypeHeaderValue ( HeaderConstants . MediaType ) ;
81
+ request . Content . Headers . ContentType = MediaTypeHeaderValue . Parse ( HeaderConstants . MediaType ) ;
82
82
83
83
// Act
84
84
var response = await client . SendAsync ( request ) ;
@@ -88,43 +88,65 @@ public async Task Respond_201_If_Content_Type_Header_Is_JsonApi_Media_Type()
88
88
}
89
89
90
90
[ Fact ]
91
- public async Task Respond_201_If_Content_Type_Header_Is_JsonApi_Media_Type_With_Extension ( )
91
+ public async Task Respond_415_If_Content_Type_Header_Is_JsonApi_Media_Type_With_Profile ( )
92
92
{
93
93
// Arrange
94
- var serializer = _fixture . GetSerializer < TodoItem > ( e => new { e . Description } ) ;
95
- var todoItem = new TodoItem { Description = "something not to forget" } ;
94
+ var builder = new WebHostBuilder ( ) . UseStartup < Startup > ( ) ;
95
+ var route = "/api/v1/todoItems" ;
96
+ var server = new TestServer ( builder ) ;
97
+ var client = server . CreateClient ( ) ;
98
+ var request = new HttpRequestMessage ( new HttpMethod ( "POST" ) , route ) { Content = new StringContent ( string . Empty ) } ;
99
+ request . Content . Headers . ContentType = MediaTypeHeaderValue . Parse ( HeaderConstants . MediaType + "; profile=something" ) ;
100
+
101
+ // Act
102
+ var response = await client . SendAsync ( request ) ;
96
103
104
+ // Assert
105
+ Assert . Equal ( HttpStatusCode . UnsupportedMediaType , response . StatusCode ) ;
106
+
107
+ var body = await response . Content . ReadAsStringAsync ( ) ;
108
+ var errorDocument = JsonConvert . DeserializeObject < ErrorDocument > ( body ) ;
109
+ Assert . Single ( errorDocument . Errors ) ;
110
+ Assert . Equal ( HttpStatusCode . UnsupportedMediaType , errorDocument . Errors [ 0 ] . StatusCode ) ;
111
+ Assert . Equal ( "The specified Content-Type header value is not supported." , errorDocument . Errors [ 0 ] . Title ) ;
112
+ Assert . Equal ( "Please specify 'application/vnd.api+json' instead of 'application/vnd.api+json; profile=something' for the Content-Type header value." , errorDocument . Errors [ 0 ] . Detail ) ;
113
+ }
114
+
115
+ [ Fact ]
116
+ public async Task Respond_415_If_Content_Type_Header_Is_JsonApi_Media_Type_With_Extension ( )
117
+ {
97
118
// Arrange
98
119
var builder = new WebHostBuilder ( ) . UseStartup < Startup > ( ) ;
99
120
var route = "/api/v1/todoItems" ;
100
121
var server = new TestServer ( builder ) ;
101
122
var client = server . CreateClient ( ) ;
102
- var request = new HttpRequestMessage ( HttpMethod . Post , route ) { Content = new StringContent ( serializer . Serialize ( todoItem ) ) } ;
103
- request . Content . Headers . ContentType = new MediaTypeHeaderValue ( HeaderConstants . MediaType )
104
- {
105
- Parameters = { new NameValueHeaderValue ( "ext" , "some-extension" ) }
106
- } ;
123
+ var request = new HttpRequestMessage ( new HttpMethod ( "POST" ) , route ) { Content = new StringContent ( string . Empty ) } ;
124
+ request . Content . Headers . ContentType = MediaTypeHeaderValue . Parse ( HeaderConstants . MediaType + "; ext=something" ) ;
107
125
108
126
// Act
109
127
var response = await client . SendAsync ( request ) ;
110
128
111
129
// Assert
112
- Assert . Equal ( HttpStatusCode . Created , response . StatusCode ) ;
130
+ Assert . Equal ( HttpStatusCode . UnsupportedMediaType , response . StatusCode ) ;
131
+
132
+ var body = await response . Content . ReadAsStringAsync ( ) ;
133
+ var errorDocument = JsonConvert . DeserializeObject < ErrorDocument > ( body ) ;
134
+ Assert . Single ( errorDocument . Errors ) ;
135
+ Assert . Equal ( HttpStatusCode . UnsupportedMediaType , errorDocument . Errors [ 0 ] . StatusCode ) ;
136
+ Assert . Equal ( "The specified Content-Type header value is not supported." , errorDocument . Errors [ 0 ] . Title ) ;
137
+ Assert . Equal ( "Please specify 'application/vnd.api+json' instead of 'application/vnd.api+json; ext=something' for the Content-Type header value." , errorDocument . Errors [ 0 ] . Detail ) ;
113
138
}
114
139
115
140
[ Fact ]
116
- public async Task Respond_415_If_Content_Type_Header_Is_JsonApi_Media_Type_With_CharSet_Parameter ( )
141
+ public async Task Respond_415_If_Content_Type_Header_Is_JsonApi_Media_Type_With_CharSet ( )
117
142
{
118
143
// Arrange
119
144
var builder = new WebHostBuilder ( ) . UseStartup < Startup > ( ) ;
120
145
var route = "/api/v1/todoItems" ;
121
146
var server = new TestServer ( builder ) ;
122
147
var client = server . CreateClient ( ) ;
123
148
var request = new HttpRequestMessage ( HttpMethod . Post , route ) { Content = new StringContent ( string . Empty ) } ;
124
- request . Content . Headers . ContentType = new MediaTypeHeaderValue ( HeaderConstants . MediaType )
125
- {
126
- CharSet = "ISO-8859-4"
127
- } ;
149
+ request . Content . Headers . ContentType = MediaTypeHeaderValue . Parse ( HeaderConstants . MediaType + "; charset=ISO-8859-4" ) ;
128
150
129
151
// Act
130
152
var response = await client . SendAsync ( request ) ;
@@ -141,18 +163,15 @@ public async Task Respond_415_If_Content_Type_Header_Is_JsonApi_Media_Type_With_
141
163
}
142
164
143
165
[ Fact ]
144
- public async Task Respond_415_If_Content_Type_Header_Is_JsonApi_Media_Type_With_Unknown_Parameter ( )
166
+ public async Task Respond_415_If_Content_Type_Header_Is_JsonApi_Media_Type_With_Unknown ( )
145
167
{
146
168
// Arrange
147
169
var builder = new WebHostBuilder ( ) . UseStartup < Startup > ( ) ;
148
170
var route = "/api/v1/todoItems" ;
149
171
var server = new TestServer ( builder ) ;
150
172
var client = server . CreateClient ( ) ;
151
173
var request = new HttpRequestMessage ( HttpMethod . Post , route ) { Content = new StringContent ( string . Empty ) } ;
152
- request . Content . Headers . ContentType = new MediaTypeHeaderValue ( HeaderConstants . MediaType )
153
- {
154
- Parameters = { new NameValueHeaderValue ( "unknown" , "unexpected" ) }
155
- } ;
174
+ request . Content . Headers . ContentType = MediaTypeHeaderValue . Parse ( HeaderConstants . MediaType + "; unknown=unexpected" ) ;
156
175
157
176
// Act
158
177
var response = await client . SendAsync ( request ) ;
@@ -186,17 +205,15 @@ public async Task Respond_200_If_Accept_Headers_Are_Missing()
186
205
}
187
206
188
207
[ Fact ]
189
- public async Task Respond_200_If_Accept_Headers_Contain_JsonApi_Media_Type ( )
208
+ public async Task Respond_200_If_Accept_Headers_Include_Any ( )
190
209
{
191
210
// Arrange
192
211
var builder = new WebHostBuilder ( ) . UseStartup < Startup > ( ) ;
193
212
var route = "/api/v1/todoItems" ;
194
213
var server = new TestServer ( builder ) ;
195
214
var client = server . CreateClient ( ) ;
196
215
client . DefaultRequestHeaders . Accept . Add ( MediaTypeWithQualityHeaderValue . Parse ( "text/html" ) ) ;
197
- client . DefaultRequestHeaders . Accept . Add ( MediaTypeWithQualityHeaderValue . Parse ( HeaderConstants . MediaType + "; some=1" ) ) ;
198
- client . DefaultRequestHeaders . Accept . Add ( MediaTypeWithQualityHeaderValue . Parse ( HeaderConstants . MediaType + "; other=2" ) ) ;
199
- client . DefaultRequestHeaders . Accept . Add ( MediaTypeWithQualityHeaderValue . Parse ( HeaderConstants . MediaType ) ) ;
216
+ client . DefaultRequestHeaders . Accept . Add ( MediaTypeWithQualityHeaderValue . Parse ( "*/*" ) ) ;
200
217
var request = new HttpRequestMessage ( HttpMethod . Get , route ) ;
201
218
202
219
// Act
@@ -207,23 +224,15 @@ public async Task Respond_200_If_Accept_Headers_Contain_JsonApi_Media_Type()
207
224
}
208
225
209
226
[ Fact ]
210
- public async Task Respond_200_If_Accept_Headers_Contain_JsonApi_Media_Type_With_Extension ( )
227
+ public async Task Respond_200_If_Accept_Headers_Include_Application_Prefix ( )
211
228
{
212
229
// Arrange
213
230
var builder = new WebHostBuilder ( ) . UseStartup < Startup > ( ) ;
214
231
var route = "/api/v1/todoItems" ;
215
232
var server = new TestServer ( builder ) ;
216
233
var client = server . CreateClient ( ) ;
217
234
client . DefaultRequestHeaders . Accept . Add ( MediaTypeWithQualityHeaderValue . Parse ( "text/html" ) ) ;
218
- client . DefaultRequestHeaders . Accept . Add ( MediaTypeWithQualityHeaderValue . Parse ( HeaderConstants . MediaType + "; some=1" ) ) ;
219
- client . DefaultRequestHeaders . Accept . Add ( MediaTypeWithQualityHeaderValue . Parse ( HeaderConstants . MediaType + "; other=2" ) ) ;
220
- client . DefaultRequestHeaders . Accept . Add ( new MediaTypeWithQualityHeaderValue ( HeaderConstants . MediaType )
221
- {
222
- Parameters =
223
- {
224
- new NameValueHeaderValue ( "ext" , "some-extension" )
225
- }
226
- } ) ;
235
+ client . DefaultRequestHeaders . Accept . Add ( MediaTypeWithQualityHeaderValue . Parse ( "application/*" ) ) ;
227
236
var request = new HttpRequestMessage ( HttpMethod . Get , route ) ;
228
237
229
238
// Act
@@ -234,42 +243,39 @@ public async Task Respond_200_If_Accept_Headers_Contain_JsonApi_Media_Type_With_
234
243
}
235
244
236
245
[ Fact ]
237
- public async Task Respond_406_If_Accept_Headers_Do_Not_Contain_JsonApi_Media_Type ( )
246
+ public async Task Respond_200_If_Accept_Headers_Contain_JsonApi_Media_Type ( )
238
247
{
239
248
// Arrange
240
249
var builder = new WebHostBuilder ( ) . UseStartup < Startup > ( ) ;
241
250
var route = "/api/v1/todoItems" ;
242
251
var server = new TestServer ( builder ) ;
243
252
var client = server . CreateClient ( ) ;
244
253
client . DefaultRequestHeaders . Accept . Add ( MediaTypeWithQualityHeaderValue . Parse ( "text/html" ) ) ;
245
- client . DefaultRequestHeaders . Accept . Add ( MediaTypeWithQualityHeaderValue . Parse ( "image/*" ) ) ;
254
+ client . DefaultRequestHeaders . Accept . Add ( MediaTypeWithQualityHeaderValue . Parse ( HeaderConstants . MediaType + "; profile=some" ) ) ;
255
+ client . DefaultRequestHeaders . Accept . Add ( MediaTypeWithQualityHeaderValue . Parse ( HeaderConstants . MediaType + "; ext=other" ) ) ;
256
+ client . DefaultRequestHeaders . Accept . Add ( MediaTypeWithQualityHeaderValue . Parse ( HeaderConstants . MediaType + "; unknown=unexpected" ) ) ;
257
+ client . DefaultRequestHeaders . Accept . Add ( MediaTypeWithQualityHeaderValue . Parse ( HeaderConstants . MediaType ) ) ;
246
258
var request = new HttpRequestMessage ( HttpMethod . Get , route ) ;
247
259
248
260
// Act
249
261
var response = await client . SendAsync ( request ) ;
250
262
251
263
// Assert
252
- Assert . Equal ( HttpStatusCode . NotAcceptable , response . StatusCode ) ;
253
-
254
- var body = await response . Content . ReadAsStringAsync ( ) ;
255
- var errorDocument = JsonConvert . DeserializeObject < ErrorDocument > ( body ) ;
256
- Assert . Single ( errorDocument . Errors ) ;
257
- Assert . Equal ( HttpStatusCode . NotAcceptable , errorDocument . Errors [ 0 ] . StatusCode ) ;
258
- Assert . Equal ( "The specified Accept header value is not supported." , errorDocument . Errors [ 0 ] . Title ) ;
259
- Assert . Equal ( "Please include 'application/vnd.api+json' in the Accept header values." , errorDocument . Errors [ 0 ] . Detail ) ;
264
+ Assert . Equal ( HttpStatusCode . OK , response . StatusCode ) ;
260
265
}
261
266
262
267
[ Fact ]
263
- public async Task Respond_406_If_Accept_Headers_Contain_JsonApi_Media_Type_With_Only_Parameters_Other_Than_Extension ( )
268
+ public async Task Respond_406_If_Accept_Headers_Only_Contain_JsonApi_Media_Type_With_Parameters ( )
264
269
{
265
270
// Arrange
266
271
var builder = new WebHostBuilder ( ) . UseStartup < Startup > ( ) ;
267
272
var route = "/api/v1/todoItems" ;
268
273
var server = new TestServer ( builder ) ;
269
274
var client = server . CreateClient ( ) ;
270
- client . DefaultRequestHeaders . Accept . Add ( MediaTypeWithQualityHeaderValue . Parse ( "text/html" ) ) ;
271
- client . DefaultRequestHeaders . Accept . Add ( MediaTypeWithQualityHeaderValue . Parse ( HeaderConstants . MediaType + "; some=1" ) ) ;
272
- client . DefaultRequestHeaders . Accept . Add ( MediaTypeWithQualityHeaderValue . Parse ( HeaderConstants . MediaType + "; other=2" ) ) ;
275
+ client . DefaultRequestHeaders . Accept . Add ( MediaTypeWithQualityHeaderValue . Parse ( HeaderConstants . MediaType + "; profile=some" ) ) ;
276
+ client . DefaultRequestHeaders . Accept . Add ( MediaTypeWithQualityHeaderValue . Parse ( HeaderConstants . MediaType + "; ext=other" ) ) ;
277
+ client . DefaultRequestHeaders . Accept . Add ( MediaTypeWithQualityHeaderValue . Parse ( HeaderConstants . MediaType + "; unknown=unexpected" ) ) ;
278
+ client . DefaultRequestHeaders . Accept . Add ( MediaTypeWithQualityHeaderValue . Parse ( HeaderConstants . MediaType + "; charset=ISO-8859-4" ) ) ;
273
279
var request = new HttpRequestMessage ( HttpMethod . Get , route ) ;
274
280
275
281
// Act
@@ -282,7 +288,7 @@ public async Task Respond_406_If_Accept_Headers_Contain_JsonApi_Media_Type_With_
282
288
var errorDocument = JsonConvert . DeserializeObject < ErrorDocument > ( body ) ;
283
289
Assert . Single ( errorDocument . Errors ) ;
284
290
Assert . Equal ( HttpStatusCode . NotAcceptable , errorDocument . Errors [ 0 ] . StatusCode ) ;
285
- Assert . Equal ( "The specified Accept header value is not supported." , errorDocument . Errors [ 0 ] . Title ) ;
291
+ Assert . Equal ( "The specified Accept header value does not contain any supported media types ." , errorDocument . Errors [ 0 ] . Title ) ;
286
292
Assert . Equal ( "Please include 'application/vnd.api+json' in the Accept header values." , errorDocument . Errors [ 0 ] . Detail ) ;
287
293
}
288
294
}
0 commit comments