1
0
mirror of https://github.com/bitwarden/server synced 2025-12-15 15:53:59 +00:00

XUnit.v3 Upgrade

This commit is contained in:
Justin Baur
2025-11-18 16:12:52 -05:00
parent 2b926ef1c5
commit 76b463cc99
97 changed files with 379 additions and 449 deletions

View File

@@ -80,7 +80,7 @@
{
matchPackageNames: [
"AutoFixture.AutoNSubstitute",
"AutoFixture.Xunit2",
"AutoFixture.Xunit3",
"BenchmarkDotNet",
"BitPay.Light",
"Braintree",
@@ -98,8 +98,7 @@
"Stripe.net",
"Swashbuckle.AspNetCore",
"Swashbuckle.AspNetCore.SwaggerGen",
"xunit",
"xunit.runner.visualstudio",
"xunit.v3",
],
description: "Billing owned dependencies",
commitMessagePrefix: "[deps] Billing:",

View File

@@ -11,23 +11,29 @@
<Nullable Condition="'$(Nullable)' == '' and '$(IsTestProject)' == 'true'">annotations</Nullable>
<Nullable Condition="'$(Nullable)' == '' and '$(IsTestProject)' != 'true'">enable</Nullable>
<TreatWarningsAsErrors Condition="'$(TreatWarningsAsErrors)' == ''">true</TreatWarningsAsErrors>
<WarningsNotAsErrors>$(WarningsNotAsErrors);xUnit1051</WarningsNotAsErrors>
</PropertyGroup>
<PropertyGroup Condition="'$(IsTestProject)' == 'true'">
<OutputType>Exe</OutputType>
<UseMicrosoftTestingPlatformRunner>true</UseMicrosoftTestingPlatformRunner>
<TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>
</PropertyGroup>
<PropertyGroup>
<MicrosoftNetTestSdkVersion>17.8.0</MicrosoftNetTestSdkVersion>
<XUnitVersion>2.6.6</XUnitVersion>
<XUnitRunnerVisualStudioVersion>2.5.6</XUnitRunnerVisualStudioVersion>
<XUnitv3Version>3.0.1</XUnitv3Version>
<XUnitRunnerVisualStudioVersion>3.1.4</XUnitRunnerVisualStudioVersion>
<CoverletCollectorVersion>6.0.0</CoverletCollectorVersion>
<NSubstituteVersion>5.1.0</NSubstituteVersion>
<AutoFixtureXUnit2Version>4.18.1</AutoFixtureXUnit2Version>
<AutoFixtureXUnit3Version>4.19.0</AutoFixtureXUnit3Version>
<AutoFixtureAutoNSubstituteVersion>4.18.1</AutoFixtureAutoNSubstituteVersion>
</PropertyGroup>
</Project>
</Project>

View File

@@ -1,6 +1,6 @@
using System.Reflection;
using AutoFixture;
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Core.AdminConsole.Enums.Provider;
namespace Bit.Commercial.Core.Test.AdminConsole.AutoFixture;

View File

@@ -5,12 +5,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNetTestSdkVersion)" />
<PackageReference Include="xunit" Version="$(XUnitVersion)" />
<PackageReference Include="xunit.runner.visualstudio" Version="$(XUnitRunnerVisualStudioVersion)">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="xunit.v3" Version="$(XUnitv3Version)" />
<PackageReference Include="coverlet.collector" Version="$(CoverletCollectorVersion)">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>

View File

@@ -75,11 +75,11 @@ public class ProjectServiceAccountsAccessPoliciesUpdatesQueryTests
Assert.Equal(data.ProjectId, result.ProjectId);
Assert.Equal(data.OrganizationId, result.OrganizationId);
Assert.Single(result.ServiceAccountAccessPolicyUpdates.Where(x =>
x.Operation == AccessPolicyOperation.Delete && x.AccessPolicy == currentPolicyToDelete));
Assert.Single(result.ServiceAccountAccessPolicyUpdates.Where(x =>
Assert.Single(result.ServiceAccountAccessPolicyUpdates, x =>
x.Operation == AccessPolicyOperation.Delete && x.AccessPolicy == currentPolicyToDelete);
Assert.Single(result.ServiceAccountAccessPolicyUpdates, x =>
x.Operation == AccessPolicyOperation.Update &&
x.AccessPolicy.GrantedProjectId == updatePolicy.GrantedProjectId));
x.AccessPolicy.GrantedProjectId == updatePolicy.GrantedProjectId);
Assert.Equal(result.ServiceAccountAccessPolicyUpdates.Count() - 2,
result.ServiceAccountAccessPolicyUpdates.Count(x => x.Operation == AccessPolicyOperation.Create));
}

View File

@@ -88,27 +88,27 @@ public class SecretAccessPoliciesUpdatesQueryTests
Assert.Equal(data.SecretId, result.SecretId);
Assert.Equal(data.OrganizationId, result.OrganizationId);
Assert.Single(result.UserAccessPolicyUpdates.Where(x =>
x.Operation == AccessPolicyOperation.Delete && x.AccessPolicy == userPolicyChanges.Delete));
Assert.Single(result.UserAccessPolicyUpdates.Where(x =>
Assert.Single(result.UserAccessPolicyUpdates, x =>
x.Operation == AccessPolicyOperation.Delete && x.AccessPolicy == userPolicyChanges.Delete);
Assert.Single(result.UserAccessPolicyUpdates, x =>
x.Operation == AccessPolicyOperation.Update &&
x.AccessPolicy.OrganizationUserId == userPolicyChanges.Update.OrganizationUserId));
x.AccessPolicy.OrganizationUserId == userPolicyChanges.Update.OrganizationUserId);
Assert.Equal(result.UserAccessPolicyUpdates.Count() - 2,
result.UserAccessPolicyUpdates.Count(x => x.Operation == AccessPolicyOperation.Create));
Assert.Single(result.GroupAccessPolicyUpdates.Where(x =>
x.Operation == AccessPolicyOperation.Delete && x.AccessPolicy == groupPolicyChanges.Delete));
Assert.Single(result.GroupAccessPolicyUpdates.Where(x =>
Assert.Single(result.GroupAccessPolicyUpdates, x =>
x.Operation == AccessPolicyOperation.Delete && x.AccessPolicy == groupPolicyChanges.Delete);
Assert.Single(result.GroupAccessPolicyUpdates, x =>
x.Operation == AccessPolicyOperation.Update &&
x.AccessPolicy.GroupId == groupPolicyChanges.Update.GroupId));
x.AccessPolicy.GroupId == groupPolicyChanges.Update.GroupId);
Assert.Equal(result.GroupAccessPolicyUpdates.Count() - 2,
result.GroupAccessPolicyUpdates.Count(x => x.Operation == AccessPolicyOperation.Create));
Assert.Single(result.ServiceAccountAccessPolicyUpdates.Where(x =>
x.Operation == AccessPolicyOperation.Delete && x.AccessPolicy == serviceAccountPolicyChanges.Delete));
Assert.Single(result.ServiceAccountAccessPolicyUpdates.Where(x =>
Assert.Single(result.ServiceAccountAccessPolicyUpdates, x =>
x.Operation == AccessPolicyOperation.Delete && x.AccessPolicy == serviceAccountPolicyChanges.Delete);
Assert.Single(result.ServiceAccountAccessPolicyUpdates, x =>
x.Operation == AccessPolicyOperation.Update &&
x.AccessPolicy.ServiceAccountId == serviceAccountPolicyChanges.Update.ServiceAccountId));
x.AccessPolicy.ServiceAccountId == serviceAccountPolicyChanges.Update.ServiceAccountId);
Assert.Equal(result.ServiceAccountAccessPolicyUpdates.Count() - 2,
result.ServiceAccountAccessPolicyUpdates.Count(x => x.Operation == AccessPolicyOperation.Create));
}

View File

@@ -75,11 +75,11 @@ public class ServiceAccountGrantedPolicyUpdatesQueryTests
Assert.Equal(data.ServiceAccountId, result.ServiceAccountId);
Assert.Equal(data.OrganizationId, result.OrganizationId);
Assert.Single(result.ProjectGrantedPolicyUpdates.Where(x =>
x.Operation == AccessPolicyOperation.Delete && x.AccessPolicy == currentPolicyToDelete));
Assert.Single(result.ProjectGrantedPolicyUpdates.Where(x =>
Assert.Single(result.ProjectGrantedPolicyUpdates, x =>
x.Operation == AccessPolicyOperation.Delete && x.AccessPolicy == currentPolicyToDelete);
Assert.Single(result.ProjectGrantedPolicyUpdates, x =>
x.Operation == AccessPolicyOperation.Update &&
x.AccessPolicy.GrantedProjectId == updatePolicy.GrantedProjectId));
x.AccessPolicy.GrantedProjectId == updatePolicy.GrantedProjectId);
Assert.Equal(result.ProjectGrantedPolicyUpdates.Count() - 2,
result.ProjectGrantedPolicyUpdates.Count(x => x.Operation == AccessPolicyOperation.Create));
}

View File

@@ -23,7 +23,6 @@ using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.DependencyInjection;
using NSubstitute;
using Xunit.Abstractions;
using AuthenticationOptions = Duende.IdentityServer.Configuration.AuthenticationOptions;
namespace Bit.SSO.Test.Controllers;

View File

@@ -10,12 +10,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNetTestSdkVersion)" />
<PackageReference Include="xunit" Version="$(XUnitVersion)" />
<PackageReference Include="xunit.runner.visualstudio" Version="$(XUnitRunnerVisualStudioVersion)">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="xunit.v3" Version="$(XUnitv3Version)" />
<PackageReference Include="coverlet.collector" Version="$(CoverletCollectorVersion)">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>

View File

@@ -16,15 +16,15 @@ public class GroupsControllerPatchTests : IClassFixture<ScimApplicationFactory>,
_factory = factory;
}
public Task InitializeAsync()
public ValueTask InitializeAsync()
{
var databaseContext = _factory.GetDatabaseContext();
_factory.ReinitializeDbForTests(databaseContext);
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
Task IAsyncLifetime.DisposeAsync() => Task.CompletedTask;
ValueTask IAsyncDisposable.DisposeAsync() => ValueTask.CompletedTask;
[Fact]
public async Task Patch_ReplaceDisplayName_Success()

View File

@@ -16,14 +16,14 @@ public class GroupsControllerTests : IClassFixture<ScimApplicationFactory>, IAsy
_factory = factory;
}
public Task InitializeAsync()
public ValueTask InitializeAsync()
{
var databaseContext = _factory.GetDatabaseContext();
_factory.ReinitializeDbForTests(databaseContext);
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
Task IAsyncLifetime.DisposeAsync() => Task.CompletedTask;
ValueTask IAsyncDisposable.DisposeAsync() => ValueTask.CompletedTask;
[Fact]
public async Task Get_Success()

View File

@@ -22,14 +22,14 @@ public class UsersControllerTests : IClassFixture<ScimApplicationFactory>, IAsyn
_factory = factory;
}
public Task InitializeAsync()
public ValueTask InitializeAsync()
{
var databaseContext = _factory.GetDatabaseContext();
_factory.ReinitializeDbForTests(databaseContext);
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
Task IAsyncLifetime.DisposeAsync() => Task.CompletedTask;
ValueTask IAsyncDisposable.DisposeAsync() => ValueTask.CompletedTask;
[Fact]
public async Task Get_Success()

View File

@@ -10,14 +10,9 @@
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="8.0.10" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNetTestSdkVersion)" />
<PackageReference Include="NSubstitute" Version="$(NSubstituteVersion)" />
<PackageReference Include="xunit" Version="$(XUnitVersion)" />
<PackageReference Include="xunit.runner.visualstudio" Version="$(XUnitRunnerVisualStudioVersion)">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="AutoFixture.Xunit2" Version="$(AutoFixtureXUnit2Version)" />
<PackageReference Include="xunit.v3" Version="$(XUnitv3Version)" />
<PackageReference Include="AutoFixture.Xunit3" Version="$(AutoFixtureXUnit3Version)" />
</ItemGroup>
<ItemGroup>

View File

@@ -5,12 +5,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNetTestSdkVersion)" />
<PackageReference Include="xunit" Version="$(XUnitVersion)" />
<PackageReference Include="xunit.runner.visualstudio" Version="$(XUnitRunnerVisualStudioVersion)">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="xunit.v3" Version="$(XUnitv3Version)" />
<PackageReference Include="coverlet.collector" Version="$(CoverletCollectorVersion)">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
@@ -22,4 +17,4 @@
<ProjectReference Include="..\..\src\Scim\Scim.csproj" />
<ProjectReference Include="..\..\..\test\Common\Common.csproj" />
</ItemGroup>
</Project>
</Project>

View File

@@ -8,13 +8,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNetTestSdkVersion)" />
<PackageReference Include="xunit" Version="$(XUnitVersion)" />
<PackageReference Include="xunit.runner.visualstudio"
Version="$(XUnitRunnerVisualStudioVersion)">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Include="xunit.v3" Version="$(XUnitv3Version)" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Admin\Admin.csproj" />

View File

@@ -213,7 +213,7 @@ public class OrganizationUserControllerTests : IClassFixture<ApiApplicationFacto
Assert.Equal(HttpStatusCode.Forbidden, httpResponse.StatusCode);
}
public async Task InitializeAsync()
public async ValueTask InitializeAsync()
{
_ownerEmail = $"org-user-integration-test-{Guid.NewGuid()}@bitwarden.com";
await _factory.LoginWithNewAccount(_ownerEmail);
@@ -325,10 +325,10 @@ public class OrganizationUserControllerTests : IClassFixture<ApiApplicationFacto
await VerifyCollectionAccessWasUpdatedCorrectlyAsync(organizationUser, sharedCollection.Id, defaultCollection.Id);
}
public Task DisposeAsync()
public ValueTask DisposeAsync()
{
_client.Dispose();
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
private async Task<(Group group, Collection sharedCollection, Collection defaultCollection)> CreateTestDataAsync()

View File

@@ -3,7 +3,6 @@ using System.Net.Http.Headers;
using Bit.Api.IntegrationTest.Factories;
using Bit.Seeder.Recipes;
using Xunit;
using Xunit.Abstractions;
namespace Bit.Api.IntegrationTest.AdminConsole.Controllers;

View File

@@ -42,7 +42,7 @@ public class OrganizationUsersControllerPutResetPasswordTests : IClassFixture<Ap
_loginHelper = new LoginHelper(_factory, _client);
}
public async Task InitializeAsync()
public async ValueTask InitializeAsync()
{
_ownerEmail = $"reset-password-test-{Guid.NewGuid()}@example.com";
await _factory.LoginWithNewAccount(_ownerEmail);
@@ -67,10 +67,10 @@ public class OrganizationUsersControllerPutResetPasswordTests : IClassFixture<Ap
});
}
public Task DisposeAsync()
public ValueTask DisposeAsync()
{
_client.Dispose();
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
/// <summary>

View File

@@ -39,7 +39,7 @@ public class PoliciesControllerTests : IClassFixture<ApiApplicationFactory>, IAs
_loginHelper = new LoginHelper(_factory, _client);
}
public async Task InitializeAsync()
public async ValueTask InitializeAsync()
{
_ownerEmail = $"integration-test{Guid.NewGuid()}@bitwarden.com";
await _factory.LoginWithNewAccount(_ownerEmail);
@@ -50,10 +50,10 @@ public class PoliciesControllerTests : IClassFixture<ApiApplicationFactory>, IAs
await _loginHelper.LoginAsync(_ownerEmail);
}
public Task DisposeAsync()
public ValueTask DisposeAsync()
{
_client.Dispose();
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
[Fact]

View File

@@ -26,7 +26,7 @@ public class ImportOrganizationUsersAndGroupsCommandTests : IClassFixture<ApiApp
_loginHelper = new LoginHelper(_factory, _client);
}
public async Task InitializeAsync()
public async ValueTask InitializeAsync()
{
// Create the owner account
_ownerEmail = $"integration-test{Guid.NewGuid()}@bitwarden.com";
@@ -40,10 +40,10 @@ public class ImportOrganizationUsersAndGroupsCommandTests : IClassFixture<ApiApp
await _loginHelper.LoginWithOrganizationApiKeyAsync(_organization.Id);
}
public Task DisposeAsync()
public ValueTask DisposeAsync()
{
_client.Dispose();
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
[Fact]

View File

@@ -32,7 +32,7 @@ public class MembersControllerTests : IClassFixture<ApiApplicationFactory>, IAsy
_loginHelper = new LoginHelper(_factory, _client);
}
public async Task InitializeAsync()
public async ValueTask InitializeAsync()
{
// Create the owner account
_ownerEmail = $"integration-test{Guid.NewGuid()}@bitwarden.com";
@@ -46,10 +46,10 @@ public class MembersControllerTests : IClassFixture<ApiApplicationFactory>, IAsy
await _loginHelper.LoginWithOrganizationApiKeyAsync(_organization.Id);
}
public Task DisposeAsync()
public ValueTask DisposeAsync()
{
_client.Dispose();
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
[Fact]

View File

@@ -32,7 +32,7 @@ public class PoliciesControllerTests : IClassFixture<ApiApplicationFactory>, IAs
_loginHelper = new LoginHelper(_factory, _client);
}
public async Task InitializeAsync()
public async ValueTask InitializeAsync()
{
// Create the owner account
_ownerEmail = $"integration-test{Guid.NewGuid()}@bitwarden.com";
@@ -46,10 +46,10 @@ public class PoliciesControllerTests : IClassFixture<ApiApplicationFactory>, IAs
await _loginHelper.LoginWithOrganizationApiKeyAsync(_organization.Id);
}
public Task DisposeAsync()
public ValueTask DisposeAsync()
{
_client.Dispose();
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
[Fact]

View File

@@ -4,12 +4,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNetTestSdkVersion)" />
<PackageReference Include="xunit" Version="$(XUnitVersion)" />
<PackageReference Include="xunit.runner.visualstudio" Version="$(XUnitRunnerVisualStudioVersion)">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="xunit.v3" Version="$(XUnitv3Version)" />
<PackageReference Include="coverlet.collector" Version="$(CoverletCollectorVersion)">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>

View File

@@ -51,16 +51,16 @@ public class AccountsControllerTest : IClassFixture<ApiApplicationFactory>, IAsy
_passwordHasher = _factory.GetService<IPasswordHasher<User>>();
}
public async Task InitializeAsync()
public async ValueTask InitializeAsync()
{
_ownerEmail = $"integration-test{Guid.NewGuid()}@bitwarden.com";
await _factory.LoginWithNewAccount(_ownerEmail);
}
public Task DisposeAsync()
public ValueTask DisposeAsync()
{
_client.Dispose();
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
[Fact]

View File

@@ -21,7 +21,7 @@ public class ConfigControllerTests : IClassFixture<ApiApplicationFactory>, IAsyn
_client = _factory.CreateClient();
}
public async Task InitializeAsync()
public async ValueTask InitializeAsync()
{
_email = $"integration-test{Guid.NewGuid()}@bitwarden.com";
@@ -29,10 +29,10 @@ public class ConfigControllerTests : IClassFixture<ApiApplicationFactory>, IAsyn
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokens.Token);
}
public Task DisposeAsync()
public ValueTask DisposeAsync()
{
_client.Dispose();
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
private async Task LoginAsync()

View File

@@ -58,16 +58,16 @@ public class AccountsKeyManagementControllerTests : IClassFixture<ApiApplication
_userSignatureKeyPairRepository = _factory.GetService<IUserSignatureKeyPairRepository>();
}
public async Task InitializeAsync()
public async ValueTask InitializeAsync()
{
_ownerEmail = $"integration-test{Guid.NewGuid()}@bitwarden.com";
await _factory.LoginWithNewAccount(_ownerEmail);
}
public Task DisposeAsync()
public ValueTask DisposeAsync()
{
_client.Dispose();
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
[Theory]

View File

@@ -49,7 +49,7 @@ public class NotificationsControllerTests : IClassFixture<ApiApplicationFactory>
_userRepository = _factory.GetService<IUserRepository>();
}
public async Task InitializeAsync()
public async ValueTask InitializeAsync()
{
// Create the owner account
_ownerEmail = $"integration-test{Guid.NewGuid()}@bitwarden.com";
@@ -63,7 +63,7 @@ public class NotificationsControllerTests : IClassFixture<ApiApplicationFactory>
_notificationsWithStatuses = await CreateNotificationsWithStatusesAsync();
}
public Task DisposeAsync()
public ValueTask DisposeAsync()
{
_client.Dispose();
@@ -72,7 +72,7 @@ public class NotificationsControllerTests : IClassFixture<ApiApplicationFactory>
_notificationRepository.DeleteAsync(notification);
}
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
[Theory]
@@ -220,7 +220,7 @@ public class NotificationsControllerTests : IClassFixture<ApiApplicationFactory>
}
[Fact]
private async void MarkAsDeletedAsync_NotLoggedIn_Unauthorized()
private async Task MarkAsDeletedAsync_NotLoggedIn_Unauthorized()
{
var url = $"/notifications/{Guid.NewGuid().ToString()}/delete";
var response = await _client.PatchAsync(url, new StringContent(""));
@@ -228,7 +228,7 @@ public class NotificationsControllerTests : IClassFixture<ApiApplicationFactory>
}
[Fact]
private async void MarkAsDeletedAsync_NonExistentNotificationId_NotFound()
private async Task MarkAsDeletedAsync_NonExistentNotificationId_NotFound()
{
await _loginHelper.LoginAsync(_ownerEmail);
@@ -238,7 +238,7 @@ public class NotificationsControllerTests : IClassFixture<ApiApplicationFactory>
}
[Fact]
private async void MarkAsDeletedAsync_UserIdNotMatching_NotFound()
private async Task MarkAsDeletedAsync_UserIdNotMatching_NotFound()
{
var email = $"integration-test{Guid.NewGuid()}@bitwarden.com";
await _factory.LoginWithNewAccount(email);
@@ -253,7 +253,7 @@ public class NotificationsControllerTests : IClassFixture<ApiApplicationFactory>
}
[Fact]
private async void MarkAsDeletedAsync_OrganizationIdNotMatchingUserNotPartOfOrganization_NotFound()
private async Task MarkAsDeletedAsync_OrganizationIdNotMatchingUserNotPartOfOrganization_NotFound()
{
var email = $"integration-test{Guid.NewGuid()}@bitwarden.com";
await _factory.LoginWithNewAccount(email);
@@ -268,7 +268,7 @@ public class NotificationsControllerTests : IClassFixture<ApiApplicationFactory>
}
[Fact]
private async void MarkAsDeletedAsync_OrganizationIdNotMatchingUserPartOfDifferentOrganization_NotFound()
private async Task MarkAsDeletedAsync_OrganizationIdNotMatchingUserPartOfDifferentOrganization_NotFound()
{
var (organization, _) = await OrganizationTestHelpers.SignUpAsync(_factory,
plan: PlanType.EnterpriseAnnually, ownerEmail: _ownerEmail, passwordManagerSeats: 10,
@@ -287,7 +287,7 @@ public class NotificationsControllerTests : IClassFixture<ApiApplicationFactory>
}
[Fact]
private async void MarkAsDeletedAsync_NotificationStatusNotExisting_Created()
private async Task MarkAsDeletedAsync_NotificationStatusNotExisting_Created()
{
var notifications = await CreateNotificationsAsync(_organizationUserOwner.UserId);
@@ -308,7 +308,7 @@ public class NotificationsControllerTests : IClassFixture<ApiApplicationFactory>
[Theory]
[InlineData(false)]
[InlineData(true)]
private async void MarkAsDeletedAsync_NotificationStatusExisting_Updated(bool deletedDateNull)
private async Task MarkAsDeletedAsync_NotificationStatusExisting_Updated(bool deletedDateNull)
{
var notifications = await CreateNotificationsAsync(_organizationUserOwner.UserId);
await _notificationStatusRepository.CreateAsync(new NotificationStatus
@@ -334,7 +334,7 @@ public class NotificationsControllerTests : IClassFixture<ApiApplicationFactory>
}
[Fact]
private async void MarkAsReadAsync_NotLoggedIn_Unauthorized()
private async Task MarkAsReadAsync_NotLoggedIn_Unauthorized()
{
var url = $"/notifications/{Guid.NewGuid().ToString()}/read";
var response = await _client.PatchAsync(url, new StringContent(""));
@@ -342,7 +342,7 @@ public class NotificationsControllerTests : IClassFixture<ApiApplicationFactory>
}
[Fact]
private async void MarkAsReadAsync_NonExistentNotificationId_NotFound()
private async Task MarkAsReadAsync_NonExistentNotificationId_NotFound()
{
await _loginHelper.LoginAsync(_ownerEmail);
@@ -352,7 +352,7 @@ public class NotificationsControllerTests : IClassFixture<ApiApplicationFactory>
}
[Fact]
private async void MarkAsReadAsync_UserIdNotMatching_NotFound()
private async Task MarkAsReadAsync_UserIdNotMatching_NotFound()
{
var email = $"integration-test{Guid.NewGuid()}@bitwarden.com";
await _factory.LoginWithNewAccount(email);
@@ -367,7 +367,7 @@ public class NotificationsControllerTests : IClassFixture<ApiApplicationFactory>
}
[Fact]
private async void MarkAsReadAsync_OrganizationIdNotMatchingUserNotPartOfOrganization_NotFound()
private async Task MarkAsReadAsync_OrganizationIdNotMatchingUserNotPartOfOrganization_NotFound()
{
var email = $"integration-test{Guid.NewGuid()}@bitwarden.com";
await _factory.LoginWithNewAccount(email);
@@ -382,7 +382,7 @@ public class NotificationsControllerTests : IClassFixture<ApiApplicationFactory>
}
[Fact]
private async void MarkAsReadAsync_OrganizationIdNotMatchingUserPartOfDifferentOrganization_NotFound()
private async Task MarkAsReadAsync_OrganizationIdNotMatchingUserPartOfDifferentOrganization_NotFound()
{
var (organization, _) = await OrganizationTestHelpers.SignUpAsync(_factory,
plan: PlanType.EnterpriseAnnually, ownerEmail: _ownerEmail, passwordManagerSeats: 10,
@@ -401,7 +401,7 @@ public class NotificationsControllerTests : IClassFixture<ApiApplicationFactory>
}
[Fact]
private async void MarkAsReadAsync_NotificationStatusNotExisting_Created()
private async Task MarkAsReadAsync_NotificationStatusNotExisting_Created()
{
var notifications = await CreateNotificationsAsync(_organizationUserOwner.UserId);
@@ -422,7 +422,7 @@ public class NotificationsControllerTests : IClassFixture<ApiApplicationFactory>
[Theory]
[InlineData(false)]
[InlineData(true)]
private async void MarkAsReadAsync_NotificationStatusExisting_Updated(bool readDateNull)
private async Task MarkAsReadAsync_NotificationStatusExisting_Updated(bool readDateNull)
{
var notifications = await CreateNotificationsAsync(_organizationUserOwner.UserId);
await _notificationStatusRepository.CreateAsync(new NotificationStatus

View File

@@ -44,17 +44,17 @@ public class AccessPoliciesControllerTests : IClassFixture<ApiApplicationFactory
_loginHelper = new LoginHelper(_factory, _client);
}
public async Task InitializeAsync()
public async ValueTask InitializeAsync()
{
_email = $"integration-test{Guid.NewGuid()}@bitwarden.com";
await _factory.LoginWithNewAccount(_email);
_organizationHelper = new SecretsManagerOrganizationHelper(_factory, _email);
}
public Task DisposeAsync()
public ValueTask DisposeAsync()
{
_client.Dispose();
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
[Theory]

View File

@@ -49,17 +49,17 @@ public class CountsControllerTests : IClassFixture<ApiApplicationFactory>, IAsyn
}
public async Task InitializeAsync()
public async ValueTask InitializeAsync()
{
_email = $"integration-test{Guid.NewGuid()}@bitwarden.com";
await _factory.LoginWithNewAccount(_email);
_organizationHelper = new SecretsManagerOrganizationHelper(_factory, _email);
}
public Task DisposeAsync()
public ValueTask DisposeAsync()
{
_client.Dispose();
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
[Theory]

View File

@@ -37,17 +37,17 @@ public class ProjectsControllerTests : IClassFixture<ApiApplicationFactory>, IAs
_loginHelper = new LoginHelper(_factory, _client);
}
public async Task InitializeAsync()
public async ValueTask InitializeAsync()
{
_email = $"integration-test{Guid.NewGuid()}@bitwarden.com";
await _factory.LoginWithNewAccount(_email);
_organizationHelper = new SecretsManagerOrganizationHelper(_factory, _email);
}
public Task DisposeAsync()
public ValueTask DisposeAsync()
{
_client.Dispose();
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
[Theory]

View File

@@ -41,17 +41,17 @@ public class SecretsControllerTests : IClassFixture<ApiApplicationFactory>, IAsy
_loginHelper = new LoginHelper(_factory, _client);
}
public async Task InitializeAsync()
public async ValueTask InitializeAsync()
{
_email = $"integration-test{Guid.NewGuid()}@bitwarden.com";
await _factory.LoginWithNewAccount(_email);
_organizationHelper = new SecretsManagerOrganizationHelper(_factory, _email);
}
public Task DisposeAsync()
public ValueTask DisposeAsync()
{
_client.Dispose();
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
[Theory]

View File

@@ -28,17 +28,17 @@ public class SecretsManagerEventsControllerTests : IClassFixture<ApiApplicationF
_serviceAccountRepository = _factory.GetService<IServiceAccountRepository>();
}
public async Task InitializeAsync()
public async ValueTask InitializeAsync()
{
_email = $"integration-test{Guid.NewGuid()}@bitwarden.com";
await _factory.LoginWithNewAccount(_email);
_organizationHelper = new SecretsManagerOrganizationHelper(_factory, _email);
}
public Task DisposeAsync()
public ValueTask DisposeAsync()
{
_client.Dispose();
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
private async Task LoginAsync(string email)

View File

@@ -22,17 +22,17 @@ public class SecretsManagerPortingControllerTests : IClassFixture<ApiApplication
_loginHelper = new LoginHelper(_factory, _client);
}
public async Task InitializeAsync()
public async ValueTask InitializeAsync()
{
_email = $"integration-test{Guid.NewGuid()}@bitwarden.com";
await _factory.LoginWithNewAccount(_email);
_organizationHelper = new SecretsManagerOrganizationHelper(_factory, _email);
}
public Task DisposeAsync()
public ValueTask DisposeAsync()
{
_client.Dispose();
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
[Theory]

View File

@@ -30,17 +30,17 @@ public class SecretsTrashControllerTests : IClassFixture<ApiApplicationFactory>,
_loginHelper = new LoginHelper(_factory, _client);
}
public async Task InitializeAsync()
public async ValueTask InitializeAsync()
{
_email = $"integration-test{Guid.NewGuid()}@bitwarden.com";
await _factory.LoginWithNewAccount(_email);
_organizationHelper = new SecretsManagerOrganizationHelper(_factory, _email);
}
public Task DisposeAsync()
public ValueTask DisposeAsync()
{
_client.Dispose();
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
[Theory]

View File

@@ -48,17 +48,17 @@ public class ServiceAccountsControllerTests : IClassFixture<ApiApplicationFactor
_loginHelper = new LoginHelper(_factory, _client);
}
public async Task InitializeAsync()
public async ValueTask InitializeAsync()
{
_email = $"integration-test{Guid.NewGuid()}@bitwarden.com";
await _factory.LoginWithNewAccount(_email);
_organizationHelper = new SecretsManagerOrganizationHelper(_factory, _email);
}
public Task DisposeAsync()
public ValueTask DisposeAsync()
{
_client.Dispose();
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
[Theory]

View File

@@ -26,16 +26,16 @@ public class SyncControllerTests : IClassFixture<ApiApplicationFactory>, IAsyncL
_userRepository = _factory.GetService<IUserRepository>();
}
public async Task InitializeAsync()
public async ValueTask InitializeAsync()
{
_ownerEmail = $"integration-test{Guid.NewGuid()}@bitwarden.com";
await _factory.LoginWithNewAccount(_ownerEmail);
}
public Task DisposeAsync()
public ValueTask DisposeAsync()
{
_client.Dispose();
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
[Fact]

View File

@@ -1,4 +1,4 @@
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Api.AdminConsole.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;

View File

@@ -1,5 +1,5 @@
using System.Security.Claims;
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Api.AdminConsole.Controllers;
using Bit.Api.Auth.Models.Request.Accounts;
using Bit.Api.Models.Request.Organizations;

View File

@@ -9,14 +9,9 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNetTestSdkVersion)" />
<PackageReference Include="NSubstitute" Version="$(NSubstituteVersion)" />
<PackageReference Include="xunit" Version="$(XUnitVersion)" />
<PackageReference Include="xunit.runner.visualstudio" Version="$(XUnitRunnerVisualStudioVersion)">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="AutoFixture.Xunit2" Version="$(AutoFixtureXUnit2Version)" />
<PackageReference Include="xunit.v3" Version="$(XUnitv3Version)" />
<PackageReference Include="AutoFixture.Xunit3" Version="$(AutoFixtureXUnit3Version)" />
</ItemGroup>
<ItemGroup>

View File

@@ -1,5 +1,5 @@
using System.Security.Claims;
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Api.AdminConsole.Models.Request.Organizations;
using Bit.Api.Billing.Controllers;
using Bit.Api.Models.Request.Organizations;

View File

@@ -1,4 +1,4 @@
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Api.Controllers;
using Bit.Core.Services;
using Bit.Core.Settings;

View File

@@ -1,5 +1,5 @@
using System.Text.Json;
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Api.Tools.Controllers;
using Bit.Api.Tools.Models.Request;
using Bit.Api.Tools.Models.Response;

View File

@@ -5,19 +5,13 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Divergic.Logging.Xunit" Version="4.3.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNetTestSdkVersion)" />
<PackageReference Include="RichardSzalay.MockHttp" Version="7.0.0" />
<PackageReference Include="xunit" Version="$(XUnitVersion)" />
<PackageReference Include="xunit.runner.visualstudio" Version="$(XUnitRunnerVisualStudioVersion)">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="xunit.v3" Version="$(XUnitv3Version)" />
<PackageReference Include="coverlet.collector" Version="$(CoverletCollectorVersion)">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="AutoFixture.Xunit2" Version="$(AutoFixtureXUnit2Version)" />
<PackageReference Include="AutoFixture.Xunit3" Version="$(AutoFixtureXUnit3Version)" />
<PackageReference Include="NSubstitute" Version="$(NSubstituteVersion)" />
</ItemGroup>

View File

@@ -8,24 +8,26 @@ using Bit.Core.Entities;
using Bit.Core.Enums;
using Bit.Core.Repositories;
using Bit.Core.Services;
using Divergic.Logging.Xunit;
using Bit.Test.Common;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Infrastructure;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Testing;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Primitives;
using NSubstitute;
using NSubstitute.ReturnsExtensions;
using Xunit;
using Xunit.Abstractions;
using Transaction = Bit.Core.Entities.Transaction;
namespace Bit.Billing.Test.Controllers;
public class PayPalControllerTests
{
private readonly ITestOutputHelper _testOutputHelper;
private readonly ILogger<PayPalController> _logger;
private readonly FakeLogCollector _fakeLogCollector;
private readonly IOptions<BillingSettings> _billingSettings = Substitute.For<IOptions<BillingSettings>>();
private readonly IMailService _mailService = Substitute.For<IMailService>();
@@ -38,68 +40,68 @@ public class PayPalControllerTests
private const string _defaultWebhookKey = "webhook-key";
public PayPalControllerTests(ITestOutputHelper testOutputHelper)
public PayPalControllerTests()
{
_testOutputHelper = testOutputHelper;
var services = new ServiceCollection()
.AddLogging(b =>
{
b.AddProvider(new XUnitLoggerProvider());
b.AddFakeLogging();
})
.BuildServiceProvider();
_logger = services.GetRequiredService<ILogger<PayPalController>>();
_fakeLogCollector = services.GetFakeLogCollector();
}
[Fact]
public async Task PostIpn_NullKey_BadRequest()
{
var logger = _testOutputHelper.BuildLoggerFor<PayPalController>();
var controller = ConfigureControllerContextWith(logger, null, null);
var controller = ConfigureControllerContextWith(null, null);
var result = await controller.PostIpn();
HasStatusCode(result, 400);
LoggedError(logger, "PayPal IPN: Key is missing");
LoggedError("PayPal IPN: Key is missing");
}
[Fact]
public async Task PostIpn_IncorrectKey_BadRequest()
{
var logger = _testOutputHelper.BuildLoggerFor<PayPalController>();
_billingSettings.Value.Returns(new BillingSettings
{
PayPal = { WebhookKey = "INCORRECT" }
});
var controller = ConfigureControllerContextWith(logger, _defaultWebhookKey, null);
var controller = ConfigureControllerContextWith(_defaultWebhookKey, null);
var result = await controller.PostIpn();
HasStatusCode(result, 400);
LoggedError(logger, "PayPal IPN: Key is incorrect");
LoggedError("PayPal IPN: Key is incorrect");
}
[Fact]
public async Task PostIpn_EmptyIPNBody_BadRequest()
{
var logger = _testOutputHelper.BuildLoggerFor<PayPalController>();
_billingSettings.Value.Returns(new BillingSettings
{
PayPal = { WebhookKey = _defaultWebhookKey }
});
var controller = ConfigureControllerContextWith(logger, _defaultWebhookKey, null);
var controller = ConfigureControllerContextWith(_defaultWebhookKey, null);
var result = await controller.PostIpn();
HasStatusCode(result, 400);
LoggedError(logger, "PayPal IPN: Request body is null or empty");
LoggedError("PayPal IPN: Request body is null or empty");
}
[Fact]
public async Task PostIpn_IPNHasNoEntityId_BadRequest()
{
var logger = _testOutputHelper.BuildLoggerFor<PayPalController>();
_billingSettings.Value.Returns(new BillingSettings
{
PayPal = { WebhookKey = _defaultWebhookKey }
@@ -107,20 +109,18 @@ public class PayPalControllerTests
var ipnBody = await PayPalTestIPN.GetAsync(IPNBody.TransactionMissingEntityIds);
var controller = ConfigureControllerContextWith(logger, _defaultWebhookKey, ipnBody);
var controller = ConfigureControllerContextWith(_defaultWebhookKey, ipnBody);
var result = await controller.PostIpn();
HasStatusCode(result, 400);
LoggedError(logger, "PayPal IPN (2PK15573S8089712Y): 'custom' did not contain a User ID or Organization ID or provider ID");
LoggedError("PayPal IPN (2PK15573S8089712Y): 'custom' did not contain a User ID or Organization ID or provider ID");
}
[Fact]
public async Task PostIpn_OtherTransactionType_Unprocessed_Ok()
{
var logger = _testOutputHelper.BuildLoggerFor<PayPalController>();
_billingSettings.Value.Returns(new BillingSettings
{
PayPal = { WebhookKey = _defaultWebhookKey }
@@ -130,20 +130,18 @@ public class PayPalControllerTests
var ipnBody = await PayPalTestIPN.GetAsync(IPNBody.UnsupportedTransactionType);
var controller = ConfigureControllerContextWith(logger, _defaultWebhookKey, ipnBody);
var controller = ConfigureControllerContextWith(_defaultWebhookKey, ipnBody);
var result = await controller.PostIpn();
HasStatusCode(result, 200);
LoggedWarning(logger, "PayPal IPN (2PK15573S8089712Y): Transaction type (other) not supported for payments");
LoggedWarning("PayPal IPN (2PK15573S8089712Y): Transaction type (other) not supported for payments");
}
[Fact]
public async Task PostIpn_MismatchedReceiverID_Unprocessed_Ok()
{
var logger = _testOutputHelper.BuildLoggerFor<PayPalController>();
_billingSettings.Value.Returns(new BillingSettings
{
PayPal =
@@ -157,20 +155,18 @@ public class PayPalControllerTests
var ipnBody = await PayPalTestIPN.GetAsync(IPNBody.SuccessfulPayment);
var controller = ConfigureControllerContextWith(logger, _defaultWebhookKey, ipnBody);
var controller = ConfigureControllerContextWith(_defaultWebhookKey, ipnBody);
var result = await controller.PostIpn();
HasStatusCode(result, 200);
LoggedWarning(logger, "PayPal IPN (2PK15573S8089712Y): Receiver ID (NHDYKLQ3L4LWL) does not match Bitwarden business ID (INCORRECT)");
LoggedWarning("PayPal IPN (2PK15573S8089712Y): Receiver ID (NHDYKLQ3L4LWL) does not match Bitwarden business ID (INCORRECT)");
}
[Fact]
public async Task PostIpn_RefundMissingParent_Unprocessed_Ok()
{
var logger = _testOutputHelper.BuildLoggerFor<PayPalController>();
_billingSettings.Value.Returns(new BillingSettings
{
PayPal =
@@ -184,20 +180,18 @@ public class PayPalControllerTests
var ipnBody = await PayPalTestIPN.GetAsync(IPNBody.RefundMissingParentTransaction);
var controller = ConfigureControllerContextWith(logger, _defaultWebhookKey, ipnBody);
var controller = ConfigureControllerContextWith(_defaultWebhookKey, ipnBody);
var result = await controller.PostIpn();
HasStatusCode(result, 200);
LoggedWarning(logger, "PayPal IPN (2PK15573S8089712Y): Parent transaction ID is required for refund");
LoggedWarning("PayPal IPN (2PK15573S8089712Y): Parent transaction ID is required for refund");
}
[Fact]
public async Task PostIpn_eCheckPayment_Unprocessed_Ok()
{
var logger = _testOutputHelper.BuildLoggerFor<PayPalController>();
_billingSettings.Value.Returns(new BillingSettings
{
PayPal =
@@ -211,20 +205,18 @@ public class PayPalControllerTests
var ipnBody = await PayPalTestIPN.GetAsync(IPNBody.ECheckPayment);
var controller = ConfigureControllerContextWith(logger, _defaultWebhookKey, ipnBody);
var controller = ConfigureControllerContextWith(_defaultWebhookKey, ipnBody);
var result = await controller.PostIpn();
HasStatusCode(result, 200);
LoggedWarning(logger, "PayPal IPN (2PK15573S8089712Y): Transaction was an eCheck payment");
LoggedWarning("PayPal IPN (2PK15573S8089712Y): Transaction was an eCheck payment");
}
[Fact]
public async Task PostIpn_NonUSD_Unprocessed_Ok()
{
var logger = _testOutputHelper.BuildLoggerFor<PayPalController>();
_billingSettings.Value.Returns(new BillingSettings
{
PayPal =
@@ -238,20 +230,18 @@ public class PayPalControllerTests
var ipnBody = await PayPalTestIPN.GetAsync(IPNBody.NonUSDPayment);
var controller = ConfigureControllerContextWith(logger, _defaultWebhookKey, ipnBody);
var controller = ConfigureControllerContextWith(_defaultWebhookKey, ipnBody);
var result = await controller.PostIpn();
HasStatusCode(result, 200);
LoggedWarning(logger, "PayPal IPN (2PK15573S8089712Y): Transaction was not in USD (CAD)");
LoggedWarning("PayPal IPN (2PK15573S8089712Y): Transaction was not in USD (CAD)");
}
[Fact]
public async Task PostIpn_Completed_ExistingTransaction_Unprocessed_Ok()
{
var logger = _testOutputHelper.BuildLoggerFor<PayPalController>();
_billingSettings.Value.Returns(new BillingSettings
{
PayPal =
@@ -269,20 +259,18 @@ public class PayPalControllerTests
GatewayType.PayPal,
"2PK15573S8089712Y").Returns(new Transaction());
var controller = ConfigureControllerContextWith(logger, _defaultWebhookKey, ipnBody);
var controller = ConfigureControllerContextWith(_defaultWebhookKey, ipnBody);
var result = await controller.PostIpn();
HasStatusCode(result, 200);
LoggedWarning(logger, "PayPal IPN (2PK15573S8089712Y): Already processed this completed transaction");
LoggedWarning("PayPal IPN (2PK15573S8089712Y): Already processed this completed transaction");
}
[Fact]
public async Task PostIpn_Completed_CreatesTransaction_Ok()
{
var logger = _testOutputHelper.BuildLoggerFor<PayPalController>();
_billingSettings.Value.Returns(new BillingSettings
{
PayPal =
@@ -300,7 +288,7 @@ public class PayPalControllerTests
GatewayType.PayPal,
"2PK15573S8089712Y").ReturnsNull();
var controller = ConfigureControllerContextWith(logger, _defaultWebhookKey, ipnBody);
var controller = ConfigureControllerContextWith(_defaultWebhookKey, ipnBody);
var result = await controller.PostIpn();
@@ -314,8 +302,6 @@ public class PayPalControllerTests
[Fact]
public async Task PostIpn_Completed_CreatesTransaction_CreditsOrganizationAccount_Ok()
{
var logger = _testOutputHelper.BuildLoggerFor<PayPalController>();
_billingSettings.Value.Returns(new BillingSettings
{
PayPal =
@@ -341,7 +327,7 @@ public class PayPalControllerTests
_paymentService.CreditAccountAsync(organization, 48M).Returns(true);
var controller = ConfigureControllerContextWith(logger, _defaultWebhookKey, ipnBody);
var controller = ConfigureControllerContextWith(_defaultWebhookKey, ipnBody);
var result = await controller.PostIpn();
@@ -362,8 +348,6 @@ public class PayPalControllerTests
[Fact]
public async Task PostIpn_Completed_CreatesTransaction_CreditsUserAccount_Ok()
{
var logger = _testOutputHelper.BuildLoggerFor<PayPalController>();
_billingSettings.Value.Returns(new BillingSettings
{
PayPal =
@@ -387,7 +371,7 @@ public class PayPalControllerTests
_userRepository.GetByIdAsync(userId).Returns(user);
var controller = ConfigureControllerContextWith(logger, _defaultWebhookKey, ipnBody);
var controller = ConfigureControllerContextWith(_defaultWebhookKey, ipnBody);
var result = await controller.PostIpn();
@@ -406,8 +390,6 @@ public class PayPalControllerTests
[Fact]
public async Task PostIpn_Refunded_ExistingTransaction_Unprocessed_Ok()
{
var logger = _testOutputHelper.BuildLoggerFor<PayPalController>();
_billingSettings.Value.Returns(new BillingSettings
{
PayPal =
@@ -425,13 +407,13 @@ public class PayPalControllerTests
GatewayType.PayPal,
"2PK15573S8089712Y").Returns(new Transaction());
var controller = ConfigureControllerContextWith(logger, _defaultWebhookKey, ipnBody);
var controller = ConfigureControllerContextWith(_defaultWebhookKey, ipnBody);
var result = await controller.PostIpn();
HasStatusCode(result, 200);
LoggedWarning(logger, "PayPal IPN (2PK15573S8089712Y): Already processed this refunded transaction");
LoggedWarning("PayPal IPN (2PK15573S8089712Y): Already processed this refunded transaction");
await _transactionRepository.DidNotReceiveWithAnyArgs().ReplaceAsync(Arg.Any<Transaction>());
@@ -441,8 +423,6 @@ public class PayPalControllerTests
[Fact]
public async Task PostIpn_Refunded_MissingParentTransaction_Ok()
{
var logger = _testOutputHelper.BuildLoggerFor<PayPalController>();
_billingSettings.Value.Returns(new BillingSettings
{
PayPal =
@@ -464,13 +444,13 @@ public class PayPalControllerTests
GatewayType.PayPal,
"PARENT").ReturnsNull();
var controller = ConfigureControllerContextWith(logger, _defaultWebhookKey, ipnBody);
var controller = ConfigureControllerContextWith(_defaultWebhookKey, ipnBody);
var result = await controller.PostIpn();
HasStatusCode(result, 200);
LoggedWarning(logger, "PayPal IPN (2PK15573S8089712Y): Could not find parent transaction");
LoggedWarning("PayPal IPN (2PK15573S8089712Y): Could not find parent transaction");
await _transactionRepository.DidNotReceiveWithAnyArgs().ReplaceAsync(Arg.Any<Transaction>());
@@ -480,8 +460,6 @@ public class PayPalControllerTests
[Fact]
public async Task PostIpn_Refunded_ReplacesParent_CreatesTransaction_Ok()
{
var logger = _testOutputHelper.BuildLoggerFor<PayPalController>();
_billingSettings.Value.Returns(new BillingSettings
{
PayPal =
@@ -511,7 +489,7 @@ public class PayPalControllerTests
GatewayType.PayPal,
"PARENT").Returns(parentTransaction);
var controller = ConfigureControllerContextWith(logger, _defaultWebhookKey, ipnBody);
var controller = ConfigureControllerContextWith(_defaultWebhookKey, ipnBody);
var result = await controller.PostIpn();
@@ -530,13 +508,12 @@ public class PayPalControllerTests
}
private PayPalController ConfigureControllerContextWith(
ILogger<PayPalController> logger,
string webhookKey,
string ipnBody)
{
var controller = new PayPalController(
_billingSettings,
logger,
_logger,
_mailService,
_organizationRepository,
_paymentService,
@@ -578,16 +555,18 @@ public class PayPalControllerTests
Assert.Equal(statusCode, statusCodeActionResult.StatusCode);
}
private static void Logged(ICacheLogger logger, LogLevel logLevel, string message)
private void Logged(LogLevel logLevel, string message)
{
Assert.NotNull(logger.Last);
Assert.Equal(logLevel, logger.Last!.LogLevel);
Assert.Equal(message, logger.Last!.Message);
var snapshot = _fakeLogCollector.GetSnapshot(true);
Assert.NotEmpty(snapshot);
var last = snapshot[^1];
Assert.Equal(logLevel, last.Level);
Assert.Equal(message, last.Message);
}
private static void LoggedError(ICacheLogger logger, string message)
=> Logged(logger, LogLevel.Error, message);
private void LoggedError(string message)
=> Logged(LogLevel.Error, message);
private static void LoggedWarning(ICacheLogger logger, string message)
=> Logged(logger, LogLevel.Warning, message);
private void LoggedWarning(string message)
=> Logged(LogLevel.Warning, message);
}

View File

@@ -1,13 +1,12 @@
#nullable enable
using System.Reflection;
using System.Reflection;
using AutoFixture;
using Bit.Test.Common.Helpers;
using Xunit;
using Xunit.Sdk;
using Xunit.v3;
namespace Bit.Test.Common.AutoFixture.Attributes;
[DataDiscoverer("AutoFixture.Xunit2.NoPreDiscoveryDataDiscoverer", "AutoFixture.Xunit2")]
public class BitAutoDataAttribute : DataAttribute
{
private readonly Func<IFixture> _createFixture;
@@ -26,6 +25,23 @@ public class BitAutoDataAttribute : DataAttribute
_fixedTestParameters = fixedTestParameters;
}
public override IEnumerable<object?[]> GetData(MethodInfo testMethod)
=> BitAutoDataAttributeHelpers.GetData(testMethod, _createFixture(), _fixedTestParameters);
protected IEnumerable<object?[]> GetDataCore(MethodInfo testMethod)
{
return BitAutoDataAttributeHelpers.GetData(testMethod, _createFixture(), _fixedTestParameters);
}
public override ValueTask<IReadOnlyCollection<ITheoryDataRow>> GetData(MethodInfo testMethod, DisposalTracker disposalTracker)
{
var theoryData = new List<ITheoryDataRow>();
var data = GetDataCore(testMethod);
foreach (var dataRow in data)
{
theoryData.Add(new TheoryDataRow(dataRow));
}
return new(theoryData);
}
public override bool SupportsDiscoveryEnumeration() => false;
}

View File

@@ -1,10 +1,10 @@
// FIXME: Update this file to be null safe and then delete the line below
#nullable disable
using System.Diagnostics;
using System.Reflection;
using AutoFixture;
using Bit.Test.Common.Helpers;
using Xunit;
using Xunit.Sdk;
using Xunit.v3;
namespace Bit.Test.Common.AutoFixture.Attributes;
@@ -22,6 +22,27 @@ public class BitMemberAutoDataAttribute : MemberDataAttributeBase
_createFixture = createFixture;
}
protected override object[] ConvertDataItem(MethodInfo testMethod, object item) =>
BitAutoDataAttributeHelpers.GetData(testMethod, _createFixture(), item as object[]).First();
private MethodInfo? _testMethod;
public override ValueTask<IReadOnlyCollection<ITheoryDataRow>> GetData(MethodInfo testMethod, DisposalTracker disposalTracker)
{
_testMethod = testMethod;
return base.GetData(testMethod, disposalTracker);
}
protected override ITheoryDataRow ConvertDataRow(object dataRow)
{
// Unwrap a possible ITheoryDataRow
object?[] fixedItems;
if (dataRow is ITheoryDataRow theoryDataRow)
{
fixedItems = theoryDataRow.GetData();
}
else
{
fixedItems = (dataRow as object?[])!;
}
Debug.Assert(_testMethod is not null, "GetData expected to be called first.");
return new TheoryDataRow(BitAutoDataAttributeHelpers.GetData(_testMethod, _createFixture(), fixedItems).First());
}
}

View File

@@ -1,15 +1,11 @@
// FIXME: Update this file to be null safe and then delete the line below
#nullable disable
using AutoFixture;
using AutoFixture.Xunit2;
using AutoFixture;
using AutoFixture.Xunit3;
namespace Bit.Test.Common.AutoFixture.Attributes;
public class CustomAutoDataAttribute : AutoDataAttribute
{
public CustomAutoDataAttribute(params Type[] iCustomizationTypes) : this(iCustomizationTypes
.Select(t => (ICustomization)Activator.CreateInstance(t)).ToArray())
public CustomAutoDataAttribute(params Type[] iCustomizationTypes) : this(CreateCustomizations(iCustomizationTypes))
{ }
public CustomAutoDataAttribute(params ICustomization[] customizations) : base(() =>
@@ -22,4 +18,22 @@ public class CustomAutoDataAttribute : AutoDataAttribute
return fixture;
})
{ }
private static ICustomization[] CreateCustomizations(Type[] customizationTypes)
{
var customizations = new ICustomization[customizationTypes.Length];
for (var i = 0; i < customizationTypes.Length; i++)
{
var customizationType = customizationTypes[i];
var customizationObj = Activator.CreateInstance(customizationTypes[i]);
if (customizationObj is not ICustomization customization)
{
throw new InvalidOperationException($"{customizationType.FullName} should implement ICustomization");
}
customizations[i] = customization;
}
return customizations;
}
}

View File

@@ -2,7 +2,9 @@
#nullable disable
using System.Reflection;
using Xunit;
using Xunit.Sdk;
using Xunit.v3;
namespace Bit.Test.Common.AutoFixture.Attributes;
@@ -24,7 +26,7 @@ public class EnvironmentDataAttribute : DataAttribute
_environmentVariableNames = environmentVariableNames;
}
public override IEnumerable<object[]> GetData(MethodInfo testMethod)
public override ValueTask<IReadOnlyCollection<ITheoryDataRow>> GetData(MethodInfo testMethod, DisposalTracker disposalTracker)
{
var methodParameters = testMethod.GetParameters();
@@ -40,6 +42,7 @@ public class EnvironmentDataAttribute : DataAttribute
values[i] = Convert.ChangeType(Environment.GetEnvironmentVariable(_environmentVariableNames[i]), methodParameters[i].ParameterType);
}
return new[] { values };
return new([new TheoryDataRow(values)]);
}
public override bool SupportsDiscoveryEnumeration() => true;
}

View File

@@ -1,14 +1,13 @@
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Xunit;
using Xunit.Sdk;
namespace Bit.Test.Common.AutoFixture.Attributes;
public class InlineCustomAutoDataAttribute : CompositeDataAttribute
{
public InlineCustomAutoDataAttribute(Type[] iCustomizationTypes, params object[] values) : base(new DataAttribute[] {
public InlineCustomAutoDataAttribute(Type[] iCustomizationTypes, params object[] values) : base([
new InlineDataAttribute(values),
new CustomAutoDataAttribute(iCustomizationTypes)
})
])
{ }
}

View File

@@ -1,5 +1,7 @@
#nullable enable
using System.Reflection;
using Xunit;
using Xunit.Sdk;
namespace Bit.Test.Common.AutoFixture.Attributes;
@@ -66,23 +68,27 @@ public class RepeatingPatternBitAutoDataAttribute : BitAutoDataAttribute
_repeatingDataList = AllValues([first, second, third]);
}
public override IEnumerable<object?[]> GetData(MethodInfo testMethod)
public override ValueTask<IReadOnlyCollection<ITheoryDataRow>> GetData(MethodInfo testMethod, DisposalTracker disposalTracker)
{
var dataRows = new List<ITheoryDataRow>();
if (_repeatingDataList.Count == 0)
{
yield return base.GetData(testMethod).First();
dataRows.Add(new TheoryDataRow(base.GetDataCore(testMethod)));
return new(dataRows);
}
foreach (var repeatingData in _repeatingDataList)
{
var bitData = base.GetData(testMethod).First();
var bitData = base.GetDataCore(testMethod).First();
for (var i = 0; i < repeatingData.Length; i++)
{
bitData[i] = repeatingData[i];
}
yield return bitData;
dataRows.Add(new TheoryDataRow(bitData));
}
return new(dataRows);
}
private static List<object?[]> AllValues(object?[][] parameterToPatternValues)

View File

@@ -5,17 +5,14 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Diagnostics.Testing" Version="9.8.0" />
<PackageReference Include="Microsoft.Extensions.TimeProvider.Testing" Version="8.10.0" />
<PackageReference Include="NSubstitute" Version="$(NSubstituteVersion)" />
<PackageReference Include="xunit" Version="$(XUnitVersion)" />
<PackageReference Include="xunit.runner.visualstudio" Version="$(XUnitRunnerVisualStudioVersion)">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Include="AutoFixture.Xunit2" Version="$(AutoFixtureXUnit2Version)" />
<PackageReference Include="AutoFixture.Xunit3" Version="$(AutoFixtureXUnit3Version)" />
<PackageReference Include="AutoFixture.AutoNSubstitute" Version="$(AutoFixtureAutoNSubstituteVersion)" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNetTestSdkVersion)" />
<PackageReference Include="Kralizek.AutoFixture.Extensions.MockHttp" Version="2.1.0" />
<PackageReference Include="xunit.v3.assert" Version="3.0.1" />
<PackageReference Include="xunit.v3.extensibility.core" Version="3.0.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Core\Core.csproj" />

View File

@@ -4,7 +4,7 @@ using System.ComponentModel;
using System.Reflection;
using AutoFixture;
using AutoFixture.Kernel;
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Test.Common.AutoFixture.Attributes;
namespace Bit.Test.Common.Helpers;

View File

@@ -1,7 +1,7 @@
using Microsoft.Extensions.Logging;
using Xunit;
namespace Bit.Infrastructure.IntegrationTest;
namespace Bit.Test.Common;
public sealed class XUnitLoggerProvider : ILoggerProvider
{

View File

@@ -11,11 +11,9 @@
<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.4" />
<PackageReference Include="MartinCostello.Logging.XUnit" Version="0.5.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="MartinCostello.Logging.XUnit.v3" Version="0.6.0" />
<PackageReference Include="Rnwood.SmtpServer" Version="3.1.0-ci0868" />
<PackageReference Include="xunit" Version="2.5.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.3" />
<PackageReference Include="xunit.v3" Version="$(XUnitv3Version)" />
</ItemGroup>
<ItemGroup>

View File

@@ -8,7 +8,6 @@ using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Rnwood.SmtpServer;
using Rnwood.SmtpServer.Extensions.Auth;
using Xunit.Abstractions;
namespace Bit.Core.IntegrationTest;

View File

@@ -1,6 +1,6 @@
using System.Reflection;
using AutoFixture;
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Core.Context;
using Bit.Core.Enums;
using Bit.Core.Models.Data;

View File

@@ -1,6 +1,6 @@
using System.Reflection;
using AutoFixture;
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Core.AdminConsole.Enums;
using Bit.Core.AdminConsole.Models.Data.Organizations.Policies;
using Bit.Core.Enums;

View File

@@ -1,6 +1,6 @@
using System.Reflection;
using AutoFixture;
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Core.Entities;
using Bit.Core.Enums;

View File

@@ -1,6 +1,6 @@
using System.Reflection;
using AutoFixture;
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Core.AdminConsole.Enums;
using Bit.Core.Models.Data.Organizations.OrganizationUsers;

View File

@@ -1,6 +1,6 @@
using System.Reflection;
using AutoFixture;
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Core.AdminConsole.Enums;
using Bit.Core.AdminConsole.Models.Data.Organizations.Policies;
using Bit.Core.Enums;

View File

@@ -1,6 +1,6 @@
using System.Reflection;
using AutoFixture;
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Core.AdminConsole.Entities;
using Bit.Core.AdminConsole.Enums;

View File

@@ -1,6 +1,6 @@
using System.Reflection;
using AutoFixture;
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Core.AdminConsole.Enums;
using Bit.Core.AdminConsole.Models.Data;
using Bit.Core.AdminConsole.OrganizationFeatures.Policies.Models;

View File

@@ -53,7 +53,7 @@ public class BatchAuthRequestUpdateProcessorTests
var sut = new BatchAuthRequestUpdateProcessor(authRequests, updates, configuration);
Assert.NotEmpty(sut.Processors);
sut.Process(errorHandler);
Assert.NotEmpty(sut.Processors.Where(p => p.ProcessedAuthRequest != null));
Assert.Contains(sut.Processors, p => p.ProcessedAuthRequest != null);
}
[Theory]

View File

@@ -1,4 +1,4 @@
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Core.AdminConsole.Enums;
using Bit.Core.AdminConsole.Models.Data.Organizations.Policies;
using Bit.Core.AdminConsole.OrganizationFeatures.Policies.PolicyRequirements;

View File

@@ -1,4 +1,4 @@
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Core.Auth.Entities;
using Bit.Core.Auth.Models.Business.Tokenables;
using Bit.Core.Tokens;

View File

@@ -1,4 +1,4 @@
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Core.Auth.Models.Business.Tokenables;
using Bit.Core.Entities;
using Bit.Core.Tokens;

View File

@@ -1,4 +1,4 @@
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Core.Tokens;
namespace Bit.Core.Test.Auth.Models.Business.Tokenables;

View File

@@ -1,4 +1,4 @@
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Core.Auth.Models.Business.Tokenables;
using Bit.Core.Entities;
using Bit.Core.Tokens;

View File

@@ -1,4 +1,4 @@
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Core.AdminConsole.Entities;
using Bit.Core.Auth.Models.Business.Tokenables;
using Bit.Core.Tokens;

View File

@@ -13,7 +13,7 @@ public class DuoUniversalTokenServiceTests
[BitAutoData("", "ClientId", "ClientSecret")]
[BitAutoData("api-valid.duosecurity.com", "", "ClientSecret")]
[BitAutoData("api-valid.duosecurity.com", "ClientId", "")]
public async void ValidateDuoConfiguration_InvalidConfig_ReturnsFalse(
public async Task ValidateDuoConfiguration_InvalidConfig_ReturnsFalse(
string host, string clientId, string clientSecret, SutProvider<DuoUniversalTokenService> sutProvider)
{
// Arrange

View File

@@ -1,9 +1,12 @@
namespace Bit.Core.Test.AutoFixture.Attributes;
using System.Runtime.CompilerServices;
namespace Bit.Core.Test.AutoFixture.Attributes;
public sealed class CiSkippedTheory : Xunit.TheoryAttribute
{
private static bool IsGithubActions() => Environment.GetEnvironmentVariable("CI") != null;
public CiSkippedTheory()
public CiSkippedTheory([CallerFilePath] string? sourceFilePath = null, [CallerLineNumber] int sourceLineNumber = -1) : base(sourceFilePath, sourceLineNumber)
{
if (IsGithubActions())
{

View File

@@ -1,6 +1,6 @@
using System.Reflection;
using AutoFixture;
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Core.Models.Data;
namespace Bit.Core.Test.AutoFixture;

View File

@@ -2,7 +2,7 @@
using System.Text;
using AutoFixture;
using AutoFixture.Kernel;
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Core;
using Bit.Core.Test.Helpers.Factories;
using Microsoft.AspNetCore.DataProtection;

View File

@@ -8,15 +8,9 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Diagnostics.Testing" Version="9.3.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNetTestSdkVersion)" />
<PackageReference Include="NSubstitute" Version="$(NSubstituteVersion)" />
<PackageReference Include="xunit" Version="$(XUnitVersion)" />
<PackageReference Include="xunit.runner.visualstudio" Version="$(XUnitRunnerVisualStudioVersion)">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Include="AutoFixture.Xunit2" Version="$(AutoFixtureXUnit2Version)" />
<PackageReference Include="xunit.v3" Version="$(XUnitv3Version)" />
<PackageReference Include="AutoFixture.Xunit3" Version="$(AutoFixtureXUnit3Version)" />
<PackageReference Include="AutoFixture.AutoNSubstitute" Version="$(AutoFixtureAutoNSubstituteVersion)" />
<PackageReference Include="Kralizek.AutoFixture.Extensions.MockHttp" Version="2.1.0" />
</ItemGroup>

View File

@@ -25,7 +25,7 @@ public class NotificationHubProxyTests
[Theory]
[MemberData(nameof(ClientMethods))]
public async void CallsAllClients(Func<NotificationHubClientProxy, Task> proxyMethod, Func<INotificationHubClient, Task> clientMethod)
public async Task CallsAllClients(Func<NotificationHubClientProxy, Task> proxyMethod, Func<INotificationHubClient, Task> clientMethod)
{
var clients = _clients.ToArray();
var proxy = new NotificationHubClientProxy(clients);

View File

@@ -1,5 +1,5 @@
using System.Text.Json;
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Core.Utilities;
using Xunit;

View File

@@ -1,4 +1,4 @@
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Core.Tokens;
using Xunit;

View File

@@ -1,6 +1,6 @@
using System.Reflection;
using AutoFixture;
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Core.Tools.Entities;
using Bit.Test.Common.AutoFixture.Attributes;
@@ -37,4 +37,3 @@ internal class NewUserSendCustomizeAttribute : CustomizeAttribute
public override ICustomization GetCustomization(ParameterInfo parameterInfo)
=> new NewUserSend();
}

View File

@@ -18,7 +18,7 @@ public class CollectControllerTests : IAsyncLifetime
private string _ownerEmail = null!;
private Guid _ownerId;
public async Task InitializeAsync()
public async ValueTask InitializeAsync()
{
_factory = new EventsApplicationFactory();
_ownerEmail = $"integration-test+{Guid.NewGuid()}@bitwarden.com";
@@ -31,11 +31,11 @@ public class CollectControllerTests : IAsyncLifetime
_ownerId = user!.Id;
}
public Task DisposeAsync()
public ValueTask DisposeAsync()
{
_client?.Dispose();
_factory?.Dispose();
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
[Fact]

View File

@@ -8,12 +8,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNetTestSdkVersion)" />
<PackageReference Include="xunit" Version="$(XUnitVersion)" />
<PackageReference Include="xunit.runner.visualstudio" Version="$(XUnitRunnerVisualStudioVersion)">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="xunit.v3" Version="$(XUnitv3Version)" />
<PackageReference Include="coverlet.collector" Version="$(CoverletCollectorVersion)">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>

View File

@@ -1,4 +1,4 @@
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Core.AdminConsole.Entities;
using Bit.Core.Context;
using Bit.Core.Enums;

View File

@@ -8,15 +8,8 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNetTestSdkVersion)" />
<PackageReference Include="NSubstitute" Version="$(NSubstituteVersion)" />
<PackageReference Include="xunit" Version="$(XUnitVersion)" />
<PackageReference Include="xunit.runner.visualstudio"
Version="$(XUnitRunnerVisualStudioVersion)">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Include="AutoFixture.Xunit2" Version="$(AutoFixtureXUnit2Version)" />
<PackageReference Include="xunit.v3" Version="$(XUnitv3Version)" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Events\Events.csproj" />

View File

@@ -8,13 +8,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNetTestSdkVersion)" />
<PackageReference Include="xunit" Version="$(XUnitVersion)" />
<PackageReference Include="xunit.runner.visualstudio"
Version="$(XUnitRunnerVisualStudioVersion)">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Include="xunit.v3" Version="$(XUnitv3Version)" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\EventsProcessor\EventsProcessor.csproj" />

View File

@@ -9,13 +9,8 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNetTestSdkVersion)" />
<PackageReference Include="NSubstitute" Version="$(NSubstituteVersion)" />
<PackageReference Include="xunit" Version="$(XUnitVersion)" />
<PackageReference Include="xunit.runner.visualstudio" Version="$(XUnitRunnerVisualStudioVersion)">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="xunit.v3" Version="$(XUnitv3Version)" />
</ItemGroup>
<ItemGroup>

View File

@@ -11,14 +11,9 @@
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="8.0.10" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNetTestSdkVersion)" />
<PackageReference Include="NSubstitute" Version="$(NSubstituteVersion)" />
<PackageReference Include="xunit" Version="$(XUnitVersion)" />
<PackageReference Include="xunit.runner.visualstudio" Version="$(XUnitRunnerVisualStudioVersion)">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="AutoFixture.Xunit2" Version="$(AutoFixtureXUnit2Version)" />
<PackageReference Include="xunit.v3" Version="$(XUnitv3Version)" />
<PackageReference Include="AutoFixture.Xunit3" Version="$(AutoFixtureXUnit3Version)" />
</ItemGroup>
<ItemGroup>

View File

@@ -1,6 +1,6 @@
using System.Reflection;
using AutoFixture;
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Core.Entities;
using Bit.Core.Models.Data;
using Bit.Core.Utilities;

View File

@@ -1,7 +1,7 @@
using System.Reflection;
using System.Security.Claims;
using AutoFixture;
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Core.Auth.Identity;
using Duende.IdentityServer.Models;
using Duende.IdentityServer.Validation;

View File

@@ -1,6 +1,6 @@
using System.Reflection;
using AutoFixture;
using AutoFixture.Xunit2;
using AutoFixture.Xunit3;
using Bit.Identity.IdentityServer;
using Duende.IdentityServer.Validation;

View File

@@ -5,19 +5,13 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Diagnostics.Testing" Version="9.3.0" />
<PackageReference Include="coverlet.collector" Version="$(CoverletCollectorVersion)">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNetTestSdkVersion)" />
<PackageReference Include="NSubstitute" Version="$(NSubstituteVersion)" />
<PackageReference Include="xunit" Version="$(XUnitVersion)" />
<PackageReference Include="xunit.runner.visualstudio" Version="$(XUnitRunnerVisualStudioVersion)">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="AutoFixture.Xunit2" Version="$(AutoFixtureXUnit2Version)" />
<PackageReference Include="xunit.v3" Version="$(XUnitv3Version)" />
<PackageReference Include="AutoFixture.Xunit3" Version="$(AutoFixtureXUnit3Version)" />
</ItemGroup>
<ItemGroup>

View File

@@ -57,7 +57,7 @@ public class DeviceValidatorTests
}
[Theory, BitAutoData]
public async void GetKnownDeviceAsync_UserNull_ReturnsFalse(
public async Task GetKnownDeviceAsync_UserNull_ReturnsFalse(
Device device)
{
// Arrange
@@ -71,7 +71,7 @@ public class DeviceValidatorTests
}
[Theory, BitAutoData]
public async void GetKnownDeviceAsync_DeviceNull_ReturnsFalse(
public async Task GetKnownDeviceAsync_DeviceNull_ReturnsFalse(
User user)
{
// Arrange
@@ -85,7 +85,7 @@ public class DeviceValidatorTests
}
[Theory, BitAutoData]
public async void GetKnownDeviceAsync_DeviceNotInDatabase_ReturnsFalse(
public async Task GetKnownDeviceAsync_DeviceNotInDatabase_ReturnsFalse(
User user,
Device device)
{
@@ -100,7 +100,7 @@ public class DeviceValidatorTests
}
[Theory, BitAutoData]
public async void GetKnownDeviceAsync_UserAndDeviceValid_ReturnsTrue(
public async Task GetKnownDeviceAsync_UserAndDeviceValid_ReturnsTrue(
[AuthFixtures.ValidatedTokenRequest] ValidatedTokenRequest request,
User user,
Device device)
@@ -157,7 +157,7 @@ public class DeviceValidatorTests
}
[Theory, BitAutoData]
public async void ValidateRequestDeviceAsync_DeviceNull_ContextModified_ReturnsFalse(
public async Task ValidateRequestDeviceAsync_DeviceNull_ContextModified_ReturnsFalse(
CustomValidatorRequestContext context,
[AuthFixtures.ValidatedTokenRequest] ValidatedTokenRequest request)
{
@@ -180,7 +180,7 @@ public class DeviceValidatorTests
}
[Theory, BitAutoData]
public async void ValidateRequestDeviceAsync_RequestDeviceKnown_ContextDeviceModified_ReturnsTrue(
public async Task ValidateRequestDeviceAsync_RequestDeviceKnown_ContextDeviceModified_ReturnsTrue(
Device device,
CustomValidatorRequestContext context,
[AuthFixtures.ValidatedTokenRequest] ValidatedTokenRequest request)
@@ -205,7 +205,7 @@ public class DeviceValidatorTests
}
[Theory, BitAutoData]
public async void ValidateRequestDeviceAsync_ContextDeviceKnown_ContextDeviceModified_ReturnsTrue(
public async Task ValidateRequestDeviceAsync_ContextDeviceKnown_ContextDeviceModified_ReturnsTrue(
Device databaseDevice,
CustomValidatorRequestContext context,
[AuthFixtures.ValidatedTokenRequest] ValidatedTokenRequest request)
@@ -229,7 +229,7 @@ public class DeviceValidatorTests
}
[Theory, BitAutoData]
public async void ValidateRequestDeviceAsync_ExistingUserNewDeviceLogin_SendNewDeviceLoginEmail_ReturnsTrue(
public async Task ValidateRequestDeviceAsync_ExistingUserNewDeviceLogin_SendNewDeviceLoginEmail_ReturnsTrue(
CustomValidatorRequestContext context,
[AuthFixtures.ValidatedTokenRequest] ValidatedTokenRequest request)
{
@@ -253,7 +253,7 @@ public class DeviceValidatorTests
}
[Theory, BitAutoData]
public async void ValidateRequestDeviceAsync_NewUserNewDeviceLogin_DoesNotSendNewDeviceLoginEmail_ReturnsTrue(
public async Task ValidateRequestDeviceAsync_NewUserNewDeviceLogin_DoesNotSendNewDeviceLoginEmail_ReturnsTrue(
CustomValidatorRequestContext context,
[AuthFixtures.ValidatedTokenRequest] ValidatedTokenRequest request)
{
@@ -277,7 +277,7 @@ public class DeviceValidatorTests
}
[Theory, BitAutoData]
public async void ValidateRequestDeviceAsynce_DisableNewDeviceLoginEmailTrue_DoesNotSendNewDeviceEmail_ReturnsTrue(
public async Task ValidateRequestDeviceAsynce_DisableNewDeviceLoginEmailTrue_DoesNotSendNewDeviceEmail_ReturnsTrue(
CustomValidatorRequestContext context,
[AuthFixtures.ValidatedTokenRequest] ValidatedTokenRequest request)
{
@@ -303,7 +303,7 @@ public class DeviceValidatorTests
[BitAutoData("refresh_token")]
[BitAutoData("authorization_code")]
[BitAutoData("client_credentials")]
public async void ValidateRequestDeviceAsync_GrantTypeNotPassword_SavesDevice_ReturnsTrue(
public async Task ValidateRequestDeviceAsync_GrantTypeNotPassword_SavesDevice_ReturnsTrue(
string grantType,
CustomValidatorRequestContext context,
[AuthFixtures.ValidatedTokenRequest] ValidatedTokenRequest request)
@@ -331,7 +331,7 @@ public class DeviceValidatorTests
[BitAutoData(true, true)]
[BitAutoData(true, false)]
public async void ValidateRequestDeviceAsync_IsAuthRequest_UnknownDevice_Errors(
public async Task ValidateRequestDeviceAsync_IsAuthRequest_UnknownDevice_Errors(
bool twoFactoRequired, bool ssoRequired,
CustomValidatorRequestContext context,
[AuthFixtures.ValidatedTokenRequest] ValidatedTokenRequest request)
@@ -368,7 +368,7 @@ public class DeviceValidatorTests
[BitAutoData(true, false)]
[BitAutoData(true, true)]
[BitAutoData(true, false)]
public async void ValidateRequestDeviceAsync_IsAuthRequest_NewDeviceOtp_Errors(
public async Task ValidateRequestDeviceAsync_IsAuthRequest_NewDeviceOtp_Errors(
bool twoFactoRequired, bool ssoRequired,
CustomValidatorRequestContext context,
[AuthFixtures.ValidatedTokenRequest] ValidatedTokenRequest request)
@@ -405,7 +405,7 @@ public class DeviceValidatorTests
}
[Theory, BitAutoData]
public async void ValidateRequestDeviceAsync_TwoFactorRequired_SavesDevice_ReturnsTrue(
public async Task ValidateRequestDeviceAsync_TwoFactorRequired_SavesDevice_ReturnsTrue(
CustomValidatorRequestContext context,
[AuthFixtures.ValidatedTokenRequest] ValidatedTokenRequest request)
{
@@ -427,7 +427,7 @@ public class DeviceValidatorTests
}
[Theory, BitAutoData]
public async void ValidateRequestDeviceAsync_SsoRequired_SavesDevice_ReturnsTrue(
public async Task ValidateRequestDeviceAsync_SsoRequired_SavesDevice_ReturnsTrue(
CustomValidatorRequestContext context,
[AuthFixtures.ValidatedTokenRequest] ValidatedTokenRequest request)
{
@@ -449,7 +449,7 @@ public class DeviceValidatorTests
}
[Theory, BitAutoData]
public async void HandleNewDeviceVerificationAsync_UserNull_ContextModified_ReturnsInvalidUser(
public async Task HandleNewDeviceVerificationAsync_UserNull_ContextModified_ReturnsInvalidUser(
CustomValidatorRequestContext context,
[AuthFixtures.ValidatedTokenRequest] ValidatedTokenRequest request)
{
@@ -474,7 +474,7 @@ public class DeviceValidatorTests
}
[Theory, BitAutoData]
public async void HandleNewDeviceVerificationAsync_VerifyDevicesFalse_ReturnsSuccess(
public async Task HandleNewDeviceVerificationAsync_VerifyDevicesFalse_ReturnsSuccess(
CustomValidatorRequestContext context,
[AuthFixtures.ValidatedTokenRequest] ValidatedTokenRequest request)
{
@@ -497,7 +497,7 @@ public class DeviceValidatorTests
}
[Theory, BitAutoData]
public async void HandleNewDeviceVerificationAsync_NewlyCreated_ReturnsSuccess(
public async Task HandleNewDeviceVerificationAsync_NewlyCreated_ReturnsSuccess(
CustomValidatorRequestContext context,
[AuthFixtures.ValidatedTokenRequest] ValidatedTokenRequest request)
{
@@ -521,7 +521,7 @@ public class DeviceValidatorTests
}
[Theory, BitAutoData]
public async void HandleNewDeviceVerificationAsync_UserHasCacheValue_ReturnsSuccess(
public async Task HandleNewDeviceVerificationAsync_UserHasCacheValue_ReturnsSuccess(
CustomValidatorRequestContext context,
[AuthFixtures.ValidatedTokenRequest] ValidatedTokenRequest request)
{
@@ -544,7 +544,7 @@ public class DeviceValidatorTests
}
[Theory, BitAutoData]
public async void HandleNewDeviceVerificationAsync_NewDeviceOtpValid_ReturnsSuccess(
public async Task HandleNewDeviceVerificationAsync_NewDeviceOtpValid_ReturnsSuccess(
CustomValidatorRequestContext context,
[AuthFixtures.ValidatedTokenRequest] ValidatedTokenRequest request)
{
@@ -574,7 +574,7 @@ public class DeviceValidatorTests
[Theory]
[BitAutoData("")]
[BitAutoData("123456")]
public async void HandleNewDeviceVerificationAsync_NewDeviceOtpInvalid_ReturnsInvalidNewDeviceOtp(
public async Task HandleNewDeviceVerificationAsync_NewDeviceOtpInvalid_ReturnsInvalidNewDeviceOtp(
string newDeviceOtp,
CustomValidatorRequestContext context,
[AuthFixtures.ValidatedTokenRequest] ValidatedTokenRequest request)
@@ -603,7 +603,7 @@ public class DeviceValidatorTests
}
[Theory, BitAutoData]
public async void HandleNewDeviceVerificationAsync_UserHasNoDevices_ReturnsSuccess(
public async Task HandleNewDeviceVerificationAsync_UserHasNoDevices_ReturnsSuccess(
CustomValidatorRequestContext context,
[AuthFixtures.ValidatedTokenRequest] ValidatedTokenRequest request)
{
@@ -628,7 +628,7 @@ public class DeviceValidatorTests
}
[Theory, BitAutoData]
public async void HandleNewDeviceVerificationAsync_NewDeviceOtpEmpty_UserHasDevices_ReturnsNewDeviceVerificationRequired(
public async Task HandleNewDeviceVerificationAsync_NewDeviceOtpEmpty_UserHasDevices_ReturnsNewDeviceVerificationRequired(
CustomValidatorRequestContext context,
[AuthFixtures.ValidatedTokenRequest] ValidatedTokenRequest request)
{

View File

@@ -63,7 +63,7 @@ public class TwoFactorAuthenticationValidatorTests
[Theory]
[BitAutoData("password")]
[BitAutoData("authorization_code")]
public async void RequiresTwoFactorAsync_IndividualOnly_Required_ReturnTrue(
public async Task RequiresTwoFactorAsync_IndividualOnly_Required_ReturnTrue(
string grantType,
[AuthFixtures.ValidatedTokenRequest] ValidatedTokenRequest request,
User user)
@@ -87,7 +87,7 @@ public class TwoFactorAuthenticationValidatorTests
[Theory]
[BitAutoData("client_credentials")]
[BitAutoData("webauthn")]
public async void RequiresTwoFactorAsync_NotRequired_ReturnFalse(
public async Task RequiresTwoFactorAsync_NotRequired_ReturnFalse(
string grantType,
[AuthFixtures.ValidatedTokenRequest] ValidatedTokenRequest request,
User user)
@@ -106,7 +106,7 @@ public class TwoFactorAuthenticationValidatorTests
[Theory]
[BitAutoData("password")]
[BitAutoData("authorization_code")]
public async void RequiresTwoFactorAsync_IndividualFalse_OrganizationRequired_ReturnTrue(
public async Task RequiresTwoFactorAsync_IndividualFalse_OrganizationRequired_ReturnTrue(
string grantType,
[AuthFixtures.ValidatedTokenRequest] ValidatedTokenRequest request,
User user,
@@ -154,7 +154,7 @@ public class TwoFactorAuthenticationValidatorTests
[Theory]
[BitAutoData]
public async void BuildTwoFactorResultAsync_NoProviders_ReturnsNull(
public async Task BuildTwoFactorResultAsync_NoProviders_ReturnsNull(
User user,
Organization organization)
{
@@ -174,7 +174,7 @@ public class TwoFactorAuthenticationValidatorTests
[Theory]
[BitAutoData]
public async void BuildTwoFactorResultAsync_OrganizationProviders_NotEnabled_ReturnsNull(
public async Task BuildTwoFactorResultAsync_OrganizationProviders_NotEnabled_ReturnsNull(
User user,
Organization organization)
{
@@ -194,7 +194,7 @@ public class TwoFactorAuthenticationValidatorTests
[Theory]
[BitAutoData]
public async void BuildTwoFactorResultAsync_OrganizationProviders_ReturnsNotNull(
public async Task BuildTwoFactorResultAsync_OrganizationProviders_ReturnsNotNull(
User user,
Organization organization)
{
@@ -217,7 +217,7 @@ public class TwoFactorAuthenticationValidatorTests
[Theory]
[BitAutoData]
public async void BuildTwoFactorResultAsync_IndividualProviders_NotEnabled_ReturnsNull(
public async Task BuildTwoFactorResultAsync_IndividualProviders_NotEnabled_ReturnsNull(
User user)
{
// Arrange
@@ -232,7 +232,7 @@ public class TwoFactorAuthenticationValidatorTests
[Theory]
[BitAutoData]
public async void BuildTwoFactorResultAsync_IndividualProviders_ReturnsNotNull(
public async Task BuildTwoFactorResultAsync_IndividualProviders_ReturnsNotNull(
User user)
{
// Arrange
@@ -252,7 +252,7 @@ public class TwoFactorAuthenticationValidatorTests
[Theory]
[BitAutoData(TwoFactorProviderType.Email)]
public async void BuildTwoFactorResultAsync_SetsSsoToken_ReturnsNotNull(
public async Task BuildTwoFactorResultAsync_SetsSsoToken_ReturnsNotNull(
TwoFactorProviderType providerType,
User user)
{
@@ -284,7 +284,7 @@ public class TwoFactorAuthenticationValidatorTests
[BitAutoData(TwoFactorProviderType.Email)]
[BitAutoData(TwoFactorProviderType.YubiKey)]
[BitAutoData(TwoFactorProviderType.OrganizationDuo)]
public async void BuildTwoFactorResultAsync_IndividualProvider_ReturnMatchesType(
public async Task BuildTwoFactorResultAsync_IndividualProvider_ReturnMatchesType(
TwoFactorProviderType providerType,
User user)
{
@@ -313,7 +313,7 @@ public class TwoFactorAuthenticationValidatorTests
[Theory]
[BitAutoData]
public async void VerifyTwoFactorAsync_Individual_TypeNull_ReturnsFalse(
public async Task VerifyTwoFactorAsync_Individual_TypeNull_ReturnsFalse(
User user,
string token)
{
@@ -330,7 +330,7 @@ public class TwoFactorAuthenticationValidatorTests
[Theory]
[BitAutoData]
public async void VerifyTwoFactorAsync_Individual_NotEnabled_ReturnsFalse(
public async Task VerifyTwoFactorAsync_Individual_NotEnabled_ReturnsFalse(
User user,
string token)
{
@@ -348,7 +348,7 @@ public class TwoFactorAuthenticationValidatorTests
[Theory]
[BitAutoData]
public async void VerifyTwoFactorAsync_Organization_NotEnabled_ReturnsFalse(
public async Task VerifyTwoFactorAsync_Organization_NotEnabled_ReturnsFalse(
User user,
string token)
{
@@ -369,7 +369,7 @@ public class TwoFactorAuthenticationValidatorTests
[BitAutoData(TwoFactorProviderType.Email)]
[BitAutoData(TwoFactorProviderType.YubiKey)]
[BitAutoData(TwoFactorProviderType.Remember)]
public async void VerifyTwoFactorAsync_Individual_ValidToken_ReturnsTrue(
public async Task VerifyTwoFactorAsync_Individual_ValidToken_ReturnsTrue(
TwoFactorProviderType providerType,
User user,
string token)
@@ -392,7 +392,7 @@ public class TwoFactorAuthenticationValidatorTests
[BitAutoData(TwoFactorProviderType.Email)]
[BitAutoData(TwoFactorProviderType.YubiKey)]
[BitAutoData(TwoFactorProviderType.Remember)]
public async void VerifyTwoFactorAsync_Individual_InvalidToken_ReturnsFalse(
public async Task VerifyTwoFactorAsync_Individual_InvalidToken_ReturnsFalse(
TwoFactorProviderType providerType,
User user,
string token)
@@ -411,7 +411,7 @@ public class TwoFactorAuthenticationValidatorTests
[Theory]
[BitAutoData(TwoFactorProviderType.OrganizationDuo)]
public async void VerifyTwoFactorAsync_Organization_ValidToken_ReturnsTrue(
public async Task VerifyTwoFactorAsync_Organization_ValidToken_ReturnsTrue(
TwoFactorProviderType providerType,
User user,
Organization organization,
@@ -438,7 +438,7 @@ public class TwoFactorAuthenticationValidatorTests
[Theory]
[BitAutoData(TwoFactorProviderType.RecoveryCode)]
public async void VerifyTwoFactorAsync_RecoveryCode_ValidToken_ReturnsTrue(
public async Task VerifyTwoFactorAsync_RecoveryCode_ValidToken_ReturnsTrue(
TwoFactorProviderType providerType,
User user,
Organization organization)
@@ -458,7 +458,7 @@ public class TwoFactorAuthenticationValidatorTests
[Theory]
[BitAutoData(TwoFactorProviderType.RecoveryCode)]
public async void VerifyTwoFactorAsync_RecoveryCode_InvalidToken_ReturnsFalse(
public async Task VerifyTwoFactorAsync_RecoveryCode_InvalidToken_ReturnsFalse(
TwoFactorProviderType providerType,
User user,
Organization organization)

View File

@@ -8,12 +8,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.0.1">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="xunit.v3" Version="$(XUnitv3Version)" />
<PackageReference Include="coverlet.collector" Version="6.0.4">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>

View File

@@ -7,14 +7,9 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNetTestSdkVersion)" />
<PackageReference Include="NSubstitute" Version="$(NSubstituteVersion)" />
<PackageReference Include="xunit" Version="$(XUnitVersion)" />
<PackageReference Include="xunit.runner.visualstudio" Version="$(XUnitRunnerVisualStudioVersion)">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Include="AutoFixture.Xunit2" Version="$(AutoFixtureXUnit2Version)" />
<PackageReference Include="xunit.v3" Version="$(XUnitv3Version)" />
<PackageReference Include="AutoFixture.Xunit3" Version="$(AutoFixtureXUnit3Version)" />
<PackageReference Include="AutoFixture.AutoNSubstitute" Version="$(AutoFixtureAutoNSubstituteVersion)" />
</ItemGroup>

View File

@@ -5,6 +5,7 @@ using Bit.Infrastructure.Dapper;
using Bit.Infrastructure.EntityFramework;
using Bit.Infrastructure.EntityFramework.Repositories;
using Bit.Infrastructure.IntegrationTest.Services;
using Bit.Test.Common;
using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
@@ -183,7 +184,7 @@ public class DatabaseDataAttribute : DataAttribute
public override bool SupportsDiscoveryEnumeration()
{
return true;
return false;
}
private class ServiceBasedTheoryDataRow : TheoryDataRowBase

View File

@@ -11,12 +11,7 @@
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.2" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.TimeProvider.Testing" Version="8.10.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNetTestSdkVersion)" />
<PackageReference Include="xunit.v3" Version="3.0.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.4">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="$(CoverletCollectorVersion)">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
@@ -30,6 +25,7 @@
<ProjectReference Include="..\..\util\MySqlMigrations\MySqlMigrations.csproj" />
<ProjectReference Include="..\..\util\PostgresMigrations\PostgresMigrations.csproj" />
<ProjectReference Include="..\..\util\SqliteMigrations\SqliteMigrations.csproj" />
<ProjectReference Include="..\Common\Common.csproj" />
</ItemGroup>
</Project>

View File

@@ -8,13 +8,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNetTestSdkVersion)" />
<PackageReference Include="xunit" Version="$(XUnitVersion)" />
<PackageReference Include="xunit.runner.visualstudio"
Version="$(XUnitRunnerVisualStudioVersion)">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Include="xunit.v3" Version="$(XUnitv3Version)" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Notifications\Notifications.csproj" />

View File

@@ -8,14 +8,8 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNetTestSdkVersion)" />
<PackageReference Include="NSubstitute" Version="$(NSubstituteVersion)" />
<PackageReference Include="xunit" Version="$(XUnitVersion)" />
<PackageReference Include="xunit.runner.visualstudio"
Version="$(XUnitRunnerVisualStudioVersion)">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Include="xunit.v3" Version="$(XUnitv3Version)" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\SharedWeb\SharedWeb.csproj" />