EDennis.AspNetCore.Base 1.3.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package EDennis.AspNetCore.Base --version 1.3.0
NuGet\Install-Package EDennis.AspNetCore.Base -Version 1.3.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="EDennis.AspNetCore.Base" Version="1.3.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add EDennis.AspNetCore.Base --version 1.3.0
#r "nuget: EDennis.AspNetCore.Base, 1.3.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.
// Install EDennis.AspNetCore.Base as a Cake Addin
#addin nuget:?package=EDennis.AspNetCore.Base&version=1.3.0

// Install EDennis.AspNetCore.Base as a Cake Tool
#tool nuget:?package=EDennis.AspNetCore.Base&version=1.3.0

EDennis.AspNetCore.Base

A library with many test/sample projects, used as a basis for creating testable three-tier applications

Motivation

ASP.NET Core MVC and Entity Framework Core collectively provide a great framework for development of enterprise applications. That said, developing integration-testable three-tier applications with these technologies can be a little challenging at times. It is relatively easy to create a web application on one server that communicates with web API on another server, which in turn communicates with a database via Entity Framework; however, to set up proper, repeatable integration tests -- those that completely reset the database (whether in-memory or real) after each test -- is not straightforward, especially when dealing with three-tier solutions. Furthermore, to completely reset the database after spot testing via Swagger UI requires some extra set-up work. Collectively, these challenges motivated development of a library to facilitate testable three-tier application development.

Features

The current library has a number of features that assist with application development:

  • An action filter that looks for special header values in HTTP requests in order to initialize or reset a test connection or in-memory database. Originally, this action filter fully supported both real databases and in-memory databases; however, only the in-memory databases proved to be reliable with parallel unit/integration testing. (A testing-transaction alternative to in-memory databases is still available, but it should be used only in situations where database locks are not likely -- e.g., spot testing using Swagger.)
  • An ApiLauncher class that uses appsettings.json to identify, start, and stop one or more web applications. This utility class makes it easier to start and manage a set of micro-services during both automated integration testing and spot-testing (e.g., using Swagger).
  • A base repository class that simplifies basic Entity Framework operations but still allows querying via Linq expressions
  • A pair of design-time factory classes that allow code-first migrations without default constructors in the DbContext class. (One of these classes, in combination with the EDennis.MigrationsExtensions NuGet library, supports auto-creation of temporal tables.)
  • a MaxPlusOneValueGenerator class that mostly emulates a sequence or identity during testing
  • SQL scripts that identify and reset all identity values and sequences in a SQL Server database
  • Extensions to IServiceCollection that use Reflection to simplify the setup of Dependency Injection for
    • Typed HttpClients
    • DbContextPools
    • Repository classes
  • Extensions to HttpClient that simplify the setup of
    • Basic Http operations such as posting, putting, deleting, or getting any object of type T
    • Consecutive Http operations such as posting and then getting an object of type T -- making it easier to use HttpClient for testing.
  • Two types of Controllers
    • RepoController, which is designed to work with one or more repository classes backed by Entity Framework
    • ProxyController, which is designed to work with one or more API classes backed by HttpClient instances
  • Default security for users and clients
    • AutologinMiddleware, which allows configuration of users that can be automatically logged on during different launch configurations
    • MockClientAuthorizationMiddleware, which allows configuration of OAuth clients for which access tokens are automatically generated during different launch configurations (especially helpful if you are spot-testing with Swagger)
    • AddDefaultAuthorizationPolicyConvention, which automatically adds Authorize policies to controllers and action methods (obviating the need for the Authorize attribute)
    • AddClientAuthenticationAndAuthorizationWithDefaultPolicies, which is an IServiceCollection extension method that uses reflection to automatically assign default, scope-defined policies to controllers and action methods.

Constraints

  • The ApiLauncher will fail if the target port for an API is unavailable.
  • In order for the ApiLauncher to work appropriately with spot-testing a master Api (one that calls other APIs), the master Api must be launched using the project profile (with a port in an acceptable range), rather than using IIS Express. To reset sequences/identities at the end of a spot-testing session, be sure to suspend the application by pressing CTRL-C in the command window, rather than by closing the browser window/tab. (Upon restarting spot-testing, identities and sequences will be reset, just in case.)
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  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. 
.NET Core netcoreapp2.2 is compatible.  netcoreapp3.0 was computed.  netcoreapp3.1 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
3.1.2-alpha 396 3/12/2020
3.1.1-alpha 402 2/24/2020
3.1.0-alpha 394 2/24/2020
2.8.0 748 10/17/2019
2.7.9 648 10/16/2019
2.7.8 625 10/15/2019
2.7.7 598 10/15/2019
2.7.6 603 10/14/2019
2.7.5 676 9/25/2019
2.7.4 618 9/19/2019
2.7.3 608 9/13/2019
2.7.1 641 9/12/2019
2.7.0 672 9/12/2019
2.6.2 590 9/3/2019
2.6.1 619 9/3/2019
2.6.0 630 8/30/2019
2.5.2 637 7/23/2019
2.5.1 629 7/15/2019
2.5.0 682 7/10/2019
2.4.8 641 6/19/2019
2.4.7 624 6/18/2019
2.4.6 641 6/18/2019
2.4.5 627 6/13/2019
2.4.4 664 6/5/2019
2.4.2 676 5/21/2019
2.3.0 658 5/8/2019
2.2.9 681 5/8/2019
2.2.8 611 5/7/2019
2.2.7 662 5/3/2019
2.2.6 673 5/3/2019
2.2.5 757 5/2/2019
2.2.4 739 5/2/2019
2.2.3 693 4/29/2019
2.2.2 686 4/24/2019
2.2.1 725 4/23/2019
2.2.0 738 4/22/2019
2.1.3 709 4/14/2019
2.1.2 672 4/6/2019
2.1.1 1,257 4/5/2019
2.1.0 1,240 4/3/2019
2.0.0 1,454 4/2/2019
1.4.5 1,219 3/29/2019
1.4.4 1,422 3/28/2019
1.4.3 1,466 3/28/2019
1.4.2 1,311 3/27/2019
1.4.1 1,455 3/26/2019
1.4.0 1,431 3/23/2019
1.3.7 1,241 3/19/2019
1.3.6 1,441 3/18/2019
1.3.5 1,435 3/12/2019
1.3.4 1,414 3/9/2019
1.3.3 1,371 3/8/2019
1.3.1 920 1/18/2019
1.3.0 872 1/18/2019
1.2.0 853 1/16/2019
1.1.0 794 12/28/2018
1.0.0 850 12/26/2018

Reworked ApiLauncher to use dotnet command-line and to be called from Program class.