SwissWebApplicationFactory 0.1.0

dotnet add package SwissWebApplicationFactory --version 0.1.0
                    
NuGet\Install-Package SwissWebApplicationFactory -Version 0.1.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SwissWebApplicationFactory" Version="0.1.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SwissWebApplicationFactory" Version="0.1.0" />
                    
Directory.Packages.props
<PackageReference Include="SwissWebApplicationFactory" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add SwissWebApplicationFactory --version 0.1.0
                    
#r "nuget: SwissWebApplicationFactory, 0.1.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package SwissWebApplicationFactory@0.1.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=SwissWebApplicationFactory&version=0.1.0
                    
Install as a Cake Addin
#tool nuget:?package=SwissWebApplicationFactory&version=0.1.0
                    
Install as a Cake Tool

SwissWebApplicationFactory is a library that extends the capabilities of WebApplicationFactory.

📥 Installation

You can install SwissWebApplicationFactory via NuGet:

Install-Package SwissWebApplicationFactory

Or through the .NET Core command-line interface:

dotnet add package SwissWebApplicationFactory

🔧 Possibilities

Mock

SwissWebApplicationFactory provides the functionality to replace services using mock objects as follows:

private readonly IDateTimeProvider DateTimeProviderMock;
private readonly AbstractExternalService AbstractServiceMock;

SwissWebApplicationFactory.MockServices(GetMocks());

public IEnumerable<object> GetMocks()
{
    yield return DateTimeProviderMock;
    yield return AbstractServiceMock;
}

Removing services

Specify in the appsettings.json file which services we want to exclude during testing:

{
  "RemoveServicesOption": {
    "Pairs": {
      "ITracer": "First",
      "ILogger": "All",
    }
  }
}
SwissWebApplicationFactory.RemoveServicesByOption()

or through an attribute if there is access to the class or interface:

[Remove(RemoveOrder.First)]
public class Tracer : ITracer
[Remove(RemoveOrder.All)]
public class Logger : ILogger
SwissWebApplicationFactory.RemoveServicesByAttribute();

Database

To replace an existing database, you can use the following method:

private readonly SqliteConnection memorySqliteConnection;

SwissWebApplicationFactory.AddDbContext<TestableDbContext, Program>(builder => builder.UseSqlite(memorySqliteConnection));

Or

private readonly SqliteConnection memorySqliteConnection;

SwissWebApplicationFactory.AddDbContextPool<TestableDbContext, Program>(builder => builder.UseSqlite(memorySqliteConnection));

Entities can be added in the following way:

await SwissWebApplicationFactory.AddEntitiesAsync<TestableDbContext, Program, Item>(items);

Or

await SwissWebApplicationFactory.ManipulateDbContextAsync<TestableDbContext, Program>(static async db =>
{
    (await db.Items.SingleAsync()).Value = expected;
});

Authentication

To replace authentication, you call the following methods:

SwissWebApplicationFactory.MockAuth().SetFakeBearerAuthenticationHeader();

If you need to configure permissions for a user:

SwissWebApplicationFactory.ClaimsConfig.Roles = new[]{ "Admin" };
SwissWebApplicationFactory.ClaimsConfig.Name = "Admin";

📝 License

The MIT License (MIT)

Made with love by Kataane 💜

Product Compatible and additional computed target framework versions.
.NET net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.0 238 9/24/2023