11#if NET10_0_OR_GREATER
22
3- using System . Net ;
4- using System . Net . Http . Json ;
53using System . Reflection ;
64using System . Text . Json ;
7- using DocumentationSnippets ;
85using Microsoft . AspNetCore . Http ;
9- using Microsoft . AspNetCore . Mvc ;
106using Microsoft . Kiota . Abstractions . Authentication ;
117using Microsoft . Kiota . Http . HttpClientLibrary ;
128using Microsoft . OpenApi ;
13- using TodoApp . Models ;
14- using Xunit ;
9+ using TodoApp . Client ;
10+ using TodoApp . Client . Models ;
1511
1612namespace Swashbuckle . AspNetCore . IntegrationTests ;
1713
@@ -105,10 +101,11 @@ await WithTodoAppClientAsync(async (client) =>
105101
106102 // Arrange
107103 var text = "Buy eggs" ;
108- var newItem = new TodoApp . Client . Models . CreateTodoItemModel { Text = text } ;
109104
110105 // Act - Add a new item
111- var createdItem = await client . Api . Items . PostAsync ( newItem , cancellationToken : cancellationToken ) ;
106+ var createdItem = await client . Api . Items . PostAsync (
107+ new ( ) { Text = text } ,
108+ cancellationToken : cancellationToken ) ;
112109
113110 // Assert - An item was created
114111 Assert . NotNull ( createdItem ) ;
@@ -126,6 +123,22 @@ await WithTodoAppClientAsync(async (client) =>
126123 Assert . Null ( item . CompletedAt ) ;
127124 Assert . NotEqual ( default , item . CreatedAt ) ;
128125 Assert . Equal ( item . CreatedAt . Value , item . LastUpdated ) ;
126+ Assert . Null ( item . Priority ) ;
127+ Assert . Equal ( text , item . Text ) ;
128+
129+ // Act - Update the item to be high priority
130+ await client . Api . Items [ new ( itemId ) ] . Priority . PatchAsync (
131+ new ( ) { Priority = TodoPriority . High } ,
132+ cancellationToken : cancellationToken ) ;
133+
134+ item = await client . Api . Items [ new ( itemId ) ] . GetAsync ( cancellationToken : cancellationToken ) ;
135+
136+ Assert . NotNull ( item ) ;
137+ Assert . Equal ( itemId , item . Id ) ;
138+ Assert . Null ( item . CompletedAt ) ;
139+ Assert . NotEqual ( default , item . CreatedAt ) ;
140+ Assert . Equal ( item . CreatedAt . Value , item . LastUpdated ) ;
141+ Assert . Equal ( TodoPriority . High , item . Priority ) ;
129142 Assert . Equal ( text , item . Text ) ;
130143
131144 // Act - Mark the item as being completed
@@ -170,7 +183,7 @@ await WithTodoAppClientAsync(async (client) =>
170183 Assert . DoesNotContain ( items . Items , ( x ) => x . Id == itemId ) ;
171184
172185 // Act
173- var problem = await Assert . ThrowsAsync < TodoApp . Client . Models . ProblemDetails > (
186+ var problem = await Assert . ThrowsAsync < ProblemDetails > (
174187 ( ) => client . Api . Items [ new ( itemId ) ] . GetAsync ( cancellationToken : cancellationToken ) ) ;
175188
176189 // Assert
@@ -180,6 +193,30 @@ await WithTodoAppClientAsync(async (client) =>
180193 Assert . Equal ( "Item not found." , problem . Detail ) ;
181194 Assert . Equal ( "https://tools.ietf.org/html/rfc9110#section-15.5.5" , problem . Type ) ;
182195 Assert . Null ( problem . Instance ) ;
196+
197+ // Act
198+ problem = await Assert . ThrowsAsync < ProblemDetails > (
199+ ( ) => client . Api . Items [ new ( itemId ) ] . Complete . PostAsync ( cancellationToken : cancellationToken ) ) ;
200+
201+ // Assert
202+ Assert . NotNull ( problem ) ;
203+ Assert . Equal ( StatusCodes . Status404NotFound , problem . Status ) ;
204+ Assert . Equal ( "Not Found" , problem . Title ) ;
205+ Assert . Equal ( "Item not found." , problem . Detail ) ;
206+ Assert . Equal ( "https://tools.ietf.org/html/rfc9110#section-15.5.5" , problem . Type ) ;
207+ Assert . Null ( problem . Instance ) ;
208+
209+ // Act
210+ problem = await Assert . ThrowsAsync < ProblemDetails > (
211+ ( ) => client . Api . Items [ new ( itemId ) ] . Priority . PatchAsync ( new ( ) { Priority = TodoPriority . Low } , cancellationToken : cancellationToken ) ) ;
212+
213+ // Assert
214+ Assert . NotNull ( problem ) ;
215+ Assert . Equal ( StatusCodes . Status404NotFound , problem . Status ) ;
216+ Assert . Equal ( "Not Found" , problem . Title ) ;
217+ Assert . Equal ( "Item not found." , problem . Detail ) ;
218+ Assert . Equal ( "https://tools.ietf.org/html/rfc9110#section-15.5.5" , problem . Type ) ;
219+ Assert . Null ( problem . Instance ) ;
183220 } ) ;
184221 }
185222
@@ -190,11 +227,10 @@ public async Task Cannot_Create_Todo_Item_With_No_Text()
190227 await WithTodoAppClientAsync ( async ( client ) =>
191228 {
192229 var cancellationToken = TestContext . Current . CancellationToken ;
193- var item = new TodoApp . Client . Models . CreateTodoItemModel { Text = string . Empty } ;
194230
195231 // Act
196- var problem = await Assert . ThrowsAsync < TodoApp . Client . Models . ProblemDetails > (
197- ( ) => client . Api . Items . PostAsync ( item , cancellationToken : cancellationToken ) ) ;
232+ var problem = await Assert . ThrowsAsync < ProblemDetails > (
233+ ( ) => client . Api . Items . PostAsync ( new ( ) { Text = string . Empty } , cancellationToken : cancellationToken ) ) ;
198234
199235 // Assert
200236 Assert . NotNull ( problem ) ;
@@ -213,14 +249,15 @@ public async Task Cannot_Complete_Todo_Item_Multiple_Times()
213249 await WithTodoAppClientAsync ( async ( client ) =>
214250 {
215251 var cancellationToken = TestContext . Current . CancellationToken ;
216- var item = new TodoApp . Client . Models . CreateTodoItemModel { Text = "Something" } ;
217252
218- var createdItem = await client . Api . Items . PostAsync ( item , cancellationToken : cancellationToken ) ;
253+ var createdItem = await client . Api . Items . PostAsync (
254+ new ( ) { Text = "Something" } ,
255+ cancellationToken : cancellationToken ) ;
219256
220257 await client . Api . Items [ new ( createdItem . Id ) ] . Complete . PostAsync ( cancellationToken : cancellationToken ) ;
221258
222259 // Act
223- var problem = await Assert . ThrowsAsync < TodoApp . Client . Models . ProblemDetails > (
260+ var problem = await Assert . ThrowsAsync < ProblemDetails > (
224261 ( ) => client . Api . Items [ new ( createdItem . Id ) ] . Complete . PostAsync ( cancellationToken : cancellationToken ) ) ;
225262
226263 // Assert
@@ -240,14 +277,15 @@ public async Task Cannot_Complete_Deleted_Todo_Item()
240277 await WithTodoAppClientAsync ( async ( client ) =>
241278 {
242279 var cancellationToken = TestContext . Current . CancellationToken ;
243- var item = new TodoApp . Client . Models . CreateTodoItemModel { Text = "Something" } ;
244280
245- var createdItem = await client . Api . Items . PostAsync ( item , cancellationToken : cancellationToken ) ;
281+ var createdItem = await client . Api . Items . PostAsync (
282+ new ( ) { Text = "Something" } ,
283+ cancellationToken : cancellationToken ) ;
246284
247285 await client . Api . Items [ new ( createdItem . Id ) ] . DeleteAsync ( cancellationToken : cancellationToken ) ;
248286
249287 // Act
250- var problem = await Assert . ThrowsAsync < TodoApp . Client . Models . ProblemDetails > (
288+ var problem = await Assert . ThrowsAsync < ProblemDetails > (
251289 ( ) => client . Api . Items [ new ( createdItem . Id ) ] . Complete . PostAsync ( cancellationToken : cancellationToken ) ) ;
252290
253291 // Assert
@@ -267,14 +305,15 @@ public async Task Cannot_Delete_Todo_Item_Multiple_Times()
267305 await WithTodoAppClientAsync ( async ( client ) =>
268306 {
269307 var cancellationToken = TestContext . Current . CancellationToken ;
270- var item = new TodoApp . Client . Models . CreateTodoItemModel { Text = "Something" } ;
271308
272- var createdItem = await client . Api . Items . PostAsync ( item , cancellationToken : cancellationToken ) ;
309+ var createdItem = await client . Api . Items . PostAsync (
310+ new ( ) { Text = "Something" } ,
311+ cancellationToken : cancellationToken ) ;
273312
274313 await client . Api . Items [ new ( createdItem . Id ) ] . DeleteAsync ( cancellationToken : cancellationToken ) ;
275314
276315 // Act
277- var problem = await Assert . ThrowsAsync < TodoApp . Client . Models . ProblemDetails > (
316+ var problem = await Assert . ThrowsAsync < ProblemDetails > (
278317 ( ) => client . Api . Items [ new ( createdItem . Id ) ] . DeleteAsync ( cancellationToken : cancellationToken ) ) ;
279318
280319 // Assert
@@ -302,14 +341,14 @@ private static string GetProjectRoot() =>
302341 . First ( ( p ) => p . Key is "ProjectRoot" )
303342 . Value ! ;
304343
305- private static async Task WithTodoAppClientAsync ( Func < TodoApp . Client . TodoApiClient , Task > callback )
344+ private static async Task WithTodoAppClientAsync ( Func < TodoApiClient , Task > callback )
306345 {
307346 using var httpClient = SwaggerIntegrationTests . GetHttpClientForTestApplication ( typeof ( TodoApp . Program ) ) ;
308347
309348 var provider = new AnonymousAuthenticationProvider ( ) ;
310349 using var request = new HttpClientRequestAdapter ( provider , httpClient : httpClient ) ;
311350
312- var client = new TodoApp . Client . TodoApiClient ( request ) ;
351+ var client = new TodoApiClient ( request ) ;
313352
314353 await callback ( client ) ;
315354 }
0 commit comments