Skip to content

Commit 2e3fd14

Browse files
committed
refactor: Migrate bUnit from v1 to v2
1 parent 4107baa commit 2e3fd14

File tree

51 files changed

+285
-285
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+285
-285
lines changed

tests/Directory.Build.props

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
</PropertyGroup>
77

88
<ItemGroup>
9-
<PackageReference Include="bunit.generators" Version="1.27.11-preview" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
10-
<PackageReference Include="bunit" Version="1.26.64" />
9+
<PackageReference Include="bunit.generators" Version="2.0.22-preview" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
10+
<PackageReference Include="bunit" Version="2.0.22-preview" />
1111
<PackageReference Include="FluentAssertions" Version="6.12.0" />
1212
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
1313
<PackageReference Include="NSubstitute" Version="5.1.0" />

tests/LinkDotNet.Blog.IntegrationTests/Web/Features/AboutMe/Components/TalksTests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace LinkDotNet.Blog.IntegrationTests.Web.Features.AboutMe.Components;
1010

1111
public sealed class TalksTests : SqlDatabaseTestBase<Talk>, IDisposable
1212
{
13-
private readonly TestContext ctx = new();
13+
private readonly BunitContext ctx = new();
1414

1515
public TalksTests()
1616
{
@@ -20,7 +20,7 @@ public TalksTests()
2020
[Fact]
2121
public void WhenAddingTalkThenDisplayedToUser()
2222
{
23-
var cut = ctx.RenderComponent<Talks>(
23+
var cut = ctx.Render<Talks>(
2424
p => p.Add(s => s.ShowAdminActions, true));
2525
cut.Find("#add-talk").Click();
2626
cut.Find("#talk-title").Change("title");
@@ -42,7 +42,7 @@ public async Task LoadEarlierSavedTalks()
4242
await Repository.StoreAsync(new TalkBuilder().Build());
4343
await Repository.StoreAsync(new TalkBuilder().Build());
4444

45-
var cut = ctx.RenderComponent<Talks>();
45+
var cut = ctx.Render<Talks>();
4646

4747
cut.WaitForComponents<TalkEntry>().Count.Should().Be(2);
4848
}
@@ -51,7 +51,7 @@ public async Task LoadEarlierSavedTalks()
5151
public async Task WhenUserClickDeleteButtonThenDeleted()
5252
{
5353
await Repository.StoreAsync(new TalkBuilder().Build());
54-
var cut = ctx.RenderComponent<Talks>(
54+
var cut = ctx.Render<Talks>(
5555
p => p.Add(s => s.ShowAdminActions, true));
5656

5757
cut.WaitForComponent<TalkEntry>().Find("#talk-delete").Click();
@@ -67,7 +67,7 @@ public async Task TalksAreOrderFromNewestToLatest()
6767
await Repository.StoreAsync(new TalkBuilder().WithPublishedDate(new DateTime(2021, 1, 1)).Build());
6868
await Repository.StoreAsync(new TalkBuilder().WithPublishedDate(new DateTime(2022, 1, 1)).Build());
6969

70-
var cut = ctx.RenderComponent<Talks>(
70+
var cut = ctx.Render<Talks>(
7171
p => p.Add(s => s.ShowAdminActions, true));
7272

7373
var talks = cut.WaitForComponents<TalkEntry>();

tests/LinkDotNet.Blog.IntegrationTests/Web/Features/Admin/BlogPostEditor/CreateNewBlogPostPageTests.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@ public class CreateNewBlogPostPageTests : SqlDatabaseTestBase<BlogPost>
1515
[Fact]
1616
public async Task ShouldSaveBlogPostOnSave()
1717
{
18-
using var ctx = new TestContext();
18+
using var ctx = new BunitContext();
1919
var toastService = Substitute.For<IToastService>();
2020
ctx.JSInterop.SetupVoid("hljs.highlightAll");
21-
ctx.AddTestAuthorization().SetAuthorized("some username");
21+
ctx.AddAuthorization().SetAuthorized("some username");
2222
ctx.Services.AddScoped(_ => Repository);
2323
ctx.Services.AddScoped(_ => toastService);
2424
ctx.ComponentFactories.AddStub<UploadFile>();
2525
ctx.Services.AddScoped(_ => Substitute.For<IFileProcessor>());
26-
using var cut = ctx.RenderComponent<CreateBlogPost>();
26+
using var cut = ctx.Render<CreateBlogPost>();
2727
var newBlogPost = cut.FindComponent<CreateNewBlogPost>();
2828

2929
TriggerNewBlogPost(newBlogPost);
@@ -37,22 +37,22 @@ public async Task ShouldSaveBlogPostOnSave()
3737
[Fact]
3838
public async Task ShouldSetContentFromFile()
3939
{
40-
using var ctx = new TestContext();
40+
using var ctx = new BunitContext();
4141
const string contentFromFile = "content";
4242
ctx.JSInterop.SetupVoid("hljs.highlightAll");
43-
ctx.AddTestAuthorization().SetAuthorized("some username");
43+
ctx.AddAuthorization().SetAuthorized("some username");
4444
ctx.Services.AddScoped(_ => Repository);
4545
ctx.Services.AddScoped(_ => Substitute.For<IToastService>());
4646
var args = SetupUploadFile(contentFromFile, ctx);
47-
var cut = ctx.RenderComponent<CreateNewBlogPost>();
47+
var cut = ctx.Render<CreateNewBlogPost>();
4848
var uploadFile = cut.FindComponent<UploadFile>();
4949

5050
await uploadFile.InvokeAsync(() => cut.FindComponent<InputFile>().Instance.OnChange.InvokeAsync(args));
5151

5252
cut.Find("#content").TextContent.Should().Be(contentFromFile);
5353
}
5454

55-
private static void TriggerNewBlogPost(IRenderedComponent<CreateNewBlogPost> cut)
55+
private static void TriggerNewBlogPost(RenderedComponent<CreateNewBlogPost> cut)
5656
{
5757
cut.Find("#title").Input("My Title");
5858
cut.Find("#short").Input("My short Description");
@@ -64,7 +64,7 @@ private static void TriggerNewBlogPost(IRenderedComponent<CreateNewBlogPost> cut
6464
cut.Find("form").Submit();
6565
}
6666

67-
private static InputFileChangeEventArgs SetupUploadFile(string contentFromFile, TestContext ctx)
67+
private static InputFileChangeEventArgs SetupUploadFile(string contentFromFile, BunitContext ctx)
6868
{
6969
var file = Substitute.For<IBrowserFile>();
7070
var fileProcessor = Substitute.For<IFileProcessor>();

tests/LinkDotNet.Blog.IntegrationTests/Web/Features/Admin/BlogPostEditor/UpdateBlogPostPageTests.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,16 @@ public class UpdateBlogPostPageTests : SqlDatabaseTestBase<BlogPost>
1515
[Fact]
1616
public async Task ShouldSaveBlogPostOnSave()
1717
{
18-
using var ctx = new TestContext();
18+
using var ctx = new BunitContext();
1919
ctx.JSInterop.SetupVoid("hljs.highlightAll");
2020
var toastService = Substitute.For<IToastService>();
2121
var blogPost = new BlogPostBuilder().WithTitle("Title").WithShortDescription("Sub").Build();
2222
await Repository.StoreAsync(blogPost);
23-
ctx.AddTestAuthorization().SetAuthorized("some username");
23+
ctx.AddAuthorization().SetAuthorized("some username");
2424
ctx.Services.AddScoped(_ => Repository);
2525
ctx.Services.AddScoped(_ => toastService);
2626
ctx.ComponentFactories.AddStub<UploadFile>();
27-
using var cut = ctx.RenderComponent<UpdateBlogPostPage>(
27+
using var cut = ctx.Render<UpdateBlogPostPage>(
2828
p => p.Add(s => s.BlogPostId, blogPost.Id));
2929
var newBlogPost = cut.FindComponent<CreateNewBlogPost>();
3030

@@ -39,18 +39,18 @@ public async Task ShouldSaveBlogPostOnSave()
3939
[Fact]
4040
public void ShouldThrowWhenNoIdProvided()
4141
{
42-
using var ctx = new TestContext();
43-
ctx.AddTestAuthorization().SetAuthorized("some username");
42+
using var ctx = new BunitContext();
43+
ctx.AddAuthorization().SetAuthorized("some username");
4444
ctx.Services.AddScoped(_ => Repository);
4545
ctx.Services.AddScoped(_ => Substitute.For<IToastService>());
4646

47-
Action act = () => ctx.RenderComponent<UpdateBlogPostPage>(
47+
Action act = () => ctx.Render<UpdateBlogPostPage>(
4848
p => p.Add(s => s.BlogPostId, null));
4949

5050
act.Should().ThrowExactly<ArgumentNullException>();
5151
}
5252

53-
private static void TriggerUpdate(IRenderedFragment cut)
53+
private static void TriggerUpdate(RenderedFragment cut)
5454
{
5555
cut.Find("#short").Input("My new Description");
5656

tests/LinkDotNet.Blog.IntegrationTests/Web/Features/Admin/Dashboard/Components/VisitCountPerPageTests.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ public async Task ShouldShowCounts()
1919
{
2020
var blogPost = new BlogPostBuilder().WithTitle("I was clicked").WithLikes(2).Build();
2121
await Repository.StoreAsync(blogPost);
22-
using var ctx = new TestContext();
22+
using var ctx = new BunitContext();
2323
RegisterRepositories(ctx);
2424
await SaveBlogPostArticleClicked(blogPost.Id, 10);
2525

26-
var cut = ctx.RenderComponent<VisitCountPerPage>();
26+
var cut = ctx.Render<VisitCountPerPage>();
2727

2828
var elements = cut.WaitForElements("td");
2929
elements.Count.Should().Be(3);
@@ -52,10 +52,10 @@ public async Task ShouldFilterByDate()
5252
{ BlogPostId = blogPost1.Id, DateClicked = new DateOnly(2021, 1, 1), Clicks = 1 };
5353
await DbContext.BlogPostRecords.AddRangeAsync(clicked1, clicked2, clicked3, clicked4);
5454
await DbContext.SaveChangesAsync();
55-
using var ctx = new TestContext();
55+
using var ctx = new BunitContext();
5656
ctx.ComponentFactories.AddStub<DateRangeSelector>();
5757
RegisterRepositories(ctx);
58-
var cut = ctx.RenderComponent<VisitCountPerPage>();
58+
var cut = ctx.Render<VisitCountPerPage>();
5959
var filter = new Filter { StartDate = new DateOnly(2019, 1, 1), EndDate = new DateOnly(2020, 12, 31) };
6060

6161
await cut.InvokeAsync(() => cut.FindComponent<DateRangeSelectorStub>().Instance.FilterChanged.InvokeAsync(filter));
@@ -84,16 +84,16 @@ public async Task ShouldShowTotalClickCount()
8484
{ BlogPostId = blogPost2.Id, DateClicked = DateOnly.MinValue, Clicks = 1 };
8585
await DbContext.BlogPostRecords.AddRangeAsync(clicked1, clicked2, clicked3);
8686
await DbContext.SaveChangesAsync();
87-
using var ctx = new TestContext();
87+
using var ctx = new BunitContext();
8888
RegisterRepositories(ctx);
8989

90-
var cut = ctx.RenderComponent<VisitCountPerPage>();
90+
var cut = ctx.Render<VisitCountPerPage>();
9191

9292
cut.WaitForElement("td");
9393
cut.Find("#total-clicks").TextContent.Should().Be("4 clicks in total");
9494
}
9595

96-
private void RegisterRepositories(TestContextBase ctx)
96+
private void RegisterRepositories(BunitContext ctx)
9797
{
9898
ctx.Services.AddScoped<IRepository<BlogPost>>(_ => new Repository<BlogPost>(DbContextFactory, Substitute.For<ILogger<Repository<BlogPost>>>()));
9999
ctx.Services.AddScoped<IRepository<BlogPostRecord>>(_ => new Repository<BlogPostRecord>(DbContextFactory, Substitute.For<ILogger<Repository<BlogPostRecord>>>()));

tests/LinkDotNet.Blog.IntegrationTests/Web/Features/Admin/DraftBlogPost/DraftBlogPostPageTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ public async Task ShouldOnlyShowPublishedPosts()
1717
var unpublishedPost = new BlogPostBuilder().WithTitle("Not published").IsPublished(false).Build();
1818
await Repository.StoreAsync(publishedPost);
1919
await Repository.StoreAsync(unpublishedPost);
20-
using var ctx = new TestContext();
20+
using var ctx = new BunitContext();
2121
ctx.JSInterop.Mode = JSRuntimeMode.Loose;
2222
ctx.Services.AddScoped(_ => Repository);
23-
var cut = ctx.RenderComponent<DraftBlogPostPage>();
23+
var cut = ctx.Render<DraftBlogPostPage>();
2424
cut.WaitForElement(".blog-card");
2525

2626
var blogPosts = cut.FindComponents<ShortBlogPost>();

tests/LinkDotNet.Blog.IntegrationTests/Web/Features/Archive/ArchivePageTests.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@ public class ArchivePageTests : SqlDatabaseTestBase<BlogPost>
1818
[Fact]
1919
public async Task ShouldDisplayAllBlogPosts()
2020
{
21-
using var ctx = new TestContext();
21+
using var ctx = new BunitContext();
2222
ctx.Services.AddScoped(_ => Repository);
2323
await Repository.StoreAsync(CreateBlogPost(new DateTime(2021, 1, 1), "Blog Post 1"));
2424
await Repository.StoreAsync(CreateBlogPost(new DateTime(2021, 2, 1), "Blog Post 2"));
2525
await Repository.StoreAsync(CreateBlogPost(new DateTime(2022, 1, 1), "Blog Post 3"));
2626

27-
var cut = ctx.RenderComponent<ArchivePage>();
27+
var cut = ctx.Render<ArchivePage>();
2828

2929
cut.WaitForElements("h2");
3030
var yearHeader = cut.FindAll("h2");
@@ -41,14 +41,14 @@ public async Task ShouldDisplayAllBlogPosts()
4141
[Fact]
4242
public async Task ShouldOnlyShowPublishedBlogPosts()
4343
{
44-
using var ctx = new TestContext();
44+
using var ctx = new BunitContext();
4545
ctx.Services.AddScoped(_ => Repository);
4646
var publishedBlogPost = new BlogPostBuilder().WithUpdatedDate(new DateTime(2022, 1, 1)).IsPublished().Build();
4747
var unPublishedBlogPost = new BlogPostBuilder().WithUpdatedDate(new DateTime(2022, 1, 1)).IsPublished(false).Build();
4848
await Repository.StoreAsync(publishedBlogPost);
4949
await Repository.StoreAsync(unPublishedBlogPost);
5050

51-
var cut = ctx.RenderComponent<ArchivePage>();
51+
var cut = ctx.Render<ArchivePage>();
5252

5353
cut.WaitForElements("h2");
5454
cut.FindAll("h2").Should().HaveCount(1);
@@ -57,12 +57,12 @@ public async Task ShouldOnlyShowPublishedBlogPosts()
5757
[Fact]
5858
public async Task ShouldShowTotalAmountOfBlogPosts()
5959
{
60-
using var ctx = new TestContext();
60+
using var ctx = new BunitContext();
6161
ctx.Services.AddScoped(_ => Repository);
6262
await Repository.StoreAsync(CreateBlogPost(new DateTime(2021, 1, 1), "Blog Post 1"));
6363
await Repository.StoreAsync(CreateBlogPost(new DateTime(2021, 2, 1), "Blog Post 2"));
6464

65-
var cut = ctx.RenderComponent<ArchivePage>();
65+
var cut = ctx.Render<ArchivePage>();
6666

6767
cut.WaitForElements("h2");
6868
cut.Find("h3").TextContent.Should().Be("Archive (2 posts)");
@@ -71,21 +71,21 @@ public async Task ShouldShowTotalAmountOfBlogPosts()
7171
[Fact]
7272
public void ShouldShowLoading()
7373
{
74-
using var ctx = new TestContext();
74+
using var ctx = new BunitContext();
7575
ctx.Services.AddScoped<IRepository<BlogPost>>(_ => new SlowRepository());
7676

77-
var cut = ctx.RenderComponent<ArchivePage>();
77+
var cut = ctx.Render<ArchivePage>();
7878

7979
cut.FindComponents<Loading>().Count.Should().Be(1);
8080
}
8181

8282
[Fact]
8383
public void ShouldSetOgData()
8484
{
85-
using var ctx = new TestContext();
85+
using var ctx = new BunitContext();
8686
ctx.Services.AddScoped(_ => Repository);
8787

88-
var cut = ctx.RenderComponent<ArchivePage>();
88+
var cut = ctx.Render<ArchivePage>();
8989

9090
var ogData = cut.FindComponent<OgData>().Instance;
9191
ogData.Title.Should().Contain("Archive");

tests/LinkDotNet.Blog.IntegrationTests/Web/Features/Home/IndexTests.cs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ public async Task ShouldShowAllBlogPostsWithLatestOneFirst()
2020
var newestBlogPost = new BlogPostBuilder().WithTitle("New").Build();
2121
await Repository.StoreAsync(oldestBlogPost);
2222
await Repository.StoreAsync(newestBlogPost);
23-
using var ctx = new TestContext();
23+
using var ctx = new BunitContext();
2424
ctx.JSInterop.Mode = JSRuntimeMode.Loose;
2525
RegisterComponents(ctx);
26-
var cut = ctx.RenderComponent<Index>();
26+
var cut = ctx.Render<Index>();
2727
cut.WaitForElement(".blog-card");
2828

2929
var blogPosts = cut.FindComponents<ShortBlogPost>();
@@ -40,10 +40,10 @@ public async Task ShouldOnlyShowPublishedPosts()
4040
var unpublishedPost = new BlogPostBuilder().WithTitle("Not published").IsPublished(false).Build();
4141
await Repository.StoreAsync(publishedPost);
4242
await Repository.StoreAsync(unpublishedPost);
43-
using var ctx = new TestContext();
43+
using var ctx = new BunitContext();
4444
ctx.JSInterop.Mode = JSRuntimeMode.Loose;
4545
RegisterComponents(ctx);
46-
var cut = ctx.RenderComponent<Index>();
46+
var cut = ctx.Render<Index>();
4747
cut.WaitForElement(".blog-card");
4848

4949
var blogPosts = cut.FindComponents<ShortBlogPost>();
@@ -56,10 +56,10 @@ public async Task ShouldOnlyShowPublishedPosts()
5656
public async Task ShouldOnlyLoadTenEntities()
5757
{
5858
await CreatePublishedBlogPosts(11);
59-
using var ctx = new TestContext();
59+
using var ctx = new BunitContext();
6060
ctx.JSInterop.Mode = JSRuntimeMode.Loose;
6161
RegisterComponents(ctx);
62-
var cut = ctx.RenderComponent<Index>();
62+
var cut = ctx.Render<Index>();
6363
cut.WaitForElement(".blog-card");
6464

6565
var blogPosts = cut.FindComponents<ShortBlogPost>();
@@ -71,11 +71,11 @@ public async Task ShouldOnlyLoadTenEntities()
7171
public async Task ShouldLoadOnlyItemsInPage()
7272
{
7373
await CreatePublishedBlogPosts(11);
74-
using var ctx = new TestContext();
74+
using var ctx = new BunitContext();
7575
ctx.JSInterop.Mode = JSRuntimeMode.Loose;
7676
RegisterComponents(ctx);
7777

78-
var cut = ctx.RenderComponent<Index>(
78+
var cut = ctx.Render<Index>(
7979
p => p.Add(s => s.Page, 2));
8080

8181
cut.WaitForElement(".blog-card");
@@ -92,10 +92,10 @@ public async Task ShouldLoadTags()
9292
.WithTags("C Sharp", "Tag2")
9393
.Build();
9494
await Repository.StoreAsync(publishedPost);
95-
using var ctx = new TestContext();
95+
using var ctx = new BunitContext();
9696
ctx.JSInterop.Mode = JSRuntimeMode.Loose;
9797
RegisterComponents(ctx);
98-
var cut = ctx.RenderComponent<Index>();
98+
var cut = ctx.Render<Index>();
9999
cut.WaitForElement(".blog-card");
100100

101101
var tags = cut.FindComponent<ShortBlogPost>().FindAll(".goto-tag");
@@ -112,10 +112,10 @@ public async Task ShouldLoadTags()
112112
[InlineData("http://localhost/relative/url", "http://localhost/relative/url")]
113113
public void ShouldSetAbsoluteUriForOgData(string givenUri, string expectedUri)
114114
{
115-
using var ctx = new TestContext();
115+
using var ctx = new BunitContext();
116116
RegisterComponents(ctx, givenUri);
117117

118-
var cut = ctx.RenderComponent<Index>();
118+
var cut = ctx.Render<Index>();
119119

120120
cut.WaitForComponent<OgData>().Instance.AbsolutePreviewImageUrl.Should().Be(expectedUri);
121121
}
@@ -127,11 +127,11 @@ public void ShouldSetAbsoluteUriForOgData(string givenUri, string expectedUri)
127127
public async Task ShouldSetPageToFirstIfOutOfRange(int? page)
128128
{
129129
await CreatePublishedBlogPosts(11);
130-
using var ctx = new TestContext();
130+
using var ctx = new BunitContext();
131131
ctx.JSInterop.Mode = JSRuntimeMode.Loose;
132132
RegisterComponents(ctx);
133133

134-
var cut = ctx.RenderComponent<Index>(p => p.Add(
134+
var cut = ctx.Render<Index>(p => p.Add(
135135
i => i.Page, page));
136136

137137
cut.WaitForElement(".blog-card");
@@ -162,7 +162,7 @@ private async Task CreatePublishedBlogPosts(int amount)
162162
}
163163
}
164164

165-
private void RegisterComponents(TestContextBase ctx, string profilePictureUri = null)
165+
private void RegisterComponents(BunitContext ctx, string profilePictureUri = null)
166166
{
167167
ctx.Services.AddScoped(_ => Repository);
168168
ctx.Services.AddScoped(_ => Options.Create(CreateSampleAppConfiguration(profilePictureUri).ApplicationConfiguration));

0 commit comments

Comments
 (0)