public async Task Building_WithoutAdditionalCalls_UsesDefaultValues()
        {
            // Arrange
            var sut = _entityBuilderFactory.Create <AddressBuilder>();

            // Act
            var actualAddress = await sut.BuildAsync();

            // Assert
            Assert.AreEqual(AddressBuilder.DefaultCity, actualAddress.City);
            Assert.AreEqual(AddressBuilder.DefaultZip, actualAddress.Zip);
        }
        public async Task Building_CompleteGraph_AndSaving_PersistsGraph()
        {
            // Arrange
            var individualBuilder = _entityBuilderFactory.Create <IndividualBuilder>();

            // Act
            var createdIndividual = await individualBuilder
                                    .WithAddress(
                config =>
            {
                config.WithCity();
                config.WithCity();
            })
                                    .WithAddress()
                                    .BuildAsync(true);

            // Assert
            await using var dbContext = _dbContextFactory.Create();
            var actualIndividual = await dbContext.Set <Individual>()
                                   .Include(f => f.Addresses)
                                   .ThenInclude(f => f.Streets)
                                   .SingleAsync(f => f.Id == createdIndividual.Id);

            Assert.AreEqual(IndividualBuilder.DefaultBirthdate, actualIndividual.Birthdate);
            Assert.AreEqual(IndividualBuilder.DefaultFirstName, actualIndividual.FirstName);
            Assert.AreEqual(IndividualBuilder.DefaultLastName, actualIndividual.LastName);

            var addresses = actualIndividual.Addresses;

            Assert.AreEqual(2, addresses.Count);
            Assert.IsTrue(addresses.All(adr => adr.Zip == AddressBuilder.DefaultZip));
            Assert.IsTrue(addresses.All(adr => adr.City == AddressBuilder.DefaultCity));

            var firstAddress = addresses.First();

            Assert.AreEqual(2, firstAddress.Streets.Count);
            Assert.IsTrue(firstAddress.Streets.All(str => str.StreetName == StreetBuilder.DefaultStreetName));
            Assert.IsTrue(firstAddress.Streets.All(str => str.StreetNumber == StreetBuilder.DefaultStreetNumber));
        }