Intent.AspNetCore.IntegrationTesting.CRUD
This module provides Integration Test implementation for Services which are CRUD orientated.
What's in this module?
This module consumes your Services both ServiceModel and CQRS, in the Service Designer and generates an Integration test for each Endpoint.
For a service to be eligible is must implement at least:
- Create - returning either the
Primary Keyor aDTOwith a mappedPrimary Key. - GetById - returning an
EntitybasedDTOtaking a single parameter of theEntitiys primary key.
Note on Cosmos DB Integration Testing
The CosmosDB Emulator for Linux does not run consistently using MS-hosted agents/runners (Azure DevOps or GitHub). Here (Azure/azure-cosmos-db-emulator-docker#45.)
Cosmos related tests have the following Trait applied [Trait("Requirement", "CosmosDB")], you can ignore these in your CI/CD pipeline as follows:-
dotnet test --filter Category!=CosmosDB
Sample Tests
[Fact]
public async Task CreateCustomer_ShouldCreateCustomer()
{
//Arrange
var client = new CustomersServiceHttpClient(CreateClient());
var dataFactory = new TestDataFactory(WebAppFactory);
await dataFactory.CreateCustomerDependencies();
var command = dataFactory.CreateCommand<CustomerCreateDto>();
//Act
var customerId = await client.CreateCustomerAsync(command);
//Assert
var customer = await client.FindCustomerByIdAsync(customerId);
Assert.NotNull(customer);
}
[Fact]
public async Task FindCustomerById_ShouldFindCustomerById()
{
//Arrange
var client = new CustomersServiceHttpClient(CreateClient());
var dataFactory = new TestDataFactory(WebAppFactory);
var customerId = await dataFactory.CreateCustomer();
//Act
var customer = await client.FindCustomerByIdAsync(customerId);
//Assert
Assert.NotNull(customer);
}
[Fact]
public async Task UpdateCustomer_ShouldUpdateCustomer()
{
//Arrange
var client = new CustomersServiceHttpClient(CreateClient());
var dataFactory = new TestDataFactory(WebAppFactory);
var customerId = await dataFactory.CreateCustomer();
var command = dataFactory.CreateCommand<CustomerUpdateDto>();
command.Id = customerId;
//Act
await client.UpdateCustomerAsync(customerId, command);
//Assert
var customer = await client.FindCustomerByIdAsync(customerId);
Assert.NotNull(customer);
Assert.Equal(command.Name, customer.Name);
}
[Fact]
public async Task DeleteCustomer_ShouldDeleteCustomer()
{
//Arrange
var client = new CustomersServiceHttpClient(CreateClient());
var dataFactory = new TestDataFactory(WebAppFactory);
var customerId = await dataFactory.CreateCustomer();
//Act
await client.DeleteCustomerAsync(customerId);
//Assert
var exception = await Assert.ThrowsAsync<HttpClientRequestException>(() => client.FindCustomerByIdAsync(customerId));
Assert.Equal(HttpStatusCode.NotFound, exception.StatusCode);
}