diff --git a/.cursor/rules/csharp/testing.mdc b/.cursor/rules/csharp/testing.mdc
index 626a5413..d04cc763 100644
--- a/.cursor/rules/csharp/testing.mdc
+++ b/.cursor/rules/csharp/testing.mdc
@@ -18,6 +18,24 @@ General:
- Follow consistent patterns
- Maintain high code coverage
- Configure proper CI/CD test execution
+
+ Coverage Requirements:
+ - ALL code MUST have corresponding unit tests
+ - Minimum code coverage threshold: 80% (line, branch, and method coverage)
+ - Coverage is enforced for all projects EXCEPT src/buildingblocks/**
+ - Every new feature, bug fix, or code change MUST include tests
+ - Tests must verify both happy paths and error scenarios
+ - Public APIs must have comprehensive test coverage
+ - Critical business logic must have near 100% coverage
+
+ Enforcement:
+ - CI/CD pipelines must fail if coverage drops below 80%
+ - Pull requests should include coverage reports
+ - Coverage exclusions are only allowed for:
+ - Code under src/buildingblocks/** (temporary exclusion)
+ - Auto-generated code
+ - Program.cs/Startup.cs boilerplate
+ - No coverage exclusion attributes should be used without justification
Project Setup:
- Configure test projects:
@@ -29,6 +47,10 @@ Project Setup:
| Parser: | +MultiReport (8x Cobertura) | +
|---|---|
| Assemblies: | +14 | +
| Classes: | +286 | +
| Files: | +244 | +
| Coverage date: | +10-02-2026 - 23:52:31 - 10-02-2026 - 23:53:56 | +
| Covered lines: | +2628 | +
|---|---|
| Uncovered lines: | +14036 | +
| Coverable lines: | +16664 | +
| Total lines: | +31408 | +
| Line coverage: | +15.7% | +
| Covered branches: | +515 | +
|---|---|
| Total branches: | +3398 | +
| Branch coverage: | +15.1% | +
Feature is only available for sponsors
+Upgrade to PRO version +| Line coverage | Branch coverage | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Name | Covered | Uncovered | Coverable | Total | Percentage | Covered | Total | Percentage | ||||||
| Catalog.Api | 0 | 2048 | 2048 | 8506 | 0% | 0 | 432 | 0% | ||||||
| Catalog.Api.Endpoints.Admin.Migrations.V1.TriggerMigrationEndpoint | 0 | 54 | 54 | 160 | 0% | 0 | 12 | 0% | ||||||
| Catalog.Api.Endpoints.Admin.Migrations.V1.TriggerMigrationRequest | 0 | 1 | 1 | 160 | 0% | 0 | 0 | |||||||
| Catalog.Api.Endpoints.Admin.Migrations.V1.TriggerMigrationResponse | 0 | 6 | 6 | 160 | 0% | 0 | 0 | |||||||
| Catalog.Api.Endpoints.Brands.BulkDeleteBrands.V1.BulkDeleteBrandsEndpoint | 0 | 14 | 14 | 52 | 0% | 0 | 0 | |||||||
| Catalog.Api.Endpoints.Brands.CreateBrand.V1.CreateBrandEndpoint | 0 | 11 | 11 | 50 | 0% | 0 | 2 | 0% | ||||||
| Catalog.Api.Endpoints.Brands.DeleteBrand.V1.DeleteBrandEndpoint | 0 | 11 | 11 | 49 | 0% | 0 | 0 | |||||||
| Catalog.Api.Endpoints.Brands.GetBrandById.V1.GetBrandByIdEndpoint | 0 | 11 | 11 | 47 | 0% | 0 | 0 | |||||||
| Catalog.Api.Endpoints.Brands.GetPaginatedBrands.V1.GetPaginatedBrandsEndpoint | 0 | 11 | 11 | 50 | 0% | 0 | 0 | |||||||
| Catalog.Api.Endpoints.Brands.UpdateBrand.V1.UpdateBrandEndpoint | 0 | 10 | 10 | 48 | 0% | 0 | 0 | |||||||
| Catalog.Api.Endpoints.Categories.GetCategoryById.V1.GetCategoryByIdEndpoint | 0 | 15 | 15 | 45 | 0% | 0 | 0 | |||||||
| Catalog.Api.Endpoints.Products.GetProductById.V1.GetProductByIdEndpoint | 0 | 12 | 12 | 47 | 0% | 0 | 0 | |||||||
| Catalog.Api.Extensions.MediatorExtension | 0 | 14 | 14 | 41 | 0% | 0 | 0 | |||||||
| Mediator.AssemblyReference | 0 | 6 | 6 | 37 | 0% | 0 | 0 | |||||||
| Mediator.Internals.CommandHandlerWrapper`2 | 0 | 20 | 20 | 382 | 0% | 0 | 6 | 0% | ||||||
| Mediator.Internals.ContainerMetadata | 0 | 43 | 43 | 749 | 0% | 0 | 0 | |||||||
| Mediator.Internals.NotificationHandlerWrapper`1 | 0 | 11 | 11 | 661 | 0% | 0 | 4 | 0% | ||||||
| Mediator.Internals.QueryHandlerWrapper`2 | 0 | 20 | 20 | 535 | 0% | 0 | 6 | 0% | ||||||
| Mediator.Internals.RequestHandlerWrapper`2 | 0 | 20 | 20 | 229 | 0% | 0 | 6 | 0% | ||||||
| Mediator.Internals.StreamCommandHandlerWrapper`2 | 0 | 21 | 21 | 459 | 0% | 0 | 12 | 0% | ||||||
| Mediator.Internals.StreamQueryHandlerWrapper`2 | 0 | 21 | 21 | 612 | 0% | 0 | 12 | 0% | ||||||
| Mediator.Internals.StreamRequestHandlerWrapper`2 | 0 | 21 | 21 | 306 | 0% | 0 | 12 | 0% | ||||||
| Mediator.Mediator | 0 | 219 | 219 | 1591 | 0% | 0 | 146 | 0% | ||||||
| Mediator.MediatorOptions | 0 | 7 | 7 | 54 | 0% | 0 | 0 | |||||||
| Mediator.MediatorOptionsAttribute | 0 | 3 | 3 | 31 | 0% | 0 | 0 | |||||||
| Microsoft.AspNetCore.OpenApi.Generated | 0 | 1370 | 1370 | 1760 | 0% | 0 | 206 | 0% | ||||||
| Microsoft.Extensions.DependencyInjection.MediatorDependencyInjectionExtensions | 0 | 69 | 69 | 119 | 0% | 0 | 6 | 0% | ||||||
| Program | 0 | 25 | 25 | 49 | 0% | 0 | 2 | 0% | ||||||
| System.Runtime.CompilerServices | 0 | 2 | 2 | 23 | 0% | 0 | 0 | |||||||
| Catalog.Application | 387 | 448 | 835 | 3321 | 46.3% | 35 | 248 | 14.1% | ||||||
| Catalog.Application.Brands.Features.CreateBrand.V1.CreateBrandCommand | 1 | 0 | 1 | 59 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.CreateBrand.V1.CreateBrandCommandHandler | 11 | 0 | 11 | 59 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Brands.Features.CreateBrand.V1.CreateBrandRequest | 1 | 2 | 3 | 23 | 33.3% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.CreateBrand.V1.CreateBrandValidator | 12 | 0 | 12 | 33 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.DeleteBrand.V1.DeleteBrandCommand | 1 | 0 | 1 | 66 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.DeleteBrand.V1.DeleteBrandCommandHandler | 13 | 0 | 13 | 66 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Brands.Features.DeleteBrand.V1.DeleteBrandRequest | 1 | 0 | 1 | 13 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.DeleteBrand.V1.DeleteBrandValidator | 4 | 0 | 4 | 20 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.DeleteBrands.V1.DeleteBrandsCommand | 1 | 0 | 1 | 50 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.DeleteBrands.V1.DeleteBrandsCommandHandler | 8 | 0 | 8 | 50 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Brands.Features.DeleteBrands.V1.DeleteBrandsRequest | 1 | 0 | 1 | 13 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.DeleteBrands.V1.DeleteBrandsValidator | 4 | 0 | 4 | 21 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.GetBrandById.V1.GetBrandByIdQuery | 1 | 0 | 1 | 43 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.GetBrandById.V1.GetBrandByIdQueryHandler | 5 | 0 | 5 | 43 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Brands.Features.GetBrandById.V1.GetBrandByIdRequest | 1 | 0 | 1 | 13 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.GetBrandById.V1.GetBrandByIdValidator | 4 | 0 | 4 | 20 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.GetPaginatedBrands.V1.GetPaginatedBrandsQuery | 1 | 0 | 1 | 64 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.GetPaginatedBrands.V1.GetPaginatedBrandsQueryHandler | 14 | 0 | 14 | 64 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.GetPaginatedBrands.V1.GetPaginatedBrandsRequest | 1 | 0 | 1 | 15 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.GetPaginatedBrands.V1.GetPaginatedBrandsValidator | 8 | 0 | 8 | 24 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.Responses.BrandResponse | 5 | 0 | 5 | 33 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.UpdateBrand.V1.UpdateBrandCommand | 1 | 0 | 1 | 68 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.UpdateBrand.V1.UpdateBrandCommandHandler | 14 | 1 | 15 | 68 | 93.3% | 3 | 4 | 75% | ||||||
| Catalog.Application.Brands.Features.UpdateBrand.V1.UpdateBrandRequest | 4 | 0 | 4 | 28 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.UpdateBrand.V1.UpdateBrandValidator | 9 | 0 | 9 | 25 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Mappings.BrandMapper | 23 | 4 | 27 | 61 | 85.1% | 2 | 4 | 50% | ||||||
| Catalog.Application.Brands.Mappings.CategoryMapper | 8 | 0 | 8 | 23 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.ReadModels.BrandReadModel | 3 | 0 | 3 | 24 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Specifications.BrandCountSpecification | 5 | 0 | 5 | 53 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Brands.Specifications.BrandPaginationSpecification | 7 | 0 | 7 | 53 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Categories.Features.CreateCategory.V1.CreateCategoryCommand | 1 | 0 | 1 | 48 | 100% | 0 | 0 | |||||||
| Catalog.Application.Categories.Features.CreateCategory.V1.CreateCategoryCommandHandler | 11 | 0 | 11 | 48 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Categories.Features.CreateCategory.V1.CreateCategoryRequest | 3 | 0 | 3 | 10 | 100% | 0 | 0 | |||||||
| Catalog.Application.Categories.Features.CreateCategory.V1.CreateCategoryValidator | 12 | 0 | 12 | 32 | 100% | 0 | 0 | |||||||
| Catalog.Application.Categories.Features.GetCategoryById.V1.GetBrandByIdQueryHandler | 5 | 0 | 5 | 42 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Categories.Features.GetCategoryById.V1.GetCategoryByIdQuery | 1 | 0 | 1 | 42 | 100% | 0 | 0 | |||||||
| Catalog.Application.Categories.Features.GetCategoryById.V1.GetCategoryByIdRequest | 1 | 0 | 1 | 6 | 100% | 0 | 0 | |||||||
| Catalog.Application.Categories.Features.GetCategoryById.V1.GetCategoryByIdValidator | 4 | 0 | 4 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Application.Categories.ReadModels.CategoryReadModel | 5 | 0 | 5 | 34 | 100% | 0 | 0 | |||||||
| Catalog.Application.Categories.Response.CategoryResponse | 2 | 0 | 2 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Application.EventHandlers.DomainEvents.BrandCreatedDomainEventProcessor | 0 | 3 | 3 | 31 | 0% | 0 | 0 | |||||||
| Catalog.Application.Features.Categories.Create.V1.CreateCategoryCommand | 1 | 0 | 1 | 48 | 100% | 0 | 0 | |||||||
| Catalog.Application.Features.Categories.Create.V1.CreateCategoryCommandHandler | 11 | 0 | 11 | 48 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Features.Categories.GetById.V1.GetCategoryByIdQuery | 1 | 0 | 1 | 42 | 100% | 0 | 0 | |||||||
| Catalog.Application.Features.Categories.GetById.V1.GetCategoryByIdQueryHandler | 5 | 0 | 5 | 42 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Features.ProductPrices.Response.ProductPriceResponse | 2 | 0 | 2 | 18 | 100% | 0 | 0 | |||||||
| Catalog.Application.Features.Products.GetProductById.V1.GetProductByIdRequest | 1 | 0 | 1 | 13 | 100% | 0 | 0 | |||||||
| Catalog.Application.Features.Products.GetProductById.V1.GetProductByIdValidator | 4 | 0 | 4 | 20 | 100% | 0 | 0 | |||||||
| Catalog.Application.ProductPriceTypes.ReadModels.ProductPriceTypeReadModel | 2 | 0 | 2 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Application.Products.Features.CreateProduct.V1.CreateProductCommand | 8 | 0 | 8 | 87 | 100% | 0 | 0 | |||||||
| Catalog.Application.Products.Features.CreateProduct.V1.CreateProductCommandHandler | 25 | 0 | 25 | 87 | 100% | 4 | 4 | 100% | ||||||
| Catalog.Application.Products.Features.CreateProduct.V1.CreateProductRequest | 10 | 0 | 10 | 51 | 100% | 0 | 0 | |||||||
| Catalog.Application.Products.Features.CreateProduct.V1.CreateProductValidator | 37 | 0 | 37 | 60 | 100% | 0 | 0 | |||||||
| Catalog.Application.Products.Features.GetProductById.V1.GetProductByIdQuery | 1 | 0 | 1 | 43 | 100% | 0 | 0 | |||||||
| Catalog.Application.Products.Features.GetProductById.V1.GetProductByIdQueryHandler | 5 | 0 | 5 | 43 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Products.Mappings.ProductMappings | 21 | 22 | 43 | 89 | 48.8% | 4 | 8 | 50% | ||||||
| Catalog.Application.Products.ReadModels.ProductPriceReadModel | 5 | 0 | 5 | 34 | 100% | 0 | 0 | |||||||
| Catalog.Application.Products.ReadModels.ProductReadModel | 7 | 3 | 10 | 59 | 70% | 0 | 0 | |||||||
| Catalog.Application.Products.Responses.ProductResponse | 12 | 0 | 12 | 74 | 100% | 0 | 0 | |||||||
| Catalog.Application.Promotions.ReadModels.PromotionReadModel | 5 | 1 | 6 | 39 | 83.3% | 0 | 0 | |||||||
| Catalog.Application.Promotions.Response.PromotionResponse | 4 | 0 | 4 | 28 | 100% | 0 | 0 | |||||||
| Catalog.Application.Suppliers.ReadModels.SupplierReadModel | 3 | 3 | 6 | 39 | 50% | 0 | 0 | |||||||
| Microsoft.AspNetCore.OpenApi.Generated | 0 | 407 | 407 | 789 | 0% | 0 | 206 | 0% | ||||||
| System.Runtime.CompilerServices | 0 | 2 | 2 | 23 | 0% | 0 | 0 | |||||||
| Catalog.Domain | 554 | 62 | 616 | 2379 | 89.9% | 249 | 284 | 87.6% | ||||||
| Catalog.Domain.Entities.BrandAggregate.Brand | 44 | 0 | 44 | 146 | 100% | 36 | 36 | 100% | ||||||
| Catalog.Domain.Entities.BrandAggregate.Errors.BrandErrors | 15 | 0 | 15 | 45 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.BrandAggregate.Errors.WebsiteErrors | 6 | 0 | 6 | 24 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.BrandAggregate.Events.BrandCreatedDomainEvent | 0 | 3 | 3 | 25 | 0% | 0 | 0 | |||||||
| Catalog.Domain.Entities.BrandAggregate.Specifications.BrandByIdSpecification | 3 | 0 | 3 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.BrandAggregate.Specifications.BrandByNameSpecification | 3 | 2 | 5 | 28 | 60% | 1 | 2 | 50% | ||||||
| Catalog.Domain.Entities.BrandAggregate.Specifications.BrandListSpecification | 0 | 15 | 15 | 50 | 0% | 0 | 10 | 0% | ||||||
| Catalog.Domain.Entities.BrandAggregate.ValueObjects.Website | 14 | 0 | 14 | 54 | 100% | 8 | 8 | 100% | ||||||
| Catalog.Domain.Entities.CategoryAggregate.Category | 31 | 0 | 31 | 114 | 100% | 20 | 20 | 100% | ||||||
| Catalog.Domain.Entities.CategoryAggregate.Errors.CategoryErrors | 9 | 0 | 9 | 31 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.CategoryAggregate.Specifications.CategoriesByIdsSpecification | 3 | 0 | 3 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.CategoryAggregate.Specifications.CategoryByIdSpecification | 3 | 0 | 3 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.ProductAggregate.Errors.ProductErrors | 30 | 0 | 30 | 80 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.ProductAggregate.Errors.ProductPriceErrors | 18 | 0 | 18 | 51 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.ProductAggregate.Events.ProductCreatedDomainEvent | 3 | 0 | 3 | 25 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.ProductAggregate.Product | 55 | 0 | 55 | 245 | 100% | 19 | 20 | 95% | ||||||
| Catalog.Domain.Entities.ProductAggregate.ProductPrice | 34 | 2 | 36 | 131 | 94.4% | 22 | 22 | 100% | ||||||
| Catalog.Domain.Entities.ProductAggregate.Specifications.ProductByIdSpecification | 9 | 0 | 9 | 29 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Domain.Entities.ProductPriceTypeAggregate.Errors.ProductPriceTypeErrors | 12 | 0 | 12 | 37 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.ProductPriceTypeAggregate.ProductPriceType | 32 | 0 | 32 | 111 | 100% | 22 | 22 | 100% | ||||||
| Catalog.Domain.Entities.ProductPriceTypeAggregate.Specifications.ProductPriceTypeByIdSpecification | 3 | 0 | 3 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.PromotionAggregate.Errors.PromotionErrors | 12 | 0 | 12 | 37 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.PromotionAggregate.Promotion | 45 | 0 | 45 | 165 | 100% | 41 | 42 | 97.6% | ||||||
| Catalog.Domain.Entities.PromotionAggregate.Specifications.PromotionByIdSpecification | 5 | 0 | 5 | 25 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Domain.Entities.SupplierAggregate.Errors.SupplierErrors | 12 | 0 | 12 | 37 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.SupplierAggregate.Specifications.SupplierByIdSpecification | 3 | 0 | 3 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.SupplierAggregate.Supplier | 44 | 0 | 44 | 139 | 100% | 42 | 42 | 100% | ||||||
| System.Text.RegularExpressions.Generated | 54 | 20 | 74 | 262 | 72.9% | 17 | 28 | 60.7% | ||||||
| System.Text.RegularExpressions.Generated. | 19 | 17 | 36 | 247 | 52.7% | 6 | 14 | 42.8% | ||||||
| System.Text.RegularExpressions.Generated. | 33 | 3 | 36 | 146 | 91.6% | 11 | 14 | 78.5% | ||||||
| Catalog.Infrastructure | 553 | 7113 | 7666 | 9980 | 7.2% | 34 | 286 | 11.8% | ||||||
| Catalog.Infrastructure.Caching.BrandCache | 1 | 0 | 1 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Caching.CategoryCache | 1 | 0 | 1 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Caching.ProductCache | 1 | 0 | 1 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.DependencyInjection.DatabaseServiceExtensions | 23 | 2 | 25 | 68 | 92% | 0 | 0 | |||||||
| Catalog.Infrastructure.DependencyInjection.InfrastructureServiceExtensions | 71 | 24 | 95 | 176 | 74.7% | 17 | 30 | 56.6% | ||||||
| Catalog.Infrastructure.DesignTime.CatalogDesignTimeDbContextFactory | 0 | 20 | 20 | 61 | 0% | 0 | 30 | 0% | ||||||
| Catalog.Infrastructure.Options.MinioOptions | 0 | 4 | 4 | 35 | 0% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.ApplicationReadDbContext | 13 | 0 | 13 | 73 | 100% | 1 | 2 | 50% | ||||||
| Catalog.Infrastructure.Persistence.ApplicationWriteDbContext | 13 | 0 | 13 | 74 | 100% | 1 | 2 | 50% | ||||||
| Catalog.Infrastructure.Persistence.Config.Read.BrandReadConfig | 11 | 0 | 11 | 36 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Read.CategoryReadConfig | 14 | 0 | 14 | 41 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Read.ProductPriceReadConfig | 15 | 0 | 15 | 39 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Read.ProductPriceTypeReadConfig | 11 | 0 | 11 | 36 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Read.ProductReadConfig | 26 | 0 | 26 | 59 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Read.PromotionReadConfig | 18 | 0 | 18 | 46 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Read.SupplierReadConfig | 17 | 0 | 17 | 42 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Write.BrandWriteConfig | 19 | 0 | 19 | 45 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Write.CategoryWriteConfig | 21 | 0 | 21 | 47 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Write.ProductPriceTypeWriteConfig | 11 | 0 | 11 | 36 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Write.ProductPriceWriteConfig | 18 | 0 | 18 | 44 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Write.ProductWriteConfig | 38 | 0 | 38 | 70 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Write.PromotionWriteConfig | 25 | 0 | 25 | 53 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Write.SupplierWriteConfig | 11 | 0 | 11 | 33 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Migrations.MySql.InitialMySql | 0 | 2430 | 2430 | 2697 | 0% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Migrations.PostgreSQL.ApplicationWriteDbContextModelSnapshot | 0 | 694 | 694 | 737 | 0% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Migrations.PostgreSQL.InitialPostgreSQL | 0 | 1106 | 1106 | 1212 | 0% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Migrations.SqlServer.InitialSqlServer | 0 | 2511 | 2511 | 2789 | 0% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Repositories.Read.BrandReadRepository | 4 | 0 | 4 | 26 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Repositories.Read.CategoryReadRepository | 36 | 0 | 36 | 90 | 100% | 7 | 8 | 87.5% | ||||||
| Catalog.Infrastructure.Persistence.Repositories.Read.ProductPriceReadRepository | 2 | 0 | 2 | 21 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Repositories.Read.ProductPriceTypeReadRepository | 17 | 0 | 17 | 54 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Infrastructure.Persistence.Repositories.Read.ProductReadRepository | 33 | 0 | 33 | 84 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Infrastructure.Persistence.Repositories.Read.PromotionReadRepository | 29 | 0 | 29 | 79 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Infrastructure.Persistence.Repositories.Read.SupplierReadRepository | 18 | 0 | 18 | 57 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Infrastructure.Persistence.Repositories.Write.BrandWriteRepository | 6 | 0 | 6 | 50 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Repositories.Write.CategoryWriteRepository | 5 | 4 | 9 | 43 | 55.5% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Repositories.Write.ProductPriceTypeWriteRepository | 5 | 0 | 5 | 35 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Repositories.Write.ProductWriteRepository | 5 | 0 | 5 | 35 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Repositories.Write.PromotionWriteRepository | 10 | 0 | 10 | 44 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Repositories.Write.SupplierWriteRepository | 5 | 0 | 5 | 35 | 100% | 0 | 0 | |||||||
| Microsoft.AspNetCore.OpenApi.Generated | 0 | 316 | 316 | 698 | 0% | 0 | 206 | 0% | ||||||
| System.Runtime.CompilerServices | 0 | 2 | 2 | 23 | 0% | 0 | 0 | |||||||
| Customer.Application | 281 | 283 | 564 | 1704 | 49.8% | 34 | 244 | 13.9% | ||||||
| Customer.Application.Tenants.Commands.CreateTenant.CreateTenantCommand | 8 | 0 | 8 | 25 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.Commands.CreateTenant.CreateTenantCommandHandler | 122 | 4 | 126 | 247 | 96.8% | 20 | 24 | 83.3% | ||||||
| Customer.Application.Tenants.Commands.CreateTenant.CreateTenantCommandValidator | 21 | 0 | 21 | 41 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.Commands.UpdateMigrationStatus.UpdateMigrationStatusCommand | 7 | 0 | 7 | 21 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.Commands.UpdateMigrationStatus.UpdateMigrationStatusCommandHandler | 20 | 0 | 20 | 57 | 100% | 4 | 4 | 100% | ||||||
| Customer.Application.Tenants.DTOs.ServiceDatabaseInfoDto | 3 | 0 | 3 | 22 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.DTOs.TenantDatabaseMetadataDto | 4 | 0 | 4 | 126 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.DTOs.TenantDto | 11 | 0 | 11 | 126 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.DTOs.TenantMigrationStatusDto | 6 | 0 | 6 | 126 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.EventHandlers.TenantCreatedHandler | 11 | 0 | 11 | 43 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.Queries.CheckServiceReadiness.CheckServiceReadinessQuery | 1 | 0 | 1 | 11 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.Queries.CheckServiceReadiness.CheckServiceReadinessQueryHandler | 12 | 0 | 12 | 42 | 100% | 4 | 4 | 100% | ||||||
| Customer.Application.Tenants.Queries.GetTenantById.GetTenantByIdQuery | 1 | 0 | 1 | 11 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.Queries.GetTenantById.GetTenantByIdQueryHandler | 36 | 0 | 36 | 64 | 100% | 2 | 2 | 100% | ||||||
| Customer.Application.Tenants.Queries.GetTenantDatabaseInfo.GetTenantDatabaseInfoQuery | 1 | 0 | 1 | 12 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.Queries.GetTenantDatabaseInfo.GetTenantDatabaseInfoQueryHandler | 17 | 0 | 17 | 48 | 100% | 4 | 4 | 100% | ||||||
| Microsoft.AspNetCore.OpenApi.Generated | 0 | 277 | 277 | 659 | 0% | 0 | 206 | 0% | ||||||
| System.Runtime.CompilerServices | 0 | 2 | 2 | 23 | 0% | 0 | 0 | |||||||
| Customer.Domain | 105 | 2 | 107 | 381 | 98.1% | 22 | 22 | 100% | ||||||
| Customer.Domain.Entities.TenantAggregate.Events.TenantCreatedDomainEvent | 17 | 0 | 17 | 56 | 100% | 0 | 0 | |||||||
| Customer.Domain.Entities.TenantAggregate.Tenant | 63 | 0 | 63 | 195 | 100% | 10 | 10 | 100% | ||||||
| Customer.Domain.Entities.TenantAggregate.TenantDatabaseMetadata | 6 | 1 | 7 | 42 | 85.7% | 0 | 0 | |||||||
| Customer.Domain.Entities.TenantAggregate.TenantMigrationStatus | 19 | 1 | 20 | 88 | 95% | 12 | 12 | 100% | ||||||
| Customer.Infrastructure | 95 | 321 | 416 | 1076 | 22.8% | 0 | 222 | 0% | ||||||
| Customer.Infrastructure.DependencyInjection.InfrastructureServiceExtensions | 0 | 56 | 56 | 114 | 0% | 0 | 12 | 0% | ||||||
| Customer.Infrastructure.Persistence.Config.Read.TenantReadConfig | 0 | 26 | 26 | 57 | 0% | 0 | 0 | |||||||
| Customer.Infrastructure.Persistence.Config.Write.TenantWriteConfig | 74 | 0 | 74 | 106 | 100% | 0 | 0 | |||||||
| Customer.Infrastructure.Persistence.CustomerReadDbContext | 0 | 7 | 7 | 39 | 0% | 0 | 2 | 0% | ||||||
| Customer.Infrastructure.Persistence.CustomerWriteDbContext | 3 | 4 | 7 | 40 | 42.8% | 0 | 2 | 0% | ||||||
| Customer.Infrastructure.Persistence.Repositories.Write.TenantWriteRepository | 13 | 0 | 13 | 63 | 100% | 0 | 0 | |||||||
| Customer.Infrastructure.Persistence.UnitOfWork | 5 | 0 | 5 | 26 | 100% | 0 | 0 | |||||||
| Microsoft.AspNetCore.OpenApi.Generated | 0 | 226 | 226 | 608 | 0% | 0 | 206 | 0% | ||||||
| System.Runtime.CompilerServices | 0 | 2 | 2 | 23 | 0% | 0 | 0 | |||||||
| SharedKernel.Core | 88 | 357 | 445 | 1609 | 19.7% | 22 | 236 | 9.3% | ||||||
| SharedKernel.Core.Domain.BaseEntity | 1 | 0 | 1 | 139 | 100% | 0 | 0 | |||||||
| SharedKernel.Core.Domain.BaseEntity`1 | 24 | 4 | 28 | 139 | 85.7% | 3 | 4 | 75% | ||||||
| SharedKernel.Core.Domain.ReadModelBase`1 | 1 | 7 | 8 | 53 | 12.5% | 0 | 0 | |||||||
| SharedKernel.Core.Domain.ValueObject | 15 | 2 | 17 | 56 | 88.2% | 15 | 20 | 75% | ||||||
| SharedKernel.Core.Events.DomainEvent | 5 | 3 | 8 | 33 | 62.5% | 0 | 0 | |||||||
| SharedKernel.Core.Events.IntegrationEvent | 5 | 3 | 8 | 33 | 62.5% | 0 | 0 | |||||||
| SharedKernel.Core.Exceptions.ConfigurationMissingException | 0 | 6 | 6 | 37 | 0% | 0 | 0 | |||||||
| SharedKernel.Core.Exceptions.CustomException | 0 | 11 | 11 | 50 | 0% | 0 | 0 | |||||||
| SharedKernel.Core.Exceptions.InvalidDatabaseStrategyException | 0 | 6 | 6 | 37 | 0% | 0 | 0 | |||||||
| SharedKernel.Core.Exceptions.InvalidOperationException | 0 | 6 | 6 | 34 | 0% | 0 | 0 | |||||||
| SharedKernel.Core.Exceptions.InvalidTransactionException | 0 | 6 | 6 | 34 | 0% | 0 | 0 | |||||||
| SharedKernel.Core.Pagination.PagedList`1 | 14 | 2 | 16 | 67 | 87.5% | 2 | 4 | 50% | ||||||
| SharedKernel.Core.Pagination.PaginationParameters | 6 | 0 | 6 | 38 | 100% | 1 | 2 | 50% | ||||||
| SharedKernel.Core.Pricing.DatabaseOptions | 0 | 189 | 189 | 374 | 0% | 0 | 66 | 0% | ||||||
| SharedKernel.Core.Pricing.DatabaseProvider | 12 | 46 | 58 | 188 | 20.6% | 1 | 74 | 1.3% | ||||||
| SharedKernel.Core.Pricing.DatabaseStrategy | 5 | 40 | 45 | 156 | 11.1% | 0 | 60 | 0% | ||||||
| SharedKernel.Core.Pricing.PricingOption | 0 | 6 | 6 | 37 | 0% | 0 | 0 | |||||||
| SharedKernel.Core.Pricing.TenantPlan | 0 | 17 | 17 | 82 | 0% | 0 | 6 | 0% | ||||||
| SharedKernel.Core.Pricing.UsageMetrics | 0 | 3 | 3 | 22 | 0% | 0 | 0 | |||||||
| SharedKernel.Events | 17 | 13 | 30 | 130 | 56.6% | 0 | 0 | |||||||
| SharedKernel.Events.BrandCreatedIntegrationEvent | 0 | 6 | 6 | 32 | 0% | 0 | 0 | |||||||
| SharedKernel.Events.TenantCreatedIntegrationEvent | 17 | 2 | 19 | 64 | 89.4% | 0 | 0 | |||||||
| SharedKernel.Events.TenantDatabaseProvisionedIntegrationEvent | 0 | 5 | 5 | 34 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure | 35 | 1479 | 1514 | 4127 | 2.3% | 2 | 452 | 0.4% | ||||||
| Microsoft.AspNetCore.OpenApi.Generated | 0 | 584 | 584 | 966 | 0% | 0 | 206 | 0% | ||||||
| SharedKernel.Infrastructure.Auth.Extensions | 0 | 122 | 122 | 168 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.Behaviors.Extensions | 0 | 2 | 2 | 22 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.Behaviors.LoggingBehavior`2 | 25 | 0 | 25 | 72 | 100% | 2 | 2 | 100% | ||||||
| SharedKernel.Infrastructure.Behaviors.TransactionalBehavior`2 | 10 | 0 | 10 | 45 | 100% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.Caching.CachingOptions | 0 | 2 | 2 | 20 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.Caching.Extensions | 0 | 22 | 22 | 58 | 0% | 0 | 2 | 0% | ||||||
| SharedKernel.Infrastructure.Endpoints.Extensions | 0 | 43 | 43 | 81 | 0% | 0 | 10 | 0% | ||||||
| SharedKernel.Infrastructure.Endpoints.FastEndpointsExtensions | 0 | 61 | 61 | 158 | 0% | 0 | 35 | 0% | ||||||
| SharedKernel.Infrastructure.Extensions | 0 | 49 | 49 | 108 | 0% | 0 | 2 | 0% | ||||||
| SharedKernel.Infrastructure.Logging.Extensions | 0 | 63 | 63 | 138 | 0% | 0 | 18 | 0% | ||||||
| SharedKernel.Infrastructure.Logging.SerilogOptions | 0 | 7 | 7 | 45 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.Middlewares.GlobalExceptionHandlerMiddleware | 0 | 47 | 47 | 97 | 0% | 0 | 12 | 0% | ||||||
| SharedKernel.Infrastructure.MultiTenant.CustomerApiTenantOptions | 0 | 6 | 6 | 402 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.MultiTenant.CustomerApiTenantStore | 0 | 232 | 232 | 452 | 0% | 0 | 56 | 0% | ||||||
| SharedKernel.Infrastructure.MultiTenant.MultiTenantExtensions | 0 | 102 | 102 | 402 | 0% | 0 | 87 | 0% | ||||||
| SharedKernel.Infrastructure.MultiTenant.TeckCloudMultiTenancyOptions | 0 | 13 | 13 | 402 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.MultiTenant.TenantDetails | 0 | 11 | 11 | 65 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.MultiTenant.TenantInfoExtensions | 0 | 21 | 21 | 111 | 0% | 0 | 12 | 0% | ||||||
| SharedKernel.Infrastructure.OpenApi.OpenApiDocumentRegistry | 0 | 4 | 4 | 32 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.OpenApi.OpenApiExtensions | 0 | 48 | 48 | 90 | 0% | 0 | 8 | 0% | ||||||
| SharedKernel.Infrastructure.OpenApi.OpenApiOptions | 0 | 6 | 6 | 47 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.OpenTelemetry.Extensions | 0 | 17 | 17 | 32 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.Options.AppOptions | 0 | 3 | 3 | 32 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.Options.Extensions | 0 | 12 | 12 | 59 | 0% | 0 | 2 | 0% | ||||||
| System.Runtime.CompilerServices | 0 | 2 | 2 | 23 | 0% | 0 | 0 | |||||||
| SharedKernel.Migration | 147 | 97 | 244 | 722 | 60.2% | 27 | 44 | 61.3% | ||||||
| SharedKernel.Migration.DbUpMigrationRunner | 47 | 39 | 86 | 197 | 54.6% | 14 | 24 | 58.3% | ||||||
| SharedKernel.Migration.MigrationServiceBase | 11 | 58 | 69 | 146 | 15.9% | 9 | 16 | 56.2% | ||||||
| SharedKernel.Migration.Models.MigrationOptions | 7 | 0 | 7 | 42 | 100% | 0 | 0 | |||||||
| SharedKernel.Migration.Models.MigrationResult | 23 | 0 | 23 | 71 | 100% | 0 | 0 | |||||||
| SharedKernel.Migration.Services.CustomerApiClient | 56 | 0 | 56 | 133 | 100% | 4 | 4 | 100% | ||||||
| SharedKernel.Migration.Services.ServiceDatabaseInfo | 3 | 0 | 3 | 133 | 100% | 0 | 0 | |||||||
| SharedKernel.Persistence | 328 | 1246 | 1574 | 5629 | 20.8% | 76 | 612 | 12.4% | ||||||
| Microsoft.AspNetCore.OpenApi.Generated | 0 | 382 | 382 | 764 | 0% | 0 | 206 | 0% | ||||||
| SharedKernel.Persistence.Caching.GenericCacheService`2 | 40 | 0 | 40 | 138 | 100% | 4 | 4 | 100% | ||||||
| SharedKernel.Persistence.Database.DatabaseOptions | 0 | 2 | 2 | 19 | 0% | 0 | 0 | |||||||
| SharedKernel.Persistence.Database.EFCore.BaseDbContext | 13 | 6 | 19 | 110 | 68.4% | 9 | 14 | 64.2% | ||||||
| SharedKernel.Persistence.Database.EFCore.ByIdSpecification`2 | 3 | 0 | 3 | 350 | 100% | 0 | 0 | |||||||
| SharedKernel.Persistence.Database.EFCore.ByIdsSpecification`2 | 6 | 5 | 11 | 350 | 54.5% | 1 | 2 | 50% | ||||||
| SharedKernel.Persistence.Database.EFCore.Config.ConfigurationExtensions | 17 | 0 | 17 | 43 | 100% | 0 | 0 | |||||||
| SharedKernel.Persistence.Database.EFCore.GenericReadRepository`3 | 51 | 0 | 51 | 350 | 100% | 4 | 4 | 100% | ||||||
| SharedKernel.Persistence.Database.EFCore.GenericSpecification`1 | 3 | 0 | 3 | 350 | 100% | 0 | 0 | |||||||
| SharedKernel.Persistence.Database.EFCore.GenericWriteRepository`3 | 71 | 19 | 90 | 366 | 78.8% | 20 | 32 | 62.5% | ||||||
| SharedKernel.Persistence.Database.EFCore.Interceptors.AuditingInterceptor | 13 | 0 | 13 | 78 | 100% | 12 | 16 | 75% | ||||||
| SharedKernel.Persistence.Database.EFCore.Interceptors.SoftDeleteInterceptor | 14 | 2 | 16 | 60 | 87.5% | 5 | 10 | 50% | ||||||
| SharedKernel.Persistence.Database.EFCore.ModelBuilderExtensions | 19 | 6 | 25 | 77 | 76% | 13 | 22 | 59% | ||||||
| SharedKernel.Persistence.Database.EFCore.QueryableExtensions | 0 | 12 | 12 | 44 | 0% | 0 | 6 | 0% | ||||||
| SharedKernel.Persistence.Database.EFCore.UnitOfWork`1 | 15 | 32 | 47 | 183 | 31.9% | 4 | 22 | 18.1% | ||||||
| SharedKernel.Persistence.Database.Extensions | 0 | 115 | 115 | 310 | 0% | 0 | 58 | 0% | ||||||
| SharedKernel.Persistence.Database.Migrations.EFCoreMigrationRunner`1 | 0 | 90 | 90 | 182 | 0% | 0 | 30 | 0% | ||||||
| SharedKernel.Persistence.Database.Migrations.MigrationResult | 0 | 23 | 23 | 159 | 0% | 0 | 0 | |||||||
| SharedKernel.Persistence.Database.Migrations.MigrationServiceExtensions | 11 | 8 | 19 | 70 | 57.8% | 2 | 2 | 100% | ||||||
| SharedKernel.Persistence.Database.Migrations.MigrationStatus | 0 | 6 | 6 | 159 | 0% | 0 | 0 | |||||||
| SharedKernel.Persistence.Database.Migrations.MultiTenantMigrationService`1 | 0 | 169 | 169 | 370 | 0% | 0 | 56 | 0% | ||||||
| SharedKernel.Persistence.Database.MultiTenant.CurrentTenantDbContext`1 | 0 | 4 | 4 | 43 | 0% | 0 | 2 | 0% | ||||||
| SharedKernel.Persistence.Database.MultiTenant.MultiTenantDatabaseHealthCheck | 0 | 15 | 15 | 61 | 0% | 0 | 2 | 0% | ||||||
| SharedKernel.Persistence.Database.MultiTenant.MultiTenantDbExtensions | 52 | 94 | 146 | 276 | 35.6% | 2 | 32 | 6.2% | ||||||
| SharedKernel.Persistence.Database.MultiTenant.TenantConnectionResult | 0 | 39 | 39 | 134 | 0% | 0 | 0 | |||||||
| SharedKernel.Persistence.Database.MultiTenant.TenantDbConnectionResolver | 0 | 172 | 172 | 425 | 0% | 0 | 82 | 0% | ||||||
| SharedKernel.Persistence.Database.MultiTenant.TenantMigrationOptions | 0 | 6 | 6 | 41 | 0% | 0 | 0 | |||||||
| SharedKernel.Persistence.EventHandlers.TenantDatabaseProvisionedHandler | 0 | 37 | 37 | 94 | 0% | 0 | 10 | 0% | ||||||
| System.Runtime.CompilerServices | 0 | 2 | 2 | 23 | 0% | 0 | 0 | |||||||
| SharedKernel.Secrets | 38 | 214 | 252 | 797 | 15% | 14 | 94 | 14.8% | ||||||
| SharedKernel.Secrets.DatabaseCredentials | 32 | 13 | 45 | 140 | 71.1% | 14 | 20 | 70% | ||||||
| SharedKernel.Secrets.UserCredentials | 2 | 0 | 2 | 140 | 100% | 0 | 0 | |||||||
| SharedKernel.Secrets.VaultOptions | 0 | 12 | 12 | 93 | 0% | 0 | 0 | |||||||
| SharedKernel.Secrets.VaultSecretsManager | 0 | 185 | 185 | 380 | 0% | 0 | 74 | 0% | ||||||
| SharedKernel.Secrets.VaultServiceExtensions | 4 | 4 | 8 | 44 | 50% | 0 | 0 | |||||||
| Teck.Cloud.ServiceDefaults | 0 | 353 | 353 | 857 | 0% | 0 | 222 | 0% | ||||||
| Microsoft.AspNetCore.OpenApi.Generated | 0 | 215 | 215 | 597 | 0% | 0 | 206 | 0% | ||||||
| Microsoft.Extensions.Hosting.Extensions | 0 | 136 | 136 | 237 | 0% | 0 | 16 | 0% | ||||||
| System.Runtime.CompilerServices | 0 | 2 | 2 | 23 | 0% | 0 | 0 | |||||||
| Parser: | +MultiReport (8x Cobertura) | +
|---|---|
| Assemblies: | +14 | +
| Classes: | +286 | +
| Files: | +244 | +
| Coverage date: | +10-02-2026 - 23:52:31 - 10-02-2026 - 23:53:56 | +
| Covered lines: | +2628 | +
|---|---|
| Uncovered lines: | +14036 | +
| Coverable lines: | +16664 | +
| Total lines: | +31408 | +
| Line coverage: | +15.7% | +
| Covered branches: | +515 | +
|---|---|
| Total branches: | +3398 | +
| Branch coverage: | +15.1% | +
Feature is only available for sponsors
+Upgrade to PRO version +| Line coverage | Branch coverage | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Name | Covered | Uncovered | Coverable | Total | Percentage | Covered | Total | Percentage | ||||||
| Catalog.Api | 0 | 2048 | 2048 | 8506 | 0% | 0 | 432 | 0% | ||||||
| Catalog.Api.Endpoints.Admin.Migrations.V1.TriggerMigrationEndpoint | 0 | 54 | 54 | 160 | 0% | 0 | 12 | 0% | ||||||
| Catalog.Api.Endpoints.Admin.Migrations.V1.TriggerMigrationRequest | 0 | 1 | 1 | 160 | 0% | 0 | 0 | |||||||
| Catalog.Api.Endpoints.Admin.Migrations.V1.TriggerMigrationResponse | 0 | 6 | 6 | 160 | 0% | 0 | 0 | |||||||
| Catalog.Api.Endpoints.Brands.BulkDeleteBrands.V1.BulkDeleteBrandsEndpoint | 0 | 14 | 14 | 52 | 0% | 0 | 0 | |||||||
| Catalog.Api.Endpoints.Brands.CreateBrand.V1.CreateBrandEndpoint | 0 | 11 | 11 | 50 | 0% | 0 | 2 | 0% | ||||||
| Catalog.Api.Endpoints.Brands.DeleteBrand.V1.DeleteBrandEndpoint | 0 | 11 | 11 | 49 | 0% | 0 | 0 | |||||||
| Catalog.Api.Endpoints.Brands.GetBrandById.V1.GetBrandByIdEndpoint | 0 | 11 | 11 | 47 | 0% | 0 | 0 | |||||||
| Catalog.Api.Endpoints.Brands.GetPaginatedBrands.V1.GetPaginatedBrandsEndpoint | 0 | 11 | 11 | 50 | 0% | 0 | 0 | |||||||
| Catalog.Api.Endpoints.Brands.UpdateBrand.V1.UpdateBrandEndpoint | 0 | 10 | 10 | 48 | 0% | 0 | 0 | |||||||
| Catalog.Api.Endpoints.Categories.GetCategoryById.V1.GetCategoryByIdEndpoint | 0 | 15 | 15 | 45 | 0% | 0 | 0 | |||||||
| Catalog.Api.Endpoints.Products.GetProductById.V1.GetProductByIdEndpoint | 0 | 12 | 12 | 47 | 0% | 0 | 0 | |||||||
| Catalog.Api.Extensions.MediatorExtension | 0 | 14 | 14 | 41 | 0% | 0 | 0 | |||||||
| Mediator.AssemblyReference | 0 | 6 | 6 | 37 | 0% | 0 | 0 | |||||||
| Mediator.Internals.CommandHandlerWrapper`2 | 0 | 20 | 20 | 382 | 0% | 0 | 6 | 0% | ||||||
| Mediator.Internals.ContainerMetadata | 0 | 43 | 43 | 749 | 0% | 0 | 0 | |||||||
| Mediator.Internals.NotificationHandlerWrapper`1 | 0 | 11 | 11 | 661 | 0% | 0 | 4 | 0% | ||||||
| Mediator.Internals.QueryHandlerWrapper`2 | 0 | 20 | 20 | 535 | 0% | 0 | 6 | 0% | ||||||
| Mediator.Internals.RequestHandlerWrapper`2 | 0 | 20 | 20 | 229 | 0% | 0 | 6 | 0% | ||||||
| Mediator.Internals.StreamCommandHandlerWrapper`2 | 0 | 21 | 21 | 459 | 0% | 0 | 12 | 0% | ||||||
| Mediator.Internals.StreamQueryHandlerWrapper`2 | 0 | 21 | 21 | 612 | 0% | 0 | 12 | 0% | ||||||
| Mediator.Internals.StreamRequestHandlerWrapper`2 | 0 | 21 | 21 | 306 | 0% | 0 | 12 | 0% | ||||||
| Mediator.Mediator | 0 | 219 | 219 | 1591 | 0% | 0 | 146 | 0% | ||||||
| Mediator.MediatorOptions | 0 | 7 | 7 | 54 | 0% | 0 | 0 | |||||||
| Mediator.MediatorOptionsAttribute | 0 | 3 | 3 | 31 | 0% | 0 | 0 | |||||||
| Microsoft.AspNetCore.OpenApi.Generated | 0 | 1370 | 1370 | 1760 | 0% | 0 | 206 | 0% | ||||||
| Microsoft.Extensions.DependencyInjection.MediatorDependencyInjectionExtensions | 0 | 69 | 69 | 119 | 0% | 0 | 6 | 0% | ||||||
| Program | 0 | 25 | 25 | 49 | 0% | 0 | 2 | 0% | ||||||
| System.Runtime.CompilerServices | 0 | 2 | 2 | 23 | 0% | 0 | 0 | |||||||
| Catalog.Application | 387 | 448 | 835 | 3321 | 46.3% | 35 | 248 | 14.1% | ||||||
| Catalog.Application.Brands.Features.CreateBrand.V1.CreateBrandCommand | 1 | 0 | 1 | 59 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.CreateBrand.V1.CreateBrandCommandHandler | 11 | 0 | 11 | 59 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Brands.Features.CreateBrand.V1.CreateBrandRequest | 1 | 2 | 3 | 23 | 33.3% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.CreateBrand.V1.CreateBrandValidator | 12 | 0 | 12 | 33 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.DeleteBrand.V1.DeleteBrandCommand | 1 | 0 | 1 | 66 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.DeleteBrand.V1.DeleteBrandCommandHandler | 13 | 0 | 13 | 66 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Brands.Features.DeleteBrand.V1.DeleteBrandRequest | 1 | 0 | 1 | 13 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.DeleteBrand.V1.DeleteBrandValidator | 4 | 0 | 4 | 20 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.DeleteBrands.V1.DeleteBrandsCommand | 1 | 0 | 1 | 50 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.DeleteBrands.V1.DeleteBrandsCommandHandler | 8 | 0 | 8 | 50 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Brands.Features.DeleteBrands.V1.DeleteBrandsRequest | 1 | 0 | 1 | 13 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.DeleteBrands.V1.DeleteBrandsValidator | 4 | 0 | 4 | 21 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.GetBrandById.V1.GetBrandByIdQuery | 1 | 0 | 1 | 43 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.GetBrandById.V1.GetBrandByIdQueryHandler | 5 | 0 | 5 | 43 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Brands.Features.GetBrandById.V1.GetBrandByIdRequest | 1 | 0 | 1 | 13 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.GetBrandById.V1.GetBrandByIdValidator | 4 | 0 | 4 | 20 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.GetPaginatedBrands.V1.GetPaginatedBrandsQuery | 1 | 0 | 1 | 64 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.GetPaginatedBrands.V1.GetPaginatedBrandsQueryHandler | 14 | 0 | 14 | 64 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.GetPaginatedBrands.V1.GetPaginatedBrandsRequest | 1 | 0 | 1 | 15 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.GetPaginatedBrands.V1.GetPaginatedBrandsValidator | 8 | 0 | 8 | 24 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.Responses.BrandResponse | 5 | 0 | 5 | 33 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.UpdateBrand.V1.UpdateBrandCommand | 1 | 0 | 1 | 68 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.UpdateBrand.V1.UpdateBrandCommandHandler | 14 | 1 | 15 | 68 | 93.3% | 3 | 4 | 75% | ||||||
| Catalog.Application.Brands.Features.UpdateBrand.V1.UpdateBrandRequest | 4 | 0 | 4 | 28 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.UpdateBrand.V1.UpdateBrandValidator | 9 | 0 | 9 | 25 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Mappings.BrandMapper | 23 | 4 | 27 | 61 | 85.1% | 2 | 4 | 50% | ||||||
| Catalog.Application.Brands.Mappings.CategoryMapper | 8 | 0 | 8 | 23 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.ReadModels.BrandReadModel | 3 | 0 | 3 | 24 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Specifications.BrandCountSpecification | 5 | 0 | 5 | 53 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Brands.Specifications.BrandPaginationSpecification | 7 | 0 | 7 | 53 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Categories.Features.CreateCategory.V1.CreateCategoryCommand | 1 | 0 | 1 | 48 | 100% | 0 | 0 | |||||||
| Catalog.Application.Categories.Features.CreateCategory.V1.CreateCategoryCommandHandler | 11 | 0 | 11 | 48 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Categories.Features.CreateCategory.V1.CreateCategoryRequest | 3 | 0 | 3 | 10 | 100% | 0 | 0 | |||||||
| Catalog.Application.Categories.Features.CreateCategory.V1.CreateCategoryValidator | 12 | 0 | 12 | 32 | 100% | 0 | 0 | |||||||
| Catalog.Application.Categories.Features.GetCategoryById.V1.GetBrandByIdQueryHandler | 5 | 0 | 5 | 42 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Categories.Features.GetCategoryById.V1.GetCategoryByIdQuery | 1 | 0 | 1 | 42 | 100% | 0 | 0 | |||||||
| Catalog.Application.Categories.Features.GetCategoryById.V1.GetCategoryByIdRequest | 1 | 0 | 1 | 6 | 100% | 0 | 0 | |||||||
| Catalog.Application.Categories.Features.GetCategoryById.V1.GetCategoryByIdValidator | 4 | 0 | 4 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Application.Categories.ReadModels.CategoryReadModel | 5 | 0 | 5 | 34 | 100% | 0 | 0 | |||||||
| Catalog.Application.Categories.Response.CategoryResponse | 2 | 0 | 2 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Application.EventHandlers.DomainEvents.BrandCreatedDomainEventProcessor | 0 | 3 | 3 | 31 | 0% | 0 | 0 | |||||||
| Catalog.Application.Features.Categories.Create.V1.CreateCategoryCommand | 1 | 0 | 1 | 48 | 100% | 0 | 0 | |||||||
| Catalog.Application.Features.Categories.Create.V1.CreateCategoryCommandHandler | 11 | 0 | 11 | 48 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Features.Categories.GetById.V1.GetCategoryByIdQuery | 1 | 0 | 1 | 42 | 100% | 0 | 0 | |||||||
| Catalog.Application.Features.Categories.GetById.V1.GetCategoryByIdQueryHandler | 5 | 0 | 5 | 42 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Features.ProductPrices.Response.ProductPriceResponse | 2 | 0 | 2 | 18 | 100% | 0 | 0 | |||||||
| Catalog.Application.Features.Products.GetProductById.V1.GetProductByIdRequest | 1 | 0 | 1 | 13 | 100% | 0 | 0 | |||||||
| Catalog.Application.Features.Products.GetProductById.V1.GetProductByIdValidator | 4 | 0 | 4 | 20 | 100% | 0 | 0 | |||||||
| Catalog.Application.ProductPriceTypes.ReadModels.ProductPriceTypeReadModel | 2 | 0 | 2 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Application.Products.Features.CreateProduct.V1.CreateProductCommand | 8 | 0 | 8 | 87 | 100% | 0 | 0 | |||||||
| Catalog.Application.Products.Features.CreateProduct.V1.CreateProductCommandHandler | 25 | 0 | 25 | 87 | 100% | 4 | 4 | 100% | ||||||
| Catalog.Application.Products.Features.CreateProduct.V1.CreateProductRequest | 10 | 0 | 10 | 51 | 100% | 0 | 0 | |||||||
| Catalog.Application.Products.Features.CreateProduct.V1.CreateProductValidator | 37 | 0 | 37 | 60 | 100% | 0 | 0 | |||||||
| Catalog.Application.Products.Features.GetProductById.V1.GetProductByIdQuery | 1 | 0 | 1 | 43 | 100% | 0 | 0 | |||||||
| Catalog.Application.Products.Features.GetProductById.V1.GetProductByIdQueryHandler | 5 | 0 | 5 | 43 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Products.Mappings.ProductMappings | 21 | 22 | 43 | 89 | 48.8% | 4 | 8 | 50% | ||||||
| Catalog.Application.Products.ReadModels.ProductPriceReadModel | 5 | 0 | 5 | 34 | 100% | 0 | 0 | |||||||
| Catalog.Application.Products.ReadModels.ProductReadModel | 7 | 3 | 10 | 59 | 70% | 0 | 0 | |||||||
| Catalog.Application.Products.Responses.ProductResponse | 12 | 0 | 12 | 74 | 100% | 0 | 0 | |||||||
| Catalog.Application.Promotions.ReadModels.PromotionReadModel | 5 | 1 | 6 | 39 | 83.3% | 0 | 0 | |||||||
| Catalog.Application.Promotions.Response.PromotionResponse | 4 | 0 | 4 | 28 | 100% | 0 | 0 | |||||||
| Catalog.Application.Suppliers.ReadModels.SupplierReadModel | 3 | 3 | 6 | 39 | 50% | 0 | 0 | |||||||
| Microsoft.AspNetCore.OpenApi.Generated | 0 | 407 | 407 | 789 | 0% | 0 | 206 | 0% | ||||||
| System.Runtime.CompilerServices | 0 | 2 | 2 | 23 | 0% | 0 | 0 | |||||||
| Catalog.Domain | 554 | 62 | 616 | 2379 | 89.9% | 249 | 284 | 87.6% | ||||||
| Catalog.Domain.Entities.BrandAggregate.Brand | 44 | 0 | 44 | 146 | 100% | 36 | 36 | 100% | ||||||
| Catalog.Domain.Entities.BrandAggregate.Errors.BrandErrors | 15 | 0 | 15 | 45 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.BrandAggregate.Errors.WebsiteErrors | 6 | 0 | 6 | 24 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.BrandAggregate.Events.BrandCreatedDomainEvent | 0 | 3 | 3 | 25 | 0% | 0 | 0 | |||||||
| Catalog.Domain.Entities.BrandAggregate.Specifications.BrandByIdSpecification | 3 | 0 | 3 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.BrandAggregate.Specifications.BrandByNameSpecification | 3 | 2 | 5 | 28 | 60% | 1 | 2 | 50% | ||||||
| Catalog.Domain.Entities.BrandAggregate.Specifications.BrandListSpecification | 0 | 15 | 15 | 50 | 0% | 0 | 10 | 0% | ||||||
| Catalog.Domain.Entities.BrandAggregate.ValueObjects.Website | 14 | 0 | 14 | 54 | 100% | 8 | 8 | 100% | ||||||
| Catalog.Domain.Entities.CategoryAggregate.Category | 31 | 0 | 31 | 114 | 100% | 20 | 20 | 100% | ||||||
| Catalog.Domain.Entities.CategoryAggregate.Errors.CategoryErrors | 9 | 0 | 9 | 31 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.CategoryAggregate.Specifications.CategoriesByIdsSpecification | 3 | 0 | 3 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.CategoryAggregate.Specifications.CategoryByIdSpecification | 3 | 0 | 3 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.ProductAggregate.Errors.ProductErrors | 30 | 0 | 30 | 80 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.ProductAggregate.Errors.ProductPriceErrors | 18 | 0 | 18 | 51 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.ProductAggregate.Events.ProductCreatedDomainEvent | 3 | 0 | 3 | 25 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.ProductAggregate.Product | 55 | 0 | 55 | 245 | 100% | 19 | 20 | 95% | ||||||
| Catalog.Domain.Entities.ProductAggregate.ProductPrice | 34 | 2 | 36 | 131 | 94.4% | 22 | 22 | 100% | ||||||
| Catalog.Domain.Entities.ProductAggregate.Specifications.ProductByIdSpecification | 9 | 0 | 9 | 29 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Domain.Entities.ProductPriceTypeAggregate.Errors.ProductPriceTypeErrors | 12 | 0 | 12 | 37 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.ProductPriceTypeAggregate.ProductPriceType | 32 | 0 | 32 | 111 | 100% | 22 | 22 | 100% | ||||||
| Catalog.Domain.Entities.ProductPriceTypeAggregate.Specifications.ProductPriceTypeByIdSpecification | 3 | 0 | 3 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.PromotionAggregate.Errors.PromotionErrors | 12 | 0 | 12 | 37 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.PromotionAggregate.Promotion | 45 | 0 | 45 | 165 | 100% | 41 | 42 | 97.6% | ||||||
| Catalog.Domain.Entities.PromotionAggregate.Specifications.PromotionByIdSpecification | 5 | 0 | 5 | 25 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Domain.Entities.SupplierAggregate.Errors.SupplierErrors | 12 | 0 | 12 | 37 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.SupplierAggregate.Specifications.SupplierByIdSpecification | 3 | 0 | 3 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.SupplierAggregate.Supplier | 44 | 0 | 44 | 139 | 100% | 42 | 42 | 100% | ||||||
| System.Text.RegularExpressions.Generated | 54 | 20 | 74 | 262 | 72.9% | 17 | 28 | 60.7% | ||||||
| System.Text.RegularExpressions.Generated. | 19 | 17 | 36 | 247 | 52.7% | 6 | 14 | 42.8% | ||||||
| System.Text.RegularExpressions.Generated. | 33 | 3 | 36 | 146 | 91.6% | 11 | 14 | 78.5% | ||||||
| Catalog.Infrastructure | 553 | 7113 | 7666 | 9980 | 7.2% | 34 | 286 | 11.8% | ||||||
| Catalog.Infrastructure.Caching.BrandCache | 1 | 0 | 1 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Caching.CategoryCache | 1 | 0 | 1 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Caching.ProductCache | 1 | 0 | 1 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.DependencyInjection.DatabaseServiceExtensions | 23 | 2 | 25 | 68 | 92% | 0 | 0 | |||||||
| Catalog.Infrastructure.DependencyInjection.InfrastructureServiceExtensions | 71 | 24 | 95 | 176 | 74.7% | 17 | 30 | 56.6% | ||||||
| Catalog.Infrastructure.DesignTime.CatalogDesignTimeDbContextFactory | 0 | 20 | 20 | 61 | 0% | 0 | 30 | 0% | ||||||
| Catalog.Infrastructure.Options.MinioOptions | 0 | 4 | 4 | 35 | 0% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.ApplicationReadDbContext | 13 | 0 | 13 | 73 | 100% | 1 | 2 | 50% | ||||||
| Catalog.Infrastructure.Persistence.ApplicationWriteDbContext | 13 | 0 | 13 | 74 | 100% | 1 | 2 | 50% | ||||||
| Catalog.Infrastructure.Persistence.Config.Read.BrandReadConfig | 11 | 0 | 11 | 36 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Read.CategoryReadConfig | 14 | 0 | 14 | 41 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Read.ProductPriceReadConfig | 15 | 0 | 15 | 39 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Read.ProductPriceTypeReadConfig | 11 | 0 | 11 | 36 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Read.ProductReadConfig | 26 | 0 | 26 | 59 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Read.PromotionReadConfig | 18 | 0 | 18 | 46 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Read.SupplierReadConfig | 17 | 0 | 17 | 42 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Write.BrandWriteConfig | 19 | 0 | 19 | 45 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Write.CategoryWriteConfig | 21 | 0 | 21 | 47 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Write.ProductPriceTypeWriteConfig | 11 | 0 | 11 | 36 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Write.ProductPriceWriteConfig | 18 | 0 | 18 | 44 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Write.ProductWriteConfig | 38 | 0 | 38 | 70 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Write.PromotionWriteConfig | 25 | 0 | 25 | 53 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Write.SupplierWriteConfig | 11 | 0 | 11 | 33 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Migrations.MySql.InitialMySql | 0 | 2430 | 2430 | 2697 | 0% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Migrations.PostgreSQL.ApplicationWriteDbContextModelSnapshot | 0 | 694 | 694 | 737 | 0% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Migrations.PostgreSQL.InitialPostgreSQL | 0 | 1106 | 1106 | 1212 | 0% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Migrations.SqlServer.InitialSqlServer | 0 | 2511 | 2511 | 2789 | 0% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Repositories.Read.BrandReadRepository | 4 | 0 | 4 | 26 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Repositories.Read.CategoryReadRepository | 36 | 0 | 36 | 90 | 100% | 7 | 8 | 87.5% | ||||||
| Catalog.Infrastructure.Persistence.Repositories.Read.ProductPriceReadRepository | 2 | 0 | 2 | 21 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Repositories.Read.ProductPriceTypeReadRepository | 17 | 0 | 17 | 54 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Infrastructure.Persistence.Repositories.Read.ProductReadRepository | 33 | 0 | 33 | 84 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Infrastructure.Persistence.Repositories.Read.PromotionReadRepository | 29 | 0 | 29 | 79 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Infrastructure.Persistence.Repositories.Read.SupplierReadRepository | 18 | 0 | 18 | 57 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Infrastructure.Persistence.Repositories.Write.BrandWriteRepository | 6 | 0 | 6 | 50 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Repositories.Write.CategoryWriteRepository | 5 | 4 | 9 | 43 | 55.5% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Repositories.Write.ProductPriceTypeWriteRepository | 5 | 0 | 5 | 35 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Repositories.Write.ProductWriteRepository | 5 | 0 | 5 | 35 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Repositories.Write.PromotionWriteRepository | 10 | 0 | 10 | 44 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Repositories.Write.SupplierWriteRepository | 5 | 0 | 5 | 35 | 100% | 0 | 0 | |||||||
| Microsoft.AspNetCore.OpenApi.Generated | 0 | 316 | 316 | 698 | 0% | 0 | 206 | 0% | ||||||
| System.Runtime.CompilerServices | 0 | 2 | 2 | 23 | 0% | 0 | 0 | |||||||
| Customer.Application | 281 | 283 | 564 | 1704 | 49.8% | 34 | 244 | 13.9% | ||||||
| Customer.Application.Tenants.Commands.CreateTenant.CreateTenantCommand | 8 | 0 | 8 | 25 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.Commands.CreateTenant.CreateTenantCommandHandler | 122 | 4 | 126 | 247 | 96.8% | 20 | 24 | 83.3% | ||||||
| Customer.Application.Tenants.Commands.CreateTenant.CreateTenantCommandValidator | 21 | 0 | 21 | 41 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.Commands.UpdateMigrationStatus.UpdateMigrationStatusCommand | 7 | 0 | 7 | 21 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.Commands.UpdateMigrationStatus.UpdateMigrationStatusCommandHandler | 20 | 0 | 20 | 57 | 100% | 4 | 4 | 100% | ||||||
| Customer.Application.Tenants.DTOs.ServiceDatabaseInfoDto | 3 | 0 | 3 | 22 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.DTOs.TenantDatabaseMetadataDto | 4 | 0 | 4 | 126 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.DTOs.TenantDto | 11 | 0 | 11 | 126 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.DTOs.TenantMigrationStatusDto | 6 | 0 | 6 | 126 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.EventHandlers.TenantCreatedHandler | 11 | 0 | 11 | 43 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.Queries.CheckServiceReadiness.CheckServiceReadinessQuery | 1 | 0 | 1 | 11 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.Queries.CheckServiceReadiness.CheckServiceReadinessQueryHandler | 12 | 0 | 12 | 42 | 100% | 4 | 4 | 100% | ||||||
| Customer.Application.Tenants.Queries.GetTenantById.GetTenantByIdQuery | 1 | 0 | 1 | 11 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.Queries.GetTenantById.GetTenantByIdQueryHandler | 36 | 0 | 36 | 64 | 100% | 2 | 2 | 100% | ||||||
| Customer.Application.Tenants.Queries.GetTenantDatabaseInfo.GetTenantDatabaseInfoQuery | 1 | 0 | 1 | 12 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.Queries.GetTenantDatabaseInfo.GetTenantDatabaseInfoQueryHandler | 17 | 0 | 17 | 48 | 100% | 4 | 4 | 100% | ||||||
| Microsoft.AspNetCore.OpenApi.Generated | 0 | 277 | 277 | 659 | 0% | 0 | 206 | 0% | ||||||
| System.Runtime.CompilerServices | 0 | 2 | 2 | 23 | 0% | 0 | 0 | |||||||
| Customer.Domain | 105 | 2 | 107 | 381 | 98.1% | 22 | 22 | 100% | ||||||
| Customer.Domain.Entities.TenantAggregate.Events.TenantCreatedDomainEvent | 17 | 0 | 17 | 56 | 100% | 0 | 0 | |||||||
| Customer.Domain.Entities.TenantAggregate.Tenant | 63 | 0 | 63 | 195 | 100% | 10 | 10 | 100% | ||||||
| Customer.Domain.Entities.TenantAggregate.TenantDatabaseMetadata | 6 | 1 | 7 | 42 | 85.7% | 0 | 0 | |||||||
| Customer.Domain.Entities.TenantAggregate.TenantMigrationStatus | 19 | 1 | 20 | 88 | 95% | 12 | 12 | 100% | ||||||
| Customer.Infrastructure | 95 | 321 | 416 | 1076 | 22.8% | 0 | 222 | 0% | ||||||
| Customer.Infrastructure.DependencyInjection.InfrastructureServiceExtensions | 0 | 56 | 56 | 114 | 0% | 0 | 12 | 0% | ||||||
| Customer.Infrastructure.Persistence.Config.Read.TenantReadConfig | 0 | 26 | 26 | 57 | 0% | 0 | 0 | |||||||
| Customer.Infrastructure.Persistence.Config.Write.TenantWriteConfig | 74 | 0 | 74 | 106 | 100% | 0 | 0 | |||||||
| Customer.Infrastructure.Persistence.CustomerReadDbContext | 0 | 7 | 7 | 39 | 0% | 0 | 2 | 0% | ||||||
| Customer.Infrastructure.Persistence.CustomerWriteDbContext | 3 | 4 | 7 | 40 | 42.8% | 0 | 2 | 0% | ||||||
| Customer.Infrastructure.Persistence.Repositories.Write.TenantWriteRepository | 13 | 0 | 13 | 63 | 100% | 0 | 0 | |||||||
| Customer.Infrastructure.Persistence.UnitOfWork | 5 | 0 | 5 | 26 | 100% | 0 | 0 | |||||||
| Microsoft.AspNetCore.OpenApi.Generated | 0 | 226 | 226 | 608 | 0% | 0 | 206 | 0% | ||||||
| System.Runtime.CompilerServices | 0 | 2 | 2 | 23 | 0% | 0 | 0 | |||||||
| SharedKernel.Core | 88 | 357 | 445 | 1609 | 19.7% | 22 | 236 | 9.3% | ||||||
| SharedKernel.Core.Domain.BaseEntity | 1 | 0 | 1 | 139 | 100% | 0 | 0 | |||||||
| SharedKernel.Core.Domain.BaseEntity`1 | 24 | 4 | 28 | 139 | 85.7% | 3 | 4 | 75% | ||||||
| SharedKernel.Core.Domain.ReadModelBase`1 | 1 | 7 | 8 | 53 | 12.5% | 0 | 0 | |||||||
| SharedKernel.Core.Domain.ValueObject | 15 | 2 | 17 | 56 | 88.2% | 15 | 20 | 75% | ||||||
| SharedKernel.Core.Events.DomainEvent | 5 | 3 | 8 | 33 | 62.5% | 0 | 0 | |||||||
| SharedKernel.Core.Events.IntegrationEvent | 5 | 3 | 8 | 33 | 62.5% | 0 | 0 | |||||||
| SharedKernel.Core.Exceptions.ConfigurationMissingException | 0 | 6 | 6 | 37 | 0% | 0 | 0 | |||||||
| SharedKernel.Core.Exceptions.CustomException | 0 | 11 | 11 | 50 | 0% | 0 | 0 | |||||||
| SharedKernel.Core.Exceptions.InvalidDatabaseStrategyException | 0 | 6 | 6 | 37 | 0% | 0 | 0 | |||||||
| SharedKernel.Core.Exceptions.InvalidOperationException | 0 | 6 | 6 | 34 | 0% | 0 | 0 | |||||||
| SharedKernel.Core.Exceptions.InvalidTransactionException | 0 | 6 | 6 | 34 | 0% | 0 | 0 | |||||||
| SharedKernel.Core.Pagination.PagedList`1 | 14 | 2 | 16 | 67 | 87.5% | 2 | 4 | 50% | ||||||
| SharedKernel.Core.Pagination.PaginationParameters | 6 | 0 | 6 | 38 | 100% | 1 | 2 | 50% | ||||||
| SharedKernel.Core.Pricing.DatabaseOptions | 0 | 189 | 189 | 374 | 0% | 0 | 66 | 0% | ||||||
| SharedKernel.Core.Pricing.DatabaseProvider | 12 | 46 | 58 | 188 | 20.6% | 1 | 74 | 1.3% | ||||||
| SharedKernel.Core.Pricing.DatabaseStrategy | 5 | 40 | 45 | 156 | 11.1% | 0 | 60 | 0% | ||||||
| SharedKernel.Core.Pricing.PricingOption | 0 | 6 | 6 | 37 | 0% | 0 | 0 | |||||||
| SharedKernel.Core.Pricing.TenantPlan | 0 | 17 | 17 | 82 | 0% | 0 | 6 | 0% | ||||||
| SharedKernel.Core.Pricing.UsageMetrics | 0 | 3 | 3 | 22 | 0% | 0 | 0 | |||||||
| SharedKernel.Events | 17 | 13 | 30 | 130 | 56.6% | 0 | 0 | |||||||
| SharedKernel.Events.BrandCreatedIntegrationEvent | 0 | 6 | 6 | 32 | 0% | 0 | 0 | |||||||
| SharedKernel.Events.TenantCreatedIntegrationEvent | 17 | 2 | 19 | 64 | 89.4% | 0 | 0 | |||||||
| SharedKernel.Events.TenantDatabaseProvisionedIntegrationEvent | 0 | 5 | 5 | 34 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure | 35 | 1479 | 1514 | 4127 | 2.3% | 2 | 452 | 0.4% | ||||||
| Microsoft.AspNetCore.OpenApi.Generated | 0 | 584 | 584 | 966 | 0% | 0 | 206 | 0% | ||||||
| SharedKernel.Infrastructure.Auth.Extensions | 0 | 122 | 122 | 168 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.Behaviors.Extensions | 0 | 2 | 2 | 22 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.Behaviors.LoggingBehavior`2 | 25 | 0 | 25 | 72 | 100% | 2 | 2 | 100% | ||||||
| SharedKernel.Infrastructure.Behaviors.TransactionalBehavior`2 | 10 | 0 | 10 | 45 | 100% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.Caching.CachingOptions | 0 | 2 | 2 | 20 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.Caching.Extensions | 0 | 22 | 22 | 58 | 0% | 0 | 2 | 0% | ||||||
| SharedKernel.Infrastructure.Endpoints.Extensions | 0 | 43 | 43 | 81 | 0% | 0 | 10 | 0% | ||||||
| SharedKernel.Infrastructure.Endpoints.FastEndpointsExtensions | 0 | 61 | 61 | 158 | 0% | 0 | 35 | 0% | ||||||
| SharedKernel.Infrastructure.Extensions | 0 | 49 | 49 | 108 | 0% | 0 | 2 | 0% | ||||||
| SharedKernel.Infrastructure.Logging.Extensions | 0 | 63 | 63 | 138 | 0% | 0 | 18 | 0% | ||||||
| SharedKernel.Infrastructure.Logging.SerilogOptions | 0 | 7 | 7 | 45 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.Middlewares.GlobalExceptionHandlerMiddleware | 0 | 47 | 47 | 97 | 0% | 0 | 12 | 0% | ||||||
| SharedKernel.Infrastructure.MultiTenant.CustomerApiTenantOptions | 0 | 6 | 6 | 402 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.MultiTenant.CustomerApiTenantStore | 0 | 232 | 232 | 452 | 0% | 0 | 56 | 0% | ||||||
| SharedKernel.Infrastructure.MultiTenant.MultiTenantExtensions | 0 | 102 | 102 | 402 | 0% | 0 | 87 | 0% | ||||||
| SharedKernel.Infrastructure.MultiTenant.TeckCloudMultiTenancyOptions | 0 | 13 | 13 | 402 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.MultiTenant.TenantDetails | 0 | 11 | 11 | 65 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.MultiTenant.TenantInfoExtensions | 0 | 21 | 21 | 111 | 0% | 0 | 12 | 0% | ||||||
| SharedKernel.Infrastructure.OpenApi.OpenApiDocumentRegistry | 0 | 4 | 4 | 32 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.OpenApi.OpenApiExtensions | 0 | 48 | 48 | 90 | 0% | 0 | 8 | 0% | ||||||
| SharedKernel.Infrastructure.OpenApi.OpenApiOptions | 0 | 6 | 6 | 47 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.OpenTelemetry.Extensions | 0 | 17 | 17 | 32 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.Options.AppOptions | 0 | 3 | 3 | 32 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.Options.Extensions | 0 | 12 | 12 | 59 | 0% | 0 | 2 | 0% | ||||||
| System.Runtime.CompilerServices | 0 | 2 | 2 | 23 | 0% | 0 | 0 | |||||||
| SharedKernel.Migration | 147 | 97 | 244 | 722 | 60.2% | 27 | 44 | 61.3% | ||||||
| SharedKernel.Migration.DbUpMigrationRunner | 47 | 39 | 86 | 197 | 54.6% | 14 | 24 | 58.3% | ||||||
| SharedKernel.Migration.MigrationServiceBase | 11 | 58 | 69 | 146 | 15.9% | 9 | 16 | 56.2% | ||||||
| SharedKernel.Migration.Models.MigrationOptions | 7 | 0 | 7 | 42 | 100% | 0 | 0 | |||||||
| SharedKernel.Migration.Models.MigrationResult | 23 | 0 | 23 | 71 | 100% | 0 | 0 | |||||||
| SharedKernel.Migration.Services.CustomerApiClient | 56 | 0 | 56 | 133 | 100% | 4 | 4 | 100% | ||||||
| SharedKernel.Migration.Services.ServiceDatabaseInfo | 3 | 0 | 3 | 133 | 100% | 0 | 0 | |||||||
| SharedKernel.Persistence | 328 | 1246 | 1574 | 5629 | 20.8% | 76 | 612 | 12.4% | ||||||
| Microsoft.AspNetCore.OpenApi.Generated | 0 | 382 | 382 | 764 | 0% | 0 | 206 | 0% | ||||||
| SharedKernel.Persistence.Caching.GenericCacheService`2 | 40 | 0 | 40 | 138 | 100% | 4 | 4 | 100% | ||||||
| SharedKernel.Persistence.Database.DatabaseOptions | 0 | 2 | 2 | 19 | 0% | 0 | 0 | |||||||
| SharedKernel.Persistence.Database.EFCore.BaseDbContext | 13 | 6 | 19 | 110 | 68.4% | 9 | 14 | 64.2% | ||||||
| SharedKernel.Persistence.Database.EFCore.ByIdSpecification`2 | 3 | 0 | 3 | 350 | 100% | 0 | 0 | |||||||
| SharedKernel.Persistence.Database.EFCore.ByIdsSpecification`2 | 6 | 5 | 11 | 350 | 54.5% | 1 | 2 | 50% | ||||||
| SharedKernel.Persistence.Database.EFCore.Config.ConfigurationExtensions | 17 | 0 | 17 | 43 | 100% | 0 | 0 | |||||||
| SharedKernel.Persistence.Database.EFCore.GenericReadRepository`3 | 51 | 0 | 51 | 350 | 100% | 4 | 4 | 100% | ||||||
| SharedKernel.Persistence.Database.EFCore.GenericSpecification`1 | 3 | 0 | 3 | 350 | 100% | 0 | 0 | |||||||
| SharedKernel.Persistence.Database.EFCore.GenericWriteRepository`3 | 71 | 19 | 90 | 366 | 78.8% | 20 | 32 | 62.5% | ||||||
| SharedKernel.Persistence.Database.EFCore.Interceptors.AuditingInterceptor | 13 | 0 | 13 | 78 | 100% | 12 | 16 | 75% | ||||||
| SharedKernel.Persistence.Database.EFCore.Interceptors.SoftDeleteInterceptor | 14 | 2 | 16 | 60 | 87.5% | 5 | 10 | 50% | ||||||
| SharedKernel.Persistence.Database.EFCore.ModelBuilderExtensions | 19 | 6 | 25 | 77 | 76% | 13 | 22 | 59% | ||||||
| SharedKernel.Persistence.Database.EFCore.QueryableExtensions | 0 | 12 | 12 | 44 | 0% | 0 | 6 | 0% | ||||||
| SharedKernel.Persistence.Database.EFCore.UnitOfWork`1 | 15 | 32 | 47 | 183 | 31.9% | 4 | 22 | 18.1% | ||||||
| SharedKernel.Persistence.Database.Extensions | 0 | 115 | 115 | 310 | 0% | 0 | 58 | 0% | ||||||
| SharedKernel.Persistence.Database.Migrations.EFCoreMigrationRunner`1 | 0 | 90 | 90 | 182 | 0% | 0 | 30 | 0% | ||||||
| SharedKernel.Persistence.Database.Migrations.MigrationResult | 0 | 23 | 23 | 159 | 0% | 0 | 0 | |||||||
| SharedKernel.Persistence.Database.Migrations.MigrationServiceExtensions | 11 | 8 | 19 | 70 | 57.8% | 2 | 2 | 100% | ||||||
| SharedKernel.Persistence.Database.Migrations.MigrationStatus | 0 | 6 | 6 | 159 | 0% | 0 | 0 | |||||||
| SharedKernel.Persistence.Database.Migrations.MultiTenantMigrationService`1 | 0 | 169 | 169 | 370 | 0% | 0 | 56 | 0% | ||||||
| SharedKernel.Persistence.Database.MultiTenant.CurrentTenantDbContext`1 | 0 | 4 | 4 | 43 | 0% | 0 | 2 | 0% | ||||||
| SharedKernel.Persistence.Database.MultiTenant.MultiTenantDatabaseHealthCheck | 0 | 15 | 15 | 61 | 0% | 0 | 2 | 0% | ||||||
| SharedKernel.Persistence.Database.MultiTenant.MultiTenantDbExtensions | 52 | 94 | 146 | 276 | 35.6% | 2 | 32 | 6.2% | ||||||
| SharedKernel.Persistence.Database.MultiTenant.TenantConnectionResult | 0 | 39 | 39 | 134 | 0% | 0 | 0 | |||||||
| SharedKernel.Persistence.Database.MultiTenant.TenantDbConnectionResolver | 0 | 172 | 172 | 425 | 0% | 0 | 82 | 0% | ||||||
| SharedKernel.Persistence.Database.MultiTenant.TenantMigrationOptions | 0 | 6 | 6 | 41 | 0% | 0 | 0 | |||||||
| SharedKernel.Persistence.EventHandlers.TenantDatabaseProvisionedHandler | 0 | 37 | 37 | 94 | 0% | 0 | 10 | 0% | ||||||
| System.Runtime.CompilerServices | 0 | 2 | 2 | 23 | 0% | 0 | 0 | |||||||
| SharedKernel.Secrets | 38 | 214 | 252 | 797 | 15% | 14 | 94 | 14.8% | ||||||
| SharedKernel.Secrets.DatabaseCredentials | 32 | 13 | 45 | 140 | 71.1% | 14 | 20 | 70% | ||||||
| SharedKernel.Secrets.UserCredentials | 2 | 0 | 2 | 140 | 100% | 0 | 0 | |||||||
| SharedKernel.Secrets.VaultOptions | 0 | 12 | 12 | 93 | 0% | 0 | 0 | |||||||
| SharedKernel.Secrets.VaultSecretsManager | 0 | 185 | 185 | 380 | 0% | 0 | 74 | 0% | ||||||
| SharedKernel.Secrets.VaultServiceExtensions | 4 | 4 | 8 | 44 | 50% | 0 | 0 | |||||||
| Teck.Cloud.ServiceDefaults | 0 | 353 | 353 | 857 | 0% | 0 | 222 | 0% | ||||||
| Microsoft.AspNetCore.OpenApi.Generated | 0 | 215 | 215 | 597 | 0% | 0 | 206 | 0% | ||||||
| Microsoft.Extensions.Hosting.Extensions | 0 | 136 | 136 | 237 | 0% | 0 | 16 | 0% | ||||||
| System.Runtime.CompilerServices | 0 | 2 | 2 | 23 | 0% | 0 | 0 | |||||||
| Parser: | +MultiReport (8x Cobertura) | +
|---|---|
| Assemblies: | +14 | +
| Classes: | +286 | +
| Files: | +244 | +
| Coverage date: | +10-02-2026 - 23:52:31 - 10-02-2026 - 23:53:56 | +
| Covered lines: | +2628 | +
|---|---|
| Uncovered lines: | +14036 | +
| Coverable lines: | +16664 | +
| Total lines: | +31408 | +
| Line coverage: | +15.7% | +
| Covered branches: | +515 | +
|---|---|
| Total branches: | +3398 | +
| Branch coverage: | +15.1% | +
Feature is only available for sponsors
+Upgrade to PRO version +| Line coverage | Branch coverage | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Name | Covered | Uncovered | Coverable | Total | Percentage | Covered | Total | Percentage | ||||||
| Catalog.Api | 0 | 2048 | 2048 | 8506 | 0% | 0 | 432 | 0% | ||||||
| Catalog.Api.Endpoints.Admin.Migrations.V1.TriggerMigrationEndpoint | 0 | 54 | 54 | 160 | 0% | 0 | 12 | 0% | ||||||
| Catalog.Api.Endpoints.Admin.Migrations.V1.TriggerMigrationRequest | 0 | 1 | 1 | 160 | 0% | 0 | 0 | |||||||
| Catalog.Api.Endpoints.Admin.Migrations.V1.TriggerMigrationResponse | 0 | 6 | 6 | 160 | 0% | 0 | 0 | |||||||
| Catalog.Api.Endpoints.Brands.BulkDeleteBrands.V1.BulkDeleteBrandsEndpoint | 0 | 14 | 14 | 52 | 0% | 0 | 0 | |||||||
| Catalog.Api.Endpoints.Brands.CreateBrand.V1.CreateBrandEndpoint | 0 | 11 | 11 | 50 | 0% | 0 | 2 | 0% | ||||||
| Catalog.Api.Endpoints.Brands.DeleteBrand.V1.DeleteBrandEndpoint | 0 | 11 | 11 | 49 | 0% | 0 | 0 | |||||||
| Catalog.Api.Endpoints.Brands.GetBrandById.V1.GetBrandByIdEndpoint | 0 | 11 | 11 | 47 | 0% | 0 | 0 | |||||||
| Catalog.Api.Endpoints.Brands.GetPaginatedBrands.V1.GetPaginatedBrandsEndpoint | 0 | 11 | 11 | 50 | 0% | 0 | 0 | |||||||
| Catalog.Api.Endpoints.Brands.UpdateBrand.V1.UpdateBrandEndpoint | 0 | 10 | 10 | 48 | 0% | 0 | 0 | |||||||
| Catalog.Api.Endpoints.Categories.GetCategoryById.V1.GetCategoryByIdEndpoint | 0 | 15 | 15 | 45 | 0% | 0 | 0 | |||||||
| Catalog.Api.Endpoints.Products.GetProductById.V1.GetProductByIdEndpoint | 0 | 12 | 12 | 47 | 0% | 0 | 0 | |||||||
| Catalog.Api.Extensions.MediatorExtension | 0 | 14 | 14 | 41 | 0% | 0 | 0 | |||||||
| Mediator.AssemblyReference | 0 | 6 | 6 | 37 | 0% | 0 | 0 | |||||||
| Mediator.Internals.CommandHandlerWrapper`2 | 0 | 20 | 20 | 382 | 0% | 0 | 6 | 0% | ||||||
| Mediator.Internals.ContainerMetadata | 0 | 43 | 43 | 749 | 0% | 0 | 0 | |||||||
| Mediator.Internals.NotificationHandlerWrapper`1 | 0 | 11 | 11 | 661 | 0% | 0 | 4 | 0% | ||||||
| Mediator.Internals.QueryHandlerWrapper`2 | 0 | 20 | 20 | 535 | 0% | 0 | 6 | 0% | ||||||
| Mediator.Internals.RequestHandlerWrapper`2 | 0 | 20 | 20 | 229 | 0% | 0 | 6 | 0% | ||||||
| Mediator.Internals.StreamCommandHandlerWrapper`2 | 0 | 21 | 21 | 459 | 0% | 0 | 12 | 0% | ||||||
| Mediator.Internals.StreamQueryHandlerWrapper`2 | 0 | 21 | 21 | 612 | 0% | 0 | 12 | 0% | ||||||
| Mediator.Internals.StreamRequestHandlerWrapper`2 | 0 | 21 | 21 | 306 | 0% | 0 | 12 | 0% | ||||||
| Mediator.Mediator | 0 | 219 | 219 | 1591 | 0% | 0 | 146 | 0% | ||||||
| Mediator.MediatorOptions | 0 | 7 | 7 | 54 | 0% | 0 | 0 | |||||||
| Mediator.MediatorOptionsAttribute | 0 | 3 | 3 | 31 | 0% | 0 | 0 | |||||||
| Microsoft.AspNetCore.OpenApi.Generated | 0 | 1370 | 1370 | 1760 | 0% | 0 | 206 | 0% | ||||||
| Microsoft.Extensions.DependencyInjection.MediatorDependencyInjectionExtensions | 0 | 69 | 69 | 119 | 0% | 0 | 6 | 0% | ||||||
| Program | 0 | 25 | 25 | 49 | 0% | 0 | 2 | 0% | ||||||
| System.Runtime.CompilerServices | 0 | 2 | 2 | 23 | 0% | 0 | 0 | |||||||
| Catalog.Application | 387 | 448 | 835 | 3321 | 46.3% | 35 | 248 | 14.1% | ||||||
| Catalog.Application.Brands.Features.CreateBrand.V1.CreateBrandCommand | 1 | 0 | 1 | 59 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.CreateBrand.V1.CreateBrandCommandHandler | 11 | 0 | 11 | 59 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Brands.Features.CreateBrand.V1.CreateBrandRequest | 1 | 2 | 3 | 23 | 33.3% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.CreateBrand.V1.CreateBrandValidator | 12 | 0 | 12 | 33 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.DeleteBrand.V1.DeleteBrandCommand | 1 | 0 | 1 | 66 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.DeleteBrand.V1.DeleteBrandCommandHandler | 13 | 0 | 13 | 66 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Brands.Features.DeleteBrand.V1.DeleteBrandRequest | 1 | 0 | 1 | 13 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.DeleteBrand.V1.DeleteBrandValidator | 4 | 0 | 4 | 20 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.DeleteBrands.V1.DeleteBrandsCommand | 1 | 0 | 1 | 50 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.DeleteBrands.V1.DeleteBrandsCommandHandler | 8 | 0 | 8 | 50 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Brands.Features.DeleteBrands.V1.DeleteBrandsRequest | 1 | 0 | 1 | 13 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.DeleteBrands.V1.DeleteBrandsValidator | 4 | 0 | 4 | 21 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.GetBrandById.V1.GetBrandByIdQuery | 1 | 0 | 1 | 43 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.GetBrandById.V1.GetBrandByIdQueryHandler | 5 | 0 | 5 | 43 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Brands.Features.GetBrandById.V1.GetBrandByIdRequest | 1 | 0 | 1 | 13 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.GetBrandById.V1.GetBrandByIdValidator | 4 | 0 | 4 | 20 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.GetPaginatedBrands.V1.GetPaginatedBrandsQuery | 1 | 0 | 1 | 64 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.GetPaginatedBrands.V1.GetPaginatedBrandsQueryHandler | 14 | 0 | 14 | 64 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.GetPaginatedBrands.V1.GetPaginatedBrandsRequest | 1 | 0 | 1 | 15 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.GetPaginatedBrands.V1.GetPaginatedBrandsValidator | 8 | 0 | 8 | 24 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.Responses.BrandResponse | 5 | 0 | 5 | 33 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.UpdateBrand.V1.UpdateBrandCommand | 1 | 0 | 1 | 68 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.UpdateBrand.V1.UpdateBrandCommandHandler | 14 | 1 | 15 | 68 | 93.3% | 3 | 4 | 75% | ||||||
| Catalog.Application.Brands.Features.UpdateBrand.V1.UpdateBrandRequest | 4 | 0 | 4 | 28 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Features.UpdateBrand.V1.UpdateBrandValidator | 9 | 0 | 9 | 25 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Mappings.BrandMapper | 23 | 4 | 27 | 61 | 85.1% | 2 | 4 | 50% | ||||||
| Catalog.Application.Brands.Mappings.CategoryMapper | 8 | 0 | 8 | 23 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.ReadModels.BrandReadModel | 3 | 0 | 3 | 24 | 100% | 0 | 0 | |||||||
| Catalog.Application.Brands.Specifications.BrandCountSpecification | 5 | 0 | 5 | 53 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Brands.Specifications.BrandPaginationSpecification | 7 | 0 | 7 | 53 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Categories.Features.CreateCategory.V1.CreateCategoryCommand | 1 | 0 | 1 | 48 | 100% | 0 | 0 | |||||||
| Catalog.Application.Categories.Features.CreateCategory.V1.CreateCategoryCommandHandler | 11 | 0 | 11 | 48 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Categories.Features.CreateCategory.V1.CreateCategoryRequest | 3 | 0 | 3 | 10 | 100% | 0 | 0 | |||||||
| Catalog.Application.Categories.Features.CreateCategory.V1.CreateCategoryValidator | 12 | 0 | 12 | 32 | 100% | 0 | 0 | |||||||
| Catalog.Application.Categories.Features.GetCategoryById.V1.GetBrandByIdQueryHandler | 5 | 0 | 5 | 42 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Categories.Features.GetCategoryById.V1.GetCategoryByIdQuery | 1 | 0 | 1 | 42 | 100% | 0 | 0 | |||||||
| Catalog.Application.Categories.Features.GetCategoryById.V1.GetCategoryByIdRequest | 1 | 0 | 1 | 6 | 100% | 0 | 0 | |||||||
| Catalog.Application.Categories.Features.GetCategoryById.V1.GetCategoryByIdValidator | 4 | 0 | 4 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Application.Categories.ReadModels.CategoryReadModel | 5 | 0 | 5 | 34 | 100% | 0 | 0 | |||||||
| Catalog.Application.Categories.Response.CategoryResponse | 2 | 0 | 2 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Application.EventHandlers.DomainEvents.BrandCreatedDomainEventProcessor | 0 | 3 | 3 | 31 | 0% | 0 | 0 | |||||||
| Catalog.Application.Features.Categories.Create.V1.CreateCategoryCommand | 1 | 0 | 1 | 48 | 100% | 0 | 0 | |||||||
| Catalog.Application.Features.Categories.Create.V1.CreateCategoryCommandHandler | 11 | 0 | 11 | 48 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Features.Categories.GetById.V1.GetCategoryByIdQuery | 1 | 0 | 1 | 42 | 100% | 0 | 0 | |||||||
| Catalog.Application.Features.Categories.GetById.V1.GetCategoryByIdQueryHandler | 5 | 0 | 5 | 42 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Features.ProductPrices.Response.ProductPriceResponse | 2 | 0 | 2 | 18 | 100% | 0 | 0 | |||||||
| Catalog.Application.Features.Products.GetProductById.V1.GetProductByIdRequest | 1 | 0 | 1 | 13 | 100% | 0 | 0 | |||||||
| Catalog.Application.Features.Products.GetProductById.V1.GetProductByIdValidator | 4 | 0 | 4 | 20 | 100% | 0 | 0 | |||||||
| Catalog.Application.ProductPriceTypes.ReadModels.ProductPriceTypeReadModel | 2 | 0 | 2 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Application.Products.Features.CreateProduct.V1.CreateProductCommand | 8 | 0 | 8 | 87 | 100% | 0 | 0 | |||||||
| Catalog.Application.Products.Features.CreateProduct.V1.CreateProductCommandHandler | 25 | 0 | 25 | 87 | 100% | 4 | 4 | 100% | ||||||
| Catalog.Application.Products.Features.CreateProduct.V1.CreateProductRequest | 10 | 0 | 10 | 51 | 100% | 0 | 0 | |||||||
| Catalog.Application.Products.Features.CreateProduct.V1.CreateProductValidator | 37 | 0 | 37 | 60 | 100% | 0 | 0 | |||||||
| Catalog.Application.Products.Features.GetProductById.V1.GetProductByIdQuery | 1 | 0 | 1 | 43 | 100% | 0 | 0 | |||||||
| Catalog.Application.Products.Features.GetProductById.V1.GetProductByIdQueryHandler | 5 | 0 | 5 | 43 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Application.Products.Mappings.ProductMappings | 21 | 22 | 43 | 89 | 48.8% | 4 | 8 | 50% | ||||||
| Catalog.Application.Products.ReadModels.ProductPriceReadModel | 5 | 0 | 5 | 34 | 100% | 0 | 0 | |||||||
| Catalog.Application.Products.ReadModels.ProductReadModel | 7 | 3 | 10 | 59 | 70% | 0 | 0 | |||||||
| Catalog.Application.Products.Responses.ProductResponse | 12 | 0 | 12 | 74 | 100% | 0 | 0 | |||||||
| Catalog.Application.Promotions.ReadModels.PromotionReadModel | 5 | 1 | 6 | 39 | 83.3% | 0 | 0 | |||||||
| Catalog.Application.Promotions.Response.PromotionResponse | 4 | 0 | 4 | 28 | 100% | 0 | 0 | |||||||
| Catalog.Application.Suppliers.ReadModels.SupplierReadModel | 3 | 3 | 6 | 39 | 50% | 0 | 0 | |||||||
| Microsoft.AspNetCore.OpenApi.Generated | 0 | 407 | 407 | 789 | 0% | 0 | 206 | 0% | ||||||
| System.Runtime.CompilerServices | 0 | 2 | 2 | 23 | 0% | 0 | 0 | |||||||
| Catalog.Domain | 554 | 62 | 616 | 2379 | 89.9% | 249 | 284 | 87.6% | ||||||
| Catalog.Domain.Entities.BrandAggregate.Brand | 44 | 0 | 44 | 146 | 100% | 36 | 36 | 100% | ||||||
| Catalog.Domain.Entities.BrandAggregate.Errors.BrandErrors | 15 | 0 | 15 | 45 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.BrandAggregate.Errors.WebsiteErrors | 6 | 0 | 6 | 24 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.BrandAggregate.Events.BrandCreatedDomainEvent | 0 | 3 | 3 | 25 | 0% | 0 | 0 | |||||||
| Catalog.Domain.Entities.BrandAggregate.Specifications.BrandByIdSpecification | 3 | 0 | 3 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.BrandAggregate.Specifications.BrandByNameSpecification | 3 | 2 | 5 | 28 | 60% | 1 | 2 | 50% | ||||||
| Catalog.Domain.Entities.BrandAggregate.Specifications.BrandListSpecification | 0 | 15 | 15 | 50 | 0% | 0 | 10 | 0% | ||||||
| Catalog.Domain.Entities.BrandAggregate.ValueObjects.Website | 14 | 0 | 14 | 54 | 100% | 8 | 8 | 100% | ||||||
| Catalog.Domain.Entities.CategoryAggregate.Category | 31 | 0 | 31 | 114 | 100% | 20 | 20 | 100% | ||||||
| Catalog.Domain.Entities.CategoryAggregate.Errors.CategoryErrors | 9 | 0 | 9 | 31 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.CategoryAggregate.Specifications.CategoriesByIdsSpecification | 3 | 0 | 3 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.CategoryAggregate.Specifications.CategoryByIdSpecification | 3 | 0 | 3 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.ProductAggregate.Errors.ProductErrors | 30 | 0 | 30 | 80 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.ProductAggregate.Errors.ProductPriceErrors | 18 | 0 | 18 | 51 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.ProductAggregate.Events.ProductCreatedDomainEvent | 3 | 0 | 3 | 25 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.ProductAggregate.Product | 55 | 0 | 55 | 245 | 100% | 19 | 20 | 95% | ||||||
| Catalog.Domain.Entities.ProductAggregate.ProductPrice | 34 | 2 | 36 | 131 | 94.4% | 22 | 22 | 100% | ||||||
| Catalog.Domain.Entities.ProductAggregate.Specifications.ProductByIdSpecification | 9 | 0 | 9 | 29 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Domain.Entities.ProductPriceTypeAggregate.Errors.ProductPriceTypeErrors | 12 | 0 | 12 | 37 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.ProductPriceTypeAggregate.ProductPriceType | 32 | 0 | 32 | 111 | 100% | 22 | 22 | 100% | ||||||
| Catalog.Domain.Entities.ProductPriceTypeAggregate.Specifications.ProductPriceTypeByIdSpecification | 3 | 0 | 3 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.PromotionAggregate.Errors.PromotionErrors | 12 | 0 | 12 | 37 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.PromotionAggregate.Promotion | 45 | 0 | 45 | 165 | 100% | 41 | 42 | 97.6% | ||||||
| Catalog.Domain.Entities.PromotionAggregate.Specifications.PromotionByIdSpecification | 5 | 0 | 5 | 25 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Domain.Entities.SupplierAggregate.Errors.SupplierErrors | 12 | 0 | 12 | 37 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.SupplierAggregate.Specifications.SupplierByIdSpecification | 3 | 0 | 3 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Domain.Entities.SupplierAggregate.Supplier | 44 | 0 | 44 | 139 | 100% | 42 | 42 | 100% | ||||||
| System.Text.RegularExpressions.Generated | 54 | 20 | 74 | 262 | 72.9% | 17 | 28 | 60.7% | ||||||
| System.Text.RegularExpressions.Generated. | 19 | 17 | 36 | 247 | 52.7% | 6 | 14 | 42.8% | ||||||
| System.Text.RegularExpressions.Generated. | 33 | 3 | 36 | 146 | 91.6% | 11 | 14 | 78.5% | ||||||
| Catalog.Infrastructure | 553 | 7113 | 7666 | 9980 | 7.2% | 34 | 286 | 11.8% | ||||||
| Catalog.Infrastructure.Caching.BrandCache | 1 | 0 | 1 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Caching.CategoryCache | 1 | 0 | 1 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Caching.ProductCache | 1 | 0 | 1 | 19 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.DependencyInjection.DatabaseServiceExtensions | 23 | 2 | 25 | 68 | 92% | 0 | 0 | |||||||
| Catalog.Infrastructure.DependencyInjection.InfrastructureServiceExtensions | 71 | 24 | 95 | 176 | 74.7% | 17 | 30 | 56.6% | ||||||
| Catalog.Infrastructure.DesignTime.CatalogDesignTimeDbContextFactory | 0 | 20 | 20 | 61 | 0% | 0 | 30 | 0% | ||||||
| Catalog.Infrastructure.Options.MinioOptions | 0 | 4 | 4 | 35 | 0% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.ApplicationReadDbContext | 13 | 0 | 13 | 73 | 100% | 1 | 2 | 50% | ||||||
| Catalog.Infrastructure.Persistence.ApplicationWriteDbContext | 13 | 0 | 13 | 74 | 100% | 1 | 2 | 50% | ||||||
| Catalog.Infrastructure.Persistence.Config.Read.BrandReadConfig | 11 | 0 | 11 | 36 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Read.CategoryReadConfig | 14 | 0 | 14 | 41 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Read.ProductPriceReadConfig | 15 | 0 | 15 | 39 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Read.ProductPriceTypeReadConfig | 11 | 0 | 11 | 36 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Read.ProductReadConfig | 26 | 0 | 26 | 59 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Read.PromotionReadConfig | 18 | 0 | 18 | 46 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Read.SupplierReadConfig | 17 | 0 | 17 | 42 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Write.BrandWriteConfig | 19 | 0 | 19 | 45 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Write.CategoryWriteConfig | 21 | 0 | 21 | 47 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Write.ProductPriceTypeWriteConfig | 11 | 0 | 11 | 36 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Write.ProductPriceWriteConfig | 18 | 0 | 18 | 44 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Write.ProductWriteConfig | 38 | 0 | 38 | 70 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Write.PromotionWriteConfig | 25 | 0 | 25 | 53 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Config.Write.SupplierWriteConfig | 11 | 0 | 11 | 33 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Migrations.MySql.InitialMySql | 0 | 2430 | 2430 | 2697 | 0% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Migrations.PostgreSQL.ApplicationWriteDbContextModelSnapshot | 0 | 694 | 694 | 737 | 0% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Migrations.PostgreSQL.InitialPostgreSQL | 0 | 1106 | 1106 | 1212 | 0% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Migrations.SqlServer.InitialSqlServer | 0 | 2511 | 2511 | 2789 | 0% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Repositories.Read.BrandReadRepository | 4 | 0 | 4 | 26 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Repositories.Read.CategoryReadRepository | 36 | 0 | 36 | 90 | 100% | 7 | 8 | 87.5% | ||||||
| Catalog.Infrastructure.Persistence.Repositories.Read.ProductPriceReadRepository | 2 | 0 | 2 | 21 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Repositories.Read.ProductPriceTypeReadRepository | 17 | 0 | 17 | 54 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Infrastructure.Persistence.Repositories.Read.ProductReadRepository | 33 | 0 | 33 | 84 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Infrastructure.Persistence.Repositories.Read.PromotionReadRepository | 29 | 0 | 29 | 79 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Infrastructure.Persistence.Repositories.Read.SupplierReadRepository | 18 | 0 | 18 | 57 | 100% | 2 | 2 | 100% | ||||||
| Catalog.Infrastructure.Persistence.Repositories.Write.BrandWriteRepository | 6 | 0 | 6 | 50 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Repositories.Write.CategoryWriteRepository | 5 | 4 | 9 | 43 | 55.5% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Repositories.Write.ProductPriceTypeWriteRepository | 5 | 0 | 5 | 35 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Repositories.Write.ProductWriteRepository | 5 | 0 | 5 | 35 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Repositories.Write.PromotionWriteRepository | 10 | 0 | 10 | 44 | 100% | 0 | 0 | |||||||
| Catalog.Infrastructure.Persistence.Repositories.Write.SupplierWriteRepository | 5 | 0 | 5 | 35 | 100% | 0 | 0 | |||||||
| Microsoft.AspNetCore.OpenApi.Generated | 0 | 316 | 316 | 698 | 0% | 0 | 206 | 0% | ||||||
| System.Runtime.CompilerServices | 0 | 2 | 2 | 23 | 0% | 0 | 0 | |||||||
| Customer.Application | 281 | 283 | 564 | 1704 | 49.8% | 34 | 244 | 13.9% | ||||||
| Customer.Application.Tenants.Commands.CreateTenant.CreateTenantCommand | 8 | 0 | 8 | 25 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.Commands.CreateTenant.CreateTenantCommandHandler | 122 | 4 | 126 | 247 | 96.8% | 20 | 24 | 83.3% | ||||||
| Customer.Application.Tenants.Commands.CreateTenant.CreateTenantCommandValidator | 21 | 0 | 21 | 41 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.Commands.UpdateMigrationStatus.UpdateMigrationStatusCommand | 7 | 0 | 7 | 21 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.Commands.UpdateMigrationStatus.UpdateMigrationStatusCommandHandler | 20 | 0 | 20 | 57 | 100% | 4 | 4 | 100% | ||||||
| Customer.Application.Tenants.DTOs.ServiceDatabaseInfoDto | 3 | 0 | 3 | 22 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.DTOs.TenantDatabaseMetadataDto | 4 | 0 | 4 | 126 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.DTOs.TenantDto | 11 | 0 | 11 | 126 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.DTOs.TenantMigrationStatusDto | 6 | 0 | 6 | 126 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.EventHandlers.TenantCreatedHandler | 11 | 0 | 11 | 43 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.Queries.CheckServiceReadiness.CheckServiceReadinessQuery | 1 | 0 | 1 | 11 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.Queries.CheckServiceReadiness.CheckServiceReadinessQueryHandler | 12 | 0 | 12 | 42 | 100% | 4 | 4 | 100% | ||||||
| Customer.Application.Tenants.Queries.GetTenantById.GetTenantByIdQuery | 1 | 0 | 1 | 11 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.Queries.GetTenantById.GetTenantByIdQueryHandler | 36 | 0 | 36 | 64 | 100% | 2 | 2 | 100% | ||||||
| Customer.Application.Tenants.Queries.GetTenantDatabaseInfo.GetTenantDatabaseInfoQuery | 1 | 0 | 1 | 12 | 100% | 0 | 0 | |||||||
| Customer.Application.Tenants.Queries.GetTenantDatabaseInfo.GetTenantDatabaseInfoQueryHandler | 17 | 0 | 17 | 48 | 100% | 4 | 4 | 100% | ||||||
| Microsoft.AspNetCore.OpenApi.Generated | 0 | 277 | 277 | 659 | 0% | 0 | 206 | 0% | ||||||
| System.Runtime.CompilerServices | 0 | 2 | 2 | 23 | 0% | 0 | 0 | |||||||
| Customer.Domain | 105 | 2 | 107 | 381 | 98.1% | 22 | 22 | 100% | ||||||
| Customer.Domain.Entities.TenantAggregate.Events.TenantCreatedDomainEvent | 17 | 0 | 17 | 56 | 100% | 0 | 0 | |||||||
| Customer.Domain.Entities.TenantAggregate.Tenant | 63 | 0 | 63 | 195 | 100% | 10 | 10 | 100% | ||||||
| Customer.Domain.Entities.TenantAggregate.TenantDatabaseMetadata | 6 | 1 | 7 | 42 | 85.7% | 0 | 0 | |||||||
| Customer.Domain.Entities.TenantAggregate.TenantMigrationStatus | 19 | 1 | 20 | 88 | 95% | 12 | 12 | 100% | ||||||
| Customer.Infrastructure | 95 | 321 | 416 | 1076 | 22.8% | 0 | 222 | 0% | ||||||
| Customer.Infrastructure.DependencyInjection.InfrastructureServiceExtensions | 0 | 56 | 56 | 114 | 0% | 0 | 12 | 0% | ||||||
| Customer.Infrastructure.Persistence.Config.Read.TenantReadConfig | 0 | 26 | 26 | 57 | 0% | 0 | 0 | |||||||
| Customer.Infrastructure.Persistence.Config.Write.TenantWriteConfig | 74 | 0 | 74 | 106 | 100% | 0 | 0 | |||||||
| Customer.Infrastructure.Persistence.CustomerReadDbContext | 0 | 7 | 7 | 39 | 0% | 0 | 2 | 0% | ||||||
| Customer.Infrastructure.Persistence.CustomerWriteDbContext | 3 | 4 | 7 | 40 | 42.8% | 0 | 2 | 0% | ||||||
| Customer.Infrastructure.Persistence.Repositories.Write.TenantWriteRepository | 13 | 0 | 13 | 63 | 100% | 0 | 0 | |||||||
| Customer.Infrastructure.Persistence.UnitOfWork | 5 | 0 | 5 | 26 | 100% | 0 | 0 | |||||||
| Microsoft.AspNetCore.OpenApi.Generated | 0 | 226 | 226 | 608 | 0% | 0 | 206 | 0% | ||||||
| System.Runtime.CompilerServices | 0 | 2 | 2 | 23 | 0% | 0 | 0 | |||||||
| SharedKernel.Core | 88 | 357 | 445 | 1609 | 19.7% | 22 | 236 | 9.3% | ||||||
| SharedKernel.Core.Domain.BaseEntity | 1 | 0 | 1 | 139 | 100% | 0 | 0 | |||||||
| SharedKernel.Core.Domain.BaseEntity`1 | 24 | 4 | 28 | 139 | 85.7% | 3 | 4 | 75% | ||||||
| SharedKernel.Core.Domain.ReadModelBase`1 | 1 | 7 | 8 | 53 | 12.5% | 0 | 0 | |||||||
| SharedKernel.Core.Domain.ValueObject | 15 | 2 | 17 | 56 | 88.2% | 15 | 20 | 75% | ||||||
| SharedKernel.Core.Events.DomainEvent | 5 | 3 | 8 | 33 | 62.5% | 0 | 0 | |||||||
| SharedKernel.Core.Events.IntegrationEvent | 5 | 3 | 8 | 33 | 62.5% | 0 | 0 | |||||||
| SharedKernel.Core.Exceptions.ConfigurationMissingException | 0 | 6 | 6 | 37 | 0% | 0 | 0 | |||||||
| SharedKernel.Core.Exceptions.CustomException | 0 | 11 | 11 | 50 | 0% | 0 | 0 | |||||||
| SharedKernel.Core.Exceptions.InvalidDatabaseStrategyException | 0 | 6 | 6 | 37 | 0% | 0 | 0 | |||||||
| SharedKernel.Core.Exceptions.InvalidOperationException | 0 | 6 | 6 | 34 | 0% | 0 | 0 | |||||||
| SharedKernel.Core.Exceptions.InvalidTransactionException | 0 | 6 | 6 | 34 | 0% | 0 | 0 | |||||||
| SharedKernel.Core.Pagination.PagedList`1 | 14 | 2 | 16 | 67 | 87.5% | 2 | 4 | 50% | ||||||
| SharedKernel.Core.Pagination.PaginationParameters | 6 | 0 | 6 | 38 | 100% | 1 | 2 | 50% | ||||||
| SharedKernel.Core.Pricing.DatabaseOptions | 0 | 189 | 189 | 374 | 0% | 0 | 66 | 0% | ||||||
| SharedKernel.Core.Pricing.DatabaseProvider | 12 | 46 | 58 | 188 | 20.6% | 1 | 74 | 1.3% | ||||||
| SharedKernel.Core.Pricing.DatabaseStrategy | 5 | 40 | 45 | 156 | 11.1% | 0 | 60 | 0% | ||||||
| SharedKernel.Core.Pricing.PricingOption | 0 | 6 | 6 | 37 | 0% | 0 | 0 | |||||||
| SharedKernel.Core.Pricing.TenantPlan | 0 | 17 | 17 | 82 | 0% | 0 | 6 | 0% | ||||||
| SharedKernel.Core.Pricing.UsageMetrics | 0 | 3 | 3 | 22 | 0% | 0 | 0 | |||||||
| SharedKernel.Events | 17 | 13 | 30 | 130 | 56.6% | 0 | 0 | |||||||
| SharedKernel.Events.BrandCreatedIntegrationEvent | 0 | 6 | 6 | 32 | 0% | 0 | 0 | |||||||
| SharedKernel.Events.TenantCreatedIntegrationEvent | 17 | 2 | 19 | 64 | 89.4% | 0 | 0 | |||||||
| SharedKernel.Events.TenantDatabaseProvisionedIntegrationEvent | 0 | 5 | 5 | 34 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure | 35 | 1479 | 1514 | 4127 | 2.3% | 2 | 452 | 0.4% | ||||||
| Microsoft.AspNetCore.OpenApi.Generated | 0 | 584 | 584 | 966 | 0% | 0 | 206 | 0% | ||||||
| SharedKernel.Infrastructure.Auth.Extensions | 0 | 122 | 122 | 168 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.Behaviors.Extensions | 0 | 2 | 2 | 22 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.Behaviors.LoggingBehavior`2 | 25 | 0 | 25 | 72 | 100% | 2 | 2 | 100% | ||||||
| SharedKernel.Infrastructure.Behaviors.TransactionalBehavior`2 | 10 | 0 | 10 | 45 | 100% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.Caching.CachingOptions | 0 | 2 | 2 | 20 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.Caching.Extensions | 0 | 22 | 22 | 58 | 0% | 0 | 2 | 0% | ||||||
| SharedKernel.Infrastructure.Endpoints.Extensions | 0 | 43 | 43 | 81 | 0% | 0 | 10 | 0% | ||||||
| SharedKernel.Infrastructure.Endpoints.FastEndpointsExtensions | 0 | 61 | 61 | 158 | 0% | 0 | 35 | 0% | ||||||
| SharedKernel.Infrastructure.Extensions | 0 | 49 | 49 | 108 | 0% | 0 | 2 | 0% | ||||||
| SharedKernel.Infrastructure.Logging.Extensions | 0 | 63 | 63 | 138 | 0% | 0 | 18 | 0% | ||||||
| SharedKernel.Infrastructure.Logging.SerilogOptions | 0 | 7 | 7 | 45 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.Middlewares.GlobalExceptionHandlerMiddleware | 0 | 47 | 47 | 97 | 0% | 0 | 12 | 0% | ||||||
| SharedKernel.Infrastructure.MultiTenant.CustomerApiTenantOptions | 0 | 6 | 6 | 402 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.MultiTenant.CustomerApiTenantStore | 0 | 232 | 232 | 452 | 0% | 0 | 56 | 0% | ||||||
| SharedKernel.Infrastructure.MultiTenant.MultiTenantExtensions | 0 | 102 | 102 | 402 | 0% | 0 | 87 | 0% | ||||||
| SharedKernel.Infrastructure.MultiTenant.TeckCloudMultiTenancyOptions | 0 | 13 | 13 | 402 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.MultiTenant.TenantDetails | 0 | 11 | 11 | 65 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.MultiTenant.TenantInfoExtensions | 0 | 21 | 21 | 111 | 0% | 0 | 12 | 0% | ||||||
| SharedKernel.Infrastructure.OpenApi.OpenApiDocumentRegistry | 0 | 4 | 4 | 32 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.OpenApi.OpenApiExtensions | 0 | 48 | 48 | 90 | 0% | 0 | 8 | 0% | ||||||
| SharedKernel.Infrastructure.OpenApi.OpenApiOptions | 0 | 6 | 6 | 47 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.OpenTelemetry.Extensions | 0 | 17 | 17 | 32 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.Options.AppOptions | 0 | 3 | 3 | 32 | 0% | 0 | 0 | |||||||
| SharedKernel.Infrastructure.Options.Extensions | 0 | 12 | 12 | 59 | 0% | 0 | 2 | 0% | ||||||
| System.Runtime.CompilerServices | 0 | 2 | 2 | 23 | 0% | 0 | 0 | |||||||
| SharedKernel.Migration | 147 | 97 | 244 | 722 | 60.2% | 27 | 44 | 61.3% | ||||||
| SharedKernel.Migration.DbUpMigrationRunner | 47 | 39 | 86 | 197 | 54.6% | 14 | 24 | 58.3% | ||||||
| SharedKernel.Migration.MigrationServiceBase | 11 | 58 | 69 | 146 | 15.9% | 9 | 16 | 56.2% | ||||||
| SharedKernel.Migration.Models.MigrationOptions | 7 | 0 | 7 | 42 | 100% | 0 | 0 | |||||||
| SharedKernel.Migration.Models.MigrationResult | 23 | 0 | 23 | 71 | 100% | 0 | 0 | |||||||
| SharedKernel.Migration.Services.CustomerApiClient | 56 | 0 | 56 | 133 | 100% | 4 | 4 | 100% | ||||||
| SharedKernel.Migration.Services.ServiceDatabaseInfo | 3 | 0 | 3 | 133 | 100% | 0 | 0 | |||||||
| SharedKernel.Persistence | 328 | 1246 | 1574 | 5629 | 20.8% | 76 | 612 | 12.4% | ||||||
| Microsoft.AspNetCore.OpenApi.Generated | 0 | 382 | 382 | 764 | 0% | 0 | 206 | 0% | ||||||
| SharedKernel.Persistence.Caching.GenericCacheService`2 | 40 | 0 | 40 | 138 | 100% | 4 | 4 | 100% | ||||||
| SharedKernel.Persistence.Database.DatabaseOptions | 0 | 2 | 2 | 19 | 0% | 0 | 0 | |||||||
| SharedKernel.Persistence.Database.EFCore.BaseDbContext | 13 | 6 | 19 | 110 | 68.4% | 9 | 14 | 64.2% | ||||||
| SharedKernel.Persistence.Database.EFCore.ByIdSpecification`2 | 3 | 0 | 3 | 350 | 100% | 0 | 0 | |||||||
| SharedKernel.Persistence.Database.EFCore.ByIdsSpecification`2 | 6 | 5 | 11 | 350 | 54.5% | 1 | 2 | 50% | ||||||
| SharedKernel.Persistence.Database.EFCore.Config.ConfigurationExtensions | 17 | 0 | 17 | 43 | 100% | 0 | 0 | |||||||
| SharedKernel.Persistence.Database.EFCore.GenericReadRepository`3 | 51 | 0 | 51 | 350 | 100% | 4 | 4 | 100% | ||||||
| SharedKernel.Persistence.Database.EFCore.GenericSpecification`1 | 3 | 0 | 3 | 350 | 100% | 0 | 0 | |||||||
| SharedKernel.Persistence.Database.EFCore.GenericWriteRepository`3 | 71 | 19 | 90 | 366 | 78.8% | 20 | 32 | 62.5% | ||||||
| SharedKernel.Persistence.Database.EFCore.Interceptors.AuditingInterceptor | 13 | 0 | 13 | 78 | 100% | 12 | 16 | 75% | ||||||
| SharedKernel.Persistence.Database.EFCore.Interceptors.SoftDeleteInterceptor | 14 | 2 | 16 | 60 | 87.5% | 5 | 10 | 50% | ||||||
| SharedKernel.Persistence.Database.EFCore.ModelBuilderExtensions | 19 | 6 | 25 | 77 | 76% | 13 | 22 | 59% | ||||||
| SharedKernel.Persistence.Database.EFCore.QueryableExtensions | 0 | 12 | 12 | 44 | 0% | 0 | 6 | 0% | ||||||
| SharedKernel.Persistence.Database.EFCore.UnitOfWork`1 | 15 | 32 | 47 | 183 | 31.9% | 4 | 22 | 18.1% | ||||||
| SharedKernel.Persistence.Database.Extensions | 0 | 115 | 115 | 310 | 0% | 0 | 58 | 0% | ||||||
| SharedKernel.Persistence.Database.Migrations.EFCoreMigrationRunner`1 | 0 | 90 | 90 | 182 | 0% | 0 | 30 | 0% | ||||||
| SharedKernel.Persistence.Database.Migrations.MigrationResult | 0 | 23 | 23 | 159 | 0% | 0 | 0 | |||||||
| SharedKernel.Persistence.Database.Migrations.MigrationServiceExtensions | 11 | 8 | 19 | 70 | 57.8% | 2 | 2 | 100% | ||||||
| SharedKernel.Persistence.Database.Migrations.MigrationStatus | 0 | 6 | 6 | 159 | 0% | 0 | 0 | |||||||
| SharedKernel.Persistence.Database.Migrations.MultiTenantMigrationService`1 | 0 | 169 | 169 | 370 | 0% | 0 | 56 | 0% | ||||||
| SharedKernel.Persistence.Database.MultiTenant.CurrentTenantDbContext`1 | 0 | 4 | 4 | 43 | 0% | 0 | 2 | 0% | ||||||
| SharedKernel.Persistence.Database.MultiTenant.MultiTenantDatabaseHealthCheck | 0 | 15 | 15 | 61 | 0% | 0 | 2 | 0% | ||||||
| SharedKernel.Persistence.Database.MultiTenant.MultiTenantDbExtensions | 52 | 94 | 146 | 276 | 35.6% | 2 | 32 | 6.2% | ||||||
| SharedKernel.Persistence.Database.MultiTenant.TenantConnectionResult | 0 | 39 | 39 | 134 | 0% | 0 | 0 | |||||||
| SharedKernel.Persistence.Database.MultiTenant.TenantDbConnectionResolver | 0 | 172 | 172 | 425 | 0% | 0 | 82 | 0% | ||||||
| SharedKernel.Persistence.Database.MultiTenant.TenantMigrationOptions | 0 | 6 | 6 | 41 | 0% | 0 | 0 | |||||||
| SharedKernel.Persistence.EventHandlers.TenantDatabaseProvisionedHandler | 0 | 37 | 37 | 94 | 0% | 0 | 10 | 0% | ||||||
| System.Runtime.CompilerServices | 0 | 2 | 2 | 23 | 0% | 0 | 0 | |||||||
| SharedKernel.Secrets | 38 | 214 | 252 | 797 | 15% | 14 | 94 | 14.8% | ||||||
| SharedKernel.Secrets.DatabaseCredentials | 32 | 13 | 45 | 140 | 71.1% | 14 | 20 | 70% | ||||||
| SharedKernel.Secrets.UserCredentials | 2 | 0 | 2 | 140 | 100% | 0 | 0 | |||||||
| SharedKernel.Secrets.VaultOptions | 0 | 12 | 12 | 93 | 0% | 0 | 0 | |||||||
| SharedKernel.Secrets.VaultSecretsManager | 0 | 185 | 185 | 380 | 0% | 0 | 74 | 0% | ||||||
| SharedKernel.Secrets.VaultServiceExtensions | 4 | 4 | 8 | 44 | 50% | 0 | 0 | |||||||
| Teck.Cloud.ServiceDefaults | 0 | 353 | 353 | 857 | 0% | 0 | 222 | 0% | ||||||
| Microsoft.AspNetCore.OpenApi.Generated | 0 | 215 | 215 | 597 | 0% | 0 | 206 | 0% | ||||||
| Microsoft.Extensions.Hosting.Extensions | 0 | 136 | 136 | 237 | 0% | 0 | 16 | 0% | ||||||
| System.Runtime.CompilerServices | 0 | 2 | 2 | 23 | 0% | 0 | 0 | |||||||