Skip to content

Commit 40a3725

Browse files
test: upgrade to xunit.v3
1 parent 321c470 commit 40a3725

File tree

11 files changed

+77
-72
lines changed

11 files changed

+77
-72
lines changed

tests/BHS.Api.IntegrationTests/BHS.Api.IntegrationTests.csproj

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<TargetFramework>net8.0</TargetFramework>
55
<Nullable>enable</Nullable>
66
<ImplicitUsings>enable</ImplicitUsings>
7+
<OutputType>Exe</OutputType>
78

89
<IsPackable>false</IsPackable>
910
<Copyright>© 2020-2023 Jason Weinzierl</Copyright>
@@ -20,8 +21,8 @@
2021
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="8.0.10" />
2122
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
2223
<PackageReference Include="NSubstitute" Version="5.1.0" />
23-
<PackageReference Include="xunit" Version="2.9.2" />
24-
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
24+
<PackageReference Include="xunit.v3" Version="1.0.0" />
25+
<PackageReference Include="xunit.runner.visualstudio" Version="3.0.0">
2526
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2627
<PrivateAssets>all</PrivateAssets>
2728
</PackageReference>

tests/BHS.Api.IntegrationTests/EndpointTests.cs

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ public EndpointTests(BhsWebApplicationFactory<Program> factory)
3333
[Fact]
3434
public async Task HealthCheck_Ok()
3535
{
36-
using var response = await _httpClient.GetAsync("/api/healthcheck/status");
36+
using var response = await _httpClient.GetAsync("/api/healthcheck/status", TestContext.Current.CancellationToken);
3737

38-
string content = await response.Content.ReadAsStringAsync();
38+
string content = await response.Content.ReadAsStringAsync(TestContext.Current.CancellationToken);
3939

4040
Assert.Equal("Healthy", content);
4141
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
@@ -44,7 +44,7 @@ public async Task HealthCheck_Ok()
4444
[Fact]
4545
public async Task Swagger_Ok()
4646
{
47-
using var response = await _httpClient.GetAsync("/api/swagger/index.html");
47+
using var response = await _httpClient.GetAsync("/api/swagger/index.html", TestContext.Current.CancellationToken);
4848

4949
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
5050
Assert.Equal(MediaTypeNames.Text.Html, response.Content.Headers.ContentType?.MediaType);
@@ -57,15 +57,15 @@ public async Task Author_GetByAuthUserId_InvalidFormat_400()
5757
.GetAsync<User>(Arg.Any<Uri>(), Arg.Any<Dictionary<string, string>>(), null, Arg.Any<CancellationToken>())
5858
.Throws(new ErrorApiException(HttpStatusCode.BadRequest));
5959

60-
using var response = await _httpClient.GetAsync("/api/authors?authUserId=12345");
60+
using var response = await _httpClient.GetAsync("/api/authors?authUserId=12345", TestContext.Current.CancellationToken);
6161

6262
Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
6363
}
6464

6565
[Fact]
6666
public async Task Author_GetPosts_Empty()
6767
{
68-
var posts = await _httpClient.GetFromJsonAsync<IEnumerable<PostPreview>>($"/api/authors/{Random.Shared.Next()}/posts");
68+
var posts = await _httpClient.GetFromJsonAsync<IEnumerable<PostPreview>>($"/api/authors/{Random.Shared.Next()}/posts", TestContext.Current.CancellationToken);
6969

7070
Assert.NotNull(posts);
7171
Assert.Empty(posts);
@@ -74,7 +74,7 @@ public async Task Author_GetPosts_Empty()
7474
[Fact]
7575
public async Task Banners_GetCurrent()
7676
{
77-
var banners = await _httpClient.GetFromJsonAsync<IEnumerable<SiteBanner>>("/api/banners/current");
77+
var banners = await _httpClient.GetFromJsonAsync<IEnumerable<SiteBanner>>("/api/banners/current", TestContext.Current.CancellationToken);
7878

7979
Assert.NotNull(banners);
8080
Assert.Empty(banners);
@@ -83,7 +83,7 @@ public async Task Banners_GetCurrent()
8383
[Fact]
8484
public async Task Blog_GetPosts()
8585
{
86-
var posts = await _httpClient.GetFromJsonAsync<IEnumerable<PostPreview>>("/api/blog/posts");
86+
var posts = await _httpClient.GetFromJsonAsync<IEnumerable<PostPreview>>("/api/blog/posts", TestContext.Current.CancellationToken);
8787

8888
Assert.NotNull(posts);
8989
Assert.Empty(posts);
@@ -102,10 +102,10 @@ public async Task Blog_CreatePost()
102102
datePublished,
103103
[new Category("newsletters", "Newsletters")]);
104104

105-
using var response = await _httpClient.PostAsJsonAsync("/api/blog/posts", request);
105+
using var response = await _httpClient.PostAsJsonAsync("/api/blog/posts", request, TestContext.Current.CancellationToken);
106106

107107
Assert.Equal(HttpStatusCode.Created, response.StatusCode);
108-
var post = await response.Content.ReadFromJsonAsync<Post>();
108+
var post = await response.Content.ReadFromJsonAsync<Post>(TestContext.Current.CancellationToken);
109109

110110
Assert.NotNull(post);
111111
Assert.Contains("-hello-world", post.Slug);
@@ -139,16 +139,16 @@ public async Task Blog_UpdatePost()
139139
Categories = [new Category("cat1", "Cat1"), new Category("cat3", "Cat3")],
140140
};
141141

142-
using var createResponse = await _httpClient.PostAsJsonAsync("/api/blog/posts", createRequest);
142+
using var createResponse = await _httpClient.PostAsJsonAsync("/api/blog/posts", createRequest, TestContext.Current.CancellationToken);
143143

144144
Assert.Equal(HttpStatusCode.Created, createResponse.StatusCode);
145-
var initialPost = await createResponse.Content.ReadFromJsonAsync<Post>();
145+
var initialPost = await createResponse.Content.ReadFromJsonAsync<Post>(TestContext.Current.CancellationToken);
146146
Assert.NotNull(initialPost?.Slug);
147147

148-
using var response2 = await _httpClient.PutAsJsonAsync($"/api/blog/posts/{initialPost.Slug}", updateRequest);
148+
using var response2 = await _httpClient.PutAsJsonAsync($"/api/blog/posts/{initialPost.Slug}", updateRequest, TestContext.Current.CancellationToken);
149149

150150
Assert.Equal(HttpStatusCode.OK, response2.StatusCode);
151-
var updatedPost = await response2.Content.ReadFromJsonAsync<Post>();
151+
var updatedPost = await response2.Content.ReadFromJsonAsync<Post>(TestContext.Current.CancellationToken);
152152

153153
Assert.NotNull(updatedPost);
154154
Assert.Equal(initialPost.Slug, updatedPost.Slug);
@@ -170,45 +170,45 @@ public async Task Blog_DeletePost()
170170
DateTimeOffset.Now,
171171
[]);
172172

173-
using var createResponse = await _httpClient.PostAsJsonAsync("/api/blog/posts", createRequest);
173+
using var createResponse = await _httpClient.PostAsJsonAsync("/api/blog/posts", createRequest, TestContext.Current.CancellationToken);
174174

175175
Assert.Equal(HttpStatusCode.Created, createResponse.StatusCode);
176-
var post = await createResponse.Content.ReadFromJsonAsync<Post>();
176+
var post = await createResponse.Content.ReadFromJsonAsync<Post>(TestContext.Current.CancellationToken);
177177
Assert.NotNull(post);
178178

179-
using var deleteResponse = await _httpClient.DeleteAsync($"/api/blog/posts/{post.Slug}");
179+
using var deleteResponse = await _httpClient.DeleteAsync($"/api/blog/posts/{post.Slug}", TestContext.Current.CancellationToken);
180180

181181
Assert.Equal(HttpStatusCode.NoContent, deleteResponse.StatusCode);
182182
}
183183

184184
[Fact]
185185
public async Task Blog_GetPostById_404()
186186
{
187-
using var response = await _httpClient.GetAsync($"/api/blog/posts/{Random.Shared.Next()}");
187+
using var response = await _httpClient.GetAsync($"/api/blog/posts/{Random.Shared.Next()}", TestContext.Current.CancellationToken);
188188

189189
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
190190
}
191191

192192
[Fact]
193193
public async Task Blog_GetCategories()
194194
{
195-
var categories = await _httpClient.GetFromJsonAsync<IEnumerable<CategorySummary>>("/api/blog/categories");
195+
var categories = await _httpClient.GetFromJsonAsync<IEnumerable<CategorySummary>>("/api/blog/categories", TestContext.Current.CancellationToken);
196196

197197
Assert.NotNull(categories);
198198
}
199199

200200
[Fact]
201201
public async Task Blog_GetCategoryById_404()
202202
{
203-
using var response = await _httpClient.GetAsync($"/api/blog/categories/{Random.Shared.Next()}");
203+
using var response = await _httpClient.GetAsync($"/api/blog/categories/{Random.Shared.Next()}", TestContext.Current.CancellationToken);
204204

205205
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
206206
}
207207

208208
[Fact]
209209
public async Task Leadership_GetOfficers()
210210
{
211-
var officers = await _httpClient.GetFromJsonAsync<IEnumerable<Officer>>("/api/leadership/officers");
211+
var officers = await _httpClient.GetFromJsonAsync<IEnumerable<Officer>>("/api/leadership/officers", TestContext.Current.CancellationToken);
212212

213213
Assert.NotNull(officers);
214214
Assert.Empty(officers);
@@ -217,7 +217,7 @@ public async Task Leadership_GetOfficers()
217217
[Fact]
218218
public async Task Leadership_GetDirectors()
219219
{
220-
var directors = await _httpClient.GetFromJsonAsync<IEnumerable<Director>>("/api/leadership/directors");
220+
var directors = await _httpClient.GetFromJsonAsync<IEnumerable<Director>>("/api/leadership/directors", TestContext.Current.CancellationToken);
221221

222222
Assert.NotNull(directors);
223223
Assert.Empty(directors);
@@ -226,7 +226,7 @@ public async Task Leadership_GetDirectors()
226226
[Fact]
227227
public async Task Photos_GetAlbums()
228228
{
229-
var albums = await _httpClient.GetFromJsonAsync<IEnumerable<Album>>("/api/photos/albums");
229+
var albums = await _httpClient.GetFromJsonAsync<IEnumerable<Album>>("/api/photos/albums", TestContext.Current.CancellationToken);
230230

231231
Assert.NotNull(albums);
232232
Assert.Empty(albums);
@@ -235,7 +235,7 @@ public async Task Photos_GetAlbums()
235235
[Fact]
236236
public async Task Photos_GetAlbumById_404()
237237
{
238-
using var response = await _httpClient.GetAsync($"/api/photos/albums/{Random.Shared.Next()}");
238+
using var response = await _httpClient.GetAsync($"/api/photos/albums/{Random.Shared.Next()}", TestContext.Current.CancellationToken);
239239

240240
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
241241
}
@@ -245,7 +245,7 @@ public async Task Photos_GetPhotoById_InvalidId_400()
245245
{
246246
string notAnObjectId = Random.Shared.Next().ToString();
247247

248-
using var response = await _httpClient.GetAsync($"/api/photos/albums/{Random.Shared.Next()}/photos/{notAnObjectId}");
248+
using var response = await _httpClient.GetAsync($"/api/photos/albums/{Random.Shared.Next()}/photos/{notAnObjectId}", TestContext.Current.CancellationToken);
249249

250250
Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
251251
}
@@ -255,7 +255,7 @@ public async Task Photos_GetPhotoById_UnknownId_404()
255255
{
256256
string objectId = ObjectId.GenerateNewId().ToString();
257257

258-
using var response = await _httpClient.GetAsync($"/api/photos/albums/{Random.Shared.Next()}/photos/{objectId}");
258+
using var response = await _httpClient.GetAsync($"/api/photos/albums/{Random.Shared.Next()}/photos/{objectId}", TestContext.Current.CancellationToken);
259259

260260
Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
261261
}

tests/BHS.Api.IntegrationTests/QueryTests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public async Task SequenceRepository_Increments()
2828
using (var scope = _factory.Services.CreateScope())
2929
{
3030
var repo = scope.ServiceProvider.GetRequiredService<ISequenceRepository>();
31-
initial = await repo.GetNextValue(name);
31+
initial = await repo.GetNextValue(name, TestContext.Current.CancellationToken);
3232
}
3333

3434
Assert.Equal(1, initial);
@@ -39,11 +39,11 @@ public async Task SequenceRepository_Increments()
3939
{
4040
var repo = scope.ServiceProvider.GetRequiredService<ISequenceRepository>();
4141
values = await Task.WhenAll(
42-
repo.GetNextValue(name),
43-
repo.GetNextValue(name),
44-
repo.GetNextValue(name));
42+
repo.GetNextValue(name, TestContext.Current.CancellationToken),
43+
repo.GetNextValue(name, TestContext.Current.CancellationToken),
44+
repo.GetNextValue(name, TestContext.Current.CancellationToken));
4545
}
4646

47-
Assert.Equal(new long[] { 2, 3, 4 }, values.Order());
47+
Assert.Equal([2, 3, 4], values.Order());
4848
}
4949
}

tests/BHS.Api.IntegrationTests/ResourceLifecycleTests.cs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,41 +26,41 @@ public async Task BlogPostLifecycle()
2626

2727
// CREATE
2828
var createRequest = new PostRequest("Hello, world!", "# H1 title\n\nThis is a markdown blog post. What's up? 12345", null, null, null, DateTimeOffset.Now, []);
29-
using var createResponse = await _httpClient.PostAsJsonAsync("/api/blog/posts", createRequest);
30-
var newPost = await createResponse.EnsureSuccessStatusCode().Content.ReadFromJsonAsync<Post>();
29+
using var createResponse = await _httpClient.PostAsJsonAsync("/api/blog/posts", createRequest, TestContext.Current.CancellationToken);
30+
var newPost = await createResponse.EnsureSuccessStatusCode().Content.ReadFromJsonAsync<Post>(TestContext.Current.CancellationToken);
3131

3232
Assert.NotNull(newPost);
3333
slug = newPost.Slug;
3434

3535
// SEARCH
36-
var searchResults = await _httpClient.GetFromJsonAsync<IEnumerable<Post>>("/api/blog/posts?q=12345");
36+
var searchResults = await _httpClient.GetFromJsonAsync<IEnumerable<Post>>("/api/blog/posts?q=12345", TestContext.Current.CancellationToken);
3737

3838
Assert.NotNull(searchResults);
3939
Assert.Contains(slug, searchResults.Select(x => x.Slug));
4040

4141
// UPDATE
4242
var updateRequest = new PostRequest("Hello again!", "# title", null, null, new Author("user1", "A User"), createRequest.DatePublished, [new Category("stories", "Stories")]);
43-
using var updateResponse = await _httpClient.PutAsJsonAsync($"/api/blog/posts/{slug}", updateRequest);
44-
var updatedPost = await updateResponse.EnsureSuccessStatusCode().Content.ReadFromJsonAsync<Post>();
43+
using var updateResponse = await _httpClient.PutAsJsonAsync($"/api/blog/posts/{slug}", updateRequest, TestContext.Current.CancellationToken);
44+
var updatedPost = await updateResponse.EnsureSuccessStatusCode().Content.ReadFromJsonAsync<Post>(TestContext.Current.CancellationToken);
4545

4646
Assert.NotNull(updatedPost);
4747

4848
// GET BY ID
49-
var postById = await _httpClient.GetFromJsonAsync<Post>($"/api/blog/posts/{slug}");
49+
var postById = await _httpClient.GetFromJsonAsync<Post>($"/api/blog/posts/{slug}", TestContext.Current.CancellationToken);
5050

5151
Assert.NotNull(postById);
5252

5353
// DELETE
54-
using var deleteResponse = await _httpClient.DeleteAsync($"/api/blog/posts/{slug}");
54+
using var deleteResponse = await _httpClient.DeleteAsync($"/api/blog/posts/{slug}", TestContext.Current.CancellationToken);
5555
deleteResponse.EnsureSuccessStatusCode();
5656

5757
// GET 404
58-
using var notFoundResponse = await _httpClient.GetAsync($"/api/blog/posts/{slug}");
58+
using var notFoundResponse = await _httpClient.GetAsync($"/api/blog/posts/{slug}", TestContext.Current.CancellationToken);
5959

6060
Assert.Equal(HttpStatusCode.NotFound, notFoundResponse.StatusCode);
6161

6262
// GET ALL
63-
var allPosts = await _httpClient.GetFromJsonAsync<IEnumerable<Post>>("/api/blog/posts");
63+
var allPosts = await _httpClient.GetFromJsonAsync<IEnumerable<Post>>("/api/blog/posts", TestContext.Current.CancellationToken);
6464

6565
Assert.NotNull(allPosts);
6666
Assert.DoesNotContain(slug, allPosts.Select(x => x.Slug));
@@ -70,22 +70,22 @@ public async Task BlogPostLifecycle()
7070
public async Task MuseumScheduleLifecycle()
7171
{
7272
// GET 204
73-
using var initialResponse = await _httpClient.GetAsync("/api/museum/schedule");
73+
using var initialResponse = await _httpClient.GetAsync("/api/museum/schedule", TestContext.Current.CancellationToken);
7474

7575
Assert.Equal(HttpStatusCode.NoContent, initialResponse.StatusCode);
7676

7777
// UPDATE
7878
var schedule = new MuseumSchedule([new MuseumDay(DayOfWeek.Monday, "09:00", "17:00")], new MuseumMonthRange(1, 12));
79-
using var updateResponse = await _httpClient.PutAsJsonAsync("/api/museum/schedule", schedule);
80-
var updatedSchedule = await updateResponse.EnsureSuccessStatusCode().Content.ReadFromJsonAsync<MuseumSchedule>();
79+
using var updateResponse = await _httpClient.PutAsJsonAsync("/api/museum/schedule", schedule, TestContext.Current.CancellationToken);
80+
var updatedSchedule = await updateResponse.EnsureSuccessStatusCode().Content.ReadFromJsonAsync<MuseumSchedule>(TestContext.Current.CancellationToken);
8181

8282
Assert.NotNull(updatedSchedule);
8383
Assert.Equal(schedule.Days.Single(), updatedSchedule.Days.Single());
8484
Assert.Equal(schedule.Months, updatedSchedule.Months);
8585

8686
// GET 200
87-
using var currentResponse = await _httpClient.GetAsync("/api/museum/schedule");
88-
var currentSchedule = await currentResponse.EnsureSuccessStatusCode().Content.ReadFromJsonAsync<MuseumSchedule>();
87+
using var currentResponse = await _httpClient.GetAsync("/api/museum/schedule", TestContext.Current.CancellationToken);
88+
var currentSchedule = await currentResponse.EnsureSuccessStatusCode().Content.ReadFromJsonAsync<MuseumSchedule>(TestContext.Current.CancellationToken);
8989

9090
Assert.NotNull(currentSchedule);
9191
Assert.Equal(updatedSchedule.Days.Single(), currentSchedule.Days.Single());

tests/BHS.Domain.Tests/BHS.Domain.Tests.csproj

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,18 @@
44
<TargetFramework>net8.0</TargetFramework>
55
<Nullable>enable</Nullable>
66
<ImplicitUsings>enable</ImplicitUsings>
7+
<OutputType>Exe</OutputType>
78

89
<IsPackable>false</IsPackable>
910
<Copyright>© 2020-2023 Jason Weinzierl</Copyright>
1011
</PropertyGroup>
1112

1213
<ItemGroup>
14+
<PackageReference Include="Microsoft.Testing.Platform" Version="1.4.3" />
1315
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
1416
<PackageReference Include="NSubstitute" Version="5.1.0" />
15-
<PackageReference Include="xunit" Version="2.9.2" />
16-
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
17+
<PackageReference Include="xunit.v3" Version="1.0.0" />
18+
<PackageReference Include="xunit.runner.visualstudio" Version="3.0.0">
1719
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1820
<PrivateAssets>all</PrivateAssets>
1921
</PackageReference>

0 commit comments

Comments
 (0)