Skip to content

Commit 683af9c

Browse files
Upgrade to xunit v3 (#67)
issue #62 - upgraded to xunit v3 - added cancellation token to tests - increase GetEvents expected average latency
1 parent 0d80a18 commit 683af9c

36 files changed

+280
-292
lines changed

Directory.Packages.props

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<PackageVersion Include="Asp.Versioning.Http" Version="8.1.0" />
77
<PackageVersion Include="Asp.Versioning.Mvc.ApiExplorer" Version="8.1.0" />
88
<PackageVersion Include="Bogus" Version="35.6.3" />
9+
<PackageVersion Include="coverlet.collector" Version="6.0.4" />
910
<PackageVersion Include="FluentValidation" Version="12.0.0" />
1011
<PackageVersion Include="FluentValidation.DependencyInjectionExtensions" Version="12.0.0" />
1112
<PackageVersion Include="MailKit" Version="4.12.0" />
@@ -39,9 +40,8 @@
3940
<PackageVersion Include="System.IdentityModel.Tokens.Jwt" Version="8.9.0" />
4041
<PackageVersion Include="Testcontainers" Version="4.4.0" />
4142
<PackageVersion Include="Testcontainers.PostgreSql" Version="4.4.0" />
42-
<PackageVersion Include="xunit" Version="2.9.3" />
43-
<PackageVersion Include="xunit.extensibility.core" Version="2.9.3" />
4443
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.0" />
45-
<PackageVersion Include="coverlet.collector" Version="6.0.4" />
44+
<PackageVersion Include="xunit.v3" Version="2.0.2" />
45+
<PackageVersion Include="xunit.v3.extensibility.core" Version="2.0.2" />
4646
</ItemGroup>
4747
</Project>

tests/TeamUp.Tests.Architecture/TeamUp.Tests.Architecture.csproj

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,15 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<IsPackable>false</IsPackable>
5-
<IsTestProject>true</IsTestProject>
4+
<OutputType>Exe</OutputType>
65
</PropertyGroup>
76

87
<ItemGroup>
98
<PackageReference Include="Shouldly" />
109
<PackageReference Include="Microsoft.NET.Test.Sdk" />
1110
<PackageReference Include="NetArchTest.Rules" />
12-
<PackageReference Include="xunit" />
13-
<PackageReference Include="xunit.runner.visualstudio">
14-
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
15-
<PrivateAssets>all</PrivateAssets>
16-
</PackageReference>
11+
<PackageReference Include="xunit.v3" />
12+
<PackageReference Include="xunit.runner.visualstudio" />
1713
<PackageReference Include="coverlet.collector">
1814
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1915
<PrivateAssets>all</PrivateAssets>

tests/TeamUp.Tests.Common/Fixtures/AppFixture.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public AppFixture()
3434
Faker.DefaultStrictMode = true;
3535
}
3636

37-
public async Task InitializeAsync()
37+
public async ValueTask InitializeAsync()
3838
{
3939
await _dbContainer.StartAsync();
4040

@@ -57,7 +57,7 @@ public async Task InitializeAsync()
5757
AppFactory = TAppFactory.Create(ConnectionString);
5858
}
5959

60-
public async Task DisposeAsync()
60+
public async ValueTask DisposeAsync()
6161
{
6262
await AppFactory.DisposeAsync();
6363
await _dbContainer.DisposeAsync();

tests/TeamUp.Tests.Common/TeamUp.Tests.Common.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<PackageReference Include="Shouldly" />
88
<PackageReference Include="Testcontainers" />
99
<PackageReference Include="Testcontainers.PostgreSql" />
10-
<PackageReference Include="xunit.extensibility.core" />
10+
<PackageReference Include="xunit.v3.extensibility.core" />
1111
</ItemGroup>
1212

1313
<ItemGroup>

tests/TeamUp.Tests.EndToEnd/EndpointTests/BaseEndpointTests.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ public abstract class BaseEndpointTests(AppFixture app) : IAsyncLifetime
1717
internal SkewDateTimeProvider DateTimeProvider { get; private set; } = null!;
1818
internal DelayedCommitUnitOfWorkOptions DelayedCommitUnitOfWorkOptions { get; private set; } = null!;
1919

20-
public async Task InitializeAsync()
20+
protected static CancellationToken CancellationToken => TestContext.Current.CancellationToken;
21+
22+
public async ValueTask InitializeAsync()
2123
{
2224
await App.ResetDatabaseAsync();
2325

@@ -106,9 +108,10 @@ protected async Task WaitForIntegrationEventsAsync(int millisecondsTimeout = 10_
106108
return (reqA.Result, reqB.Result);
107109
}
108110

109-
public Task DisposeAsync()
111+
public ValueTask DisposeAsync()
110112
{
111113
Client.Dispose();
112-
return Task.CompletedTask;
114+
GC.SuppressFinalize(this);
115+
return ValueTask.CompletedTask;
113116
}
114117
}

tests/TeamUp.Tests.EndToEnd/EndpointTests/Events/EventTests.CreateEvent.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ await UseDbContextAsync(dbContext =>
3535
.Generate();
3636

3737
//act
38-
var response = await Client.PostAsJsonAsync(GetUrl(team.Id), request);
38+
var response = await Client.PostAsJsonAsync(GetUrl(team.Id), request, CancellationToken);
3939

4040
//assert
4141
response.ShouldBe201Created();
@@ -77,7 +77,7 @@ await UseDbContextAsync(dbContext =>
7777
.Generate();
7878

7979
//act
80-
var response = await Client.PostAsJsonAsync(GetUrl(team.Id), request);
80+
var response = await Client.PostAsJsonAsync(GetUrl(team.Id), request, CancellationToken);
8181

8282
//assert
8383
response.ShouldBe403Forbidden();
@@ -114,7 +114,7 @@ await UseDbContextAsync(dbContext =>
114114
.Generate();
115115

116116
//act
117-
var response = await Client.PostAsJsonAsync(GetUrl(team.Id), request);
117+
var response = await Client.PostAsJsonAsync(GetUrl(team.Id), request, CancellationToken);
118118

119119
//assert
120120
response.ShouldBe403Forbidden();
@@ -145,7 +145,7 @@ await UseDbContextAsync(dbContext =>
145145
.Generate();
146146

147147
//act
148-
var response = await Client.PostAsJsonAsync(GetUrl(teamId), request);
148+
var response = await Client.PostAsJsonAsync(GetUrl(teamId), request, CancellationToken);
149149

150150
//assert
151151
response.ShouldBe404NotFound();
@@ -182,7 +182,7 @@ await UseDbContextAsync(dbContext =>
182182
.Generate();
183183

184184
//act
185-
var response = await Client.PostAsJsonAsync(GetUrl(team.Id), request);
185+
var response = await Client.PostAsJsonAsync(GetUrl(team.Id), request, CancellationToken);
186186

187187
//assert
188188
response.ShouldBe404NotFound();
@@ -219,7 +219,7 @@ await UseDbContextAsync(dbContext =>
219219
};
220220

221221
//act
222-
var response = await Client.PostAsJsonAsync(GetUrl(team.Id), request);
222+
var response = await Client.PostAsJsonAsync(GetUrl(team.Id), request, CancellationToken);
223223

224224
//assert
225225
response.ShouldBe400BadRequest();

tests/TeamUp.Tests.EndToEnd/EndpointTests/Events/EventTests.GetEvent.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,13 @@ await UseDbContextAsync(dbContext =>
3434
dbContext.Users.AddRange(members);
3535
dbContext.Teams.Add(team);
3636
dbContext.Events.Add(@event);
37-
return dbContext.SaveChangesAsync();
37+
return dbContext.SaveChangesAsync(CancellationToken);
3838
});
3939

4040
Authenticate(initiatorUser);
4141

4242
//act
43-
var response = await Client.GetAsync(GetUrl(team.Id, @event.Id));
43+
var response = await Client.GetAsync(GetUrl(team.Id, @event.Id), CancellationToken);
4444

4545
//assert
4646
response.ShouldBe200OK();
@@ -69,15 +69,15 @@ await UseDbContextAsync(dbContext =>
6969
dbContext.Users.Add(initiatorUser);
7070
dbContext.Users.AddRange(members);
7171
dbContext.Teams.Add(team);
72-
return dbContext.SaveChangesAsync();
72+
return dbContext.SaveChangesAsync(CancellationToken);
7373
});
7474

7575
Authenticate(initiatorUser);
7676

7777
var eventId = Guid.NewGuid();
7878

7979
//act
80-
var response = await Client.GetAsync(GetUrl(team.Id.Value, eventId));
80+
var response = await Client.GetAsync(GetUrl(team.Id.Value, eventId), CancellationToken);
8181

8282
//assert
8383
response.ShouldBe404NotFound();
@@ -95,7 +95,7 @@ public async Task GetEvent_InUnExistingTeam_Should_ReturnNotFound()
9595
await UseDbContextAsync(dbContext =>
9696
{
9797
dbContext.Users.Add(initiatorUser);
98-
return dbContext.SaveChangesAsync();
98+
return dbContext.SaveChangesAsync(CancellationToken);
9999
});
100100

101101
Authenticate(initiatorUser);
@@ -104,7 +104,7 @@ await UseDbContextAsync(dbContext =>
104104
var eventId = Guid.NewGuid();
105105

106106
//act
107-
var response = await Client.GetAsync(GetUrl(teamId, eventId));
107+
var response = await Client.GetAsync(GetUrl(teamId, eventId), CancellationToken);
108108

109109
//assert
110110
response.ShouldBe404NotFound();
@@ -137,13 +137,13 @@ await UseDbContextAsync(dbContext =>
137137
dbContext.Users.AddRange(members);
138138
dbContext.Teams.Add(team);
139139
dbContext.Events.Add(@event);
140-
return dbContext.SaveChangesAsync();
140+
return dbContext.SaveChangesAsync(CancellationToken);
141141
});
142142

143143
Authenticate(initiatorUser);
144144

145145
//act
146-
var response = await Client.GetAsync(GetUrl(team.Id, @event.Id));
146+
var response = await Client.GetAsync(GetUrl(team.Id, @event.Id), CancellationToken);
147147

148148
//assert
149149
response.ShouldBe403Forbidden();

tests/TeamUp.Tests.EndToEnd/EndpointTests/Events/EventTests.GetEvents.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ await UseDbContextAsync(dbContext =>
3636
dbContext.Users.AddRange(members);
3737
dbContext.Teams.Add(team);
3838
dbContext.Events.AddRange(events);
39-
return dbContext.SaveChangesAsync();
39+
return dbContext.SaveChangesAsync(CancellationToken);
4040
});
4141

4242
Authenticate(initiatorUser);
@@ -47,7 +47,7 @@ await UseDbContextAsync(dbContext =>
4747
.ToList();
4848

4949
//act
50-
var response = await Client.GetAsync(GetUrl(team.Id, null));
50+
var response = await Client.GetAsync(GetUrl(team.Id, null), CancellationToken);
5151

5252
//assert
5353
response.ShouldBe200OK();
@@ -82,15 +82,15 @@ await UseDbContextAsync(dbContext =>
8282
dbContext.Users.AddRange(members);
8383
dbContext.Teams.Add(team);
8484
dbContext.Events.AddRange(events);
85-
return dbContext.SaveChangesAsync();
85+
return dbContext.SaveChangesAsync(CancellationToken);
8686
});
8787

8888
Authenticate(initiatorUser);
8989

9090
var oldestEventDate = events.Select(e => e.FromUtc).Min();
9191

9292
//act
93-
var response = await Client.GetAsync(GetUrl(team.Id, oldestEventDate));
93+
var response = await Client.GetAsync(GetUrl(team.Id, oldestEventDate), CancellationToken);
9494

9595
//assert
9696
response.ShouldBe200OK();
@@ -125,15 +125,15 @@ await UseDbContextAsync(dbContext =>
125125
dbContext.Users.AddRange(members);
126126
dbContext.Teams.Add(team);
127127
dbContext.Events.AddRange(events);
128-
return dbContext.SaveChangesAsync();
128+
return dbContext.SaveChangesAsync(CancellationToken);
129129
});
130130

131131
Authenticate(initiatorUser);
132132

133133
var futureDate = events.Select(e => e.ToUtc).Max().AddHours(1).AsUtc();
134134

135135
//act
136-
var response = await Client.GetAsync(GetUrl(team.Id, futureDate));
136+
var response = await Client.GetAsync(GetUrl(team.Id, futureDate), CancellationToken);
137137

138138
//assert
139139
response.ShouldBe200OK();
@@ -151,15 +151,15 @@ public async Task GetEvents_FromUnExistingTeam_AsOwner_Should_ResultInNotFound()
151151
await UseDbContextAsync(dbContext =>
152152
{
153153
dbContext.Users.Add(initiatorUser);
154-
return dbContext.SaveChangesAsync();
154+
return dbContext.SaveChangesAsync(CancellationToken);
155155
});
156156

157157
Authenticate(initiatorUser);
158158

159159
var teamId = Guid.NewGuid();
160160

161161
//act
162-
var response = await Client.GetAsync(GetUrl(teamId, null));
162+
var response = await Client.GetAsync(GetUrl(teamId, null), CancellationToken);
163163

164164
//assert
165165
response.ShouldBe404NotFound();
@@ -192,13 +192,13 @@ await UseDbContextAsync(dbContext =>
192192
dbContext.Users.AddRange(members);
193193
dbContext.Teams.Add(team);
194194
dbContext.Events.AddRange(events);
195-
return dbContext.SaveChangesAsync();
195+
return dbContext.SaveChangesAsync(CancellationToken);
196196
});
197197

198198
Authenticate(initiatorUser);
199199

200200
//act
201-
var response = await Client.GetAsync(GetUrl(team.Id, null));
201+
var response = await Client.GetAsync(GetUrl(team.Id, null), CancellationToken);
202202

203203
//assert
204204
response.ShouldBe403Forbidden();

tests/TeamUp.Tests.EndToEnd/EndpointTests/Events/EventTests.RemoveEvent.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,15 @@ await UseDbContextAsync(dbContext =>
3232
dbContext.Users.AddRange(members);
3333
dbContext.Teams.Add(team);
3434
dbContext.Events.AddRange(events);
35-
return dbContext.SaveChangesAsync();
35+
return dbContext.SaveChangesAsync(CancellationToken);
3636
});
3737

3838
Authenticate(initiatorUser);
3939

4040
var targetEvent = F.PickRandom(events);
4141

4242
//act
43-
var response = await Client.DeleteAsync(GetUrl(team.Id, targetEvent.Id));
43+
var response = await Client.DeleteAsync(GetUrl(team.Id, targetEvent.Id), CancellationToken);
4444

4545
//assert
4646
response.ShouldBe200OK();
@@ -77,15 +77,15 @@ await UseDbContextAsync(dbContext =>
7777
dbContext.Users.AddRange(members);
7878
dbContext.Teams.Add(team);
7979
dbContext.Events.AddRange(events);
80-
return dbContext.SaveChangesAsync();
80+
return dbContext.SaveChangesAsync(CancellationToken);
8181
});
8282

8383
Authenticate(initiatorUser);
8484

8585
var targetEvent = F.PickRandom(events);
8686

8787
//act
88-
var response = await Client.DeleteAsync(GetUrl(team.Id, targetEvent.Id));
88+
var response = await Client.DeleteAsync(GetUrl(team.Id, targetEvent.Id), CancellationToken);
8989

9090
//assert
9191
response.ShouldBe403Forbidden();
@@ -116,15 +116,15 @@ await UseDbContextAsync(dbContext =>
116116
dbContext.Users.AddRange(members);
117117
dbContext.Teams.Add(team);
118118
dbContext.Events.AddRange(events);
119-
return dbContext.SaveChangesAsync();
119+
return dbContext.SaveChangesAsync(CancellationToken);
120120
});
121121

122122
Authenticate(initiatorUser);
123123

124124
var targetEventId = EventId.New();
125125

126126
//act
127-
var response = await Client.DeleteAsync(GetUrl(team.Id, targetEventId));
127+
var response = await Client.DeleteAsync(GetUrl(team.Id, targetEventId), CancellationToken);
128128

129129
//assert
130130
response.ShouldBe404NotFound();
@@ -142,7 +142,7 @@ public async Task RemoveEvent_FromUnExistingTeam_Should_ResultInNotFound()
142142
await UseDbContextAsync(dbContext =>
143143
{
144144
dbContext.Users.Add(initiatorUser);
145-
return dbContext.SaveChangesAsync();
145+
return dbContext.SaveChangesAsync(CancellationToken);
146146
});
147147

148148
Authenticate(initiatorUser);
@@ -151,7 +151,7 @@ await UseDbContextAsync(dbContext =>
151151
var targetEventId = EventId.New();
152152

153153
//act
154-
var response = await Client.DeleteAsync(GetUrl(targetTeamId, targetEventId));
154+
var response = await Client.DeleteAsync(GetUrl(targetTeamId, targetEventId), CancellationToken);
155155

156156
//assert
157157
response.ShouldBe404NotFound();
@@ -194,7 +194,7 @@ await UseDbContextAsync(dbContext =>
194194
dbContext.Teams.AddRange([team1, team2]);
195195
dbContext.Events.AddRange(team1Events);
196196
dbContext.Events.AddRange(team2Events);
197-
return dbContext.SaveChangesAsync();
197+
return dbContext.SaveChangesAsync(CancellationToken);
198198
});
199199

200200
Authenticate(initiatorUser);
@@ -203,7 +203,7 @@ await UseDbContextAsync(dbContext =>
203203
var targetEvent = F.PickRandom(team2Events);
204204

205205
//act
206-
var response = await Client.DeleteAsync(GetUrl(targetTeamId, targetEvent.Id));
206+
var response = await Client.DeleteAsync(GetUrl(targetTeamId, targetEvent.Id), CancellationToken);
207207

208208
//assert
209209
response.ShouldBe404NotFound();

0 commit comments

Comments
 (0)