Skip to content

test: phase 3 coverage push (Dashboard.UI deep tests + Api error paths + CI fix)#89

Merged
JerrettDavis merged 3 commits intomainfrom
feat/coverage-phase-3
Apr 24, 2026
Merged

test: phase 3 coverage push (Dashboard.UI deep tests + Api error paths + CI fix)#89
JerrettDavis merged 3 commits intomainfrom
feat/coverage-phase-3

Conversation

@JerrettDavis
Copy link
Copy Markdown
Owner

Summary

  • Track A (Dashboard.UI): Added 131 new unit tests for ExperimentApiClient (60 tests), ExperimentCodeGenerator (34 tests), and ExperimentWizardModel (37 tests). Total Dashboard.UI.Tests: 198 (was 87). Estimated assembly lift: 7.3% → ~55-65%.
  • Track B (Dashboard.Api): Added 63 error-path, response-shape, and mock-provider tests across all 9 endpoint groups. Total Dashboard.Api.Tests: 85 (was 22). Estimated assembly lift: 49.5% → ~80-85%.
  • CI fix: pr-checks and e2e-tests jobs now also run on push to main, so both unittests and e2e Codecov flags upload on every merge. Previously main-branch Codecov dropped ~8 points vs PR-branch on every merge. Sticky PR comment guarded with if: github.event_name == 'pull_request'.

Per-assembly estimates (based on SUT analysis)

Assembly Before After (est.) Delta
Dashboard.UI 7.3% ~60% +~53pts
Dashboard.Api 49.5% ~82% +~33pts
Overall 74.4% (PR#88) / 66.2% (main) ≥82% +8-16pts

Test plan

  • dotnet test ExperimentFramework.Dashboard.UI.Tests — 198 passed, 0 failed
  • dotnet test ExperimentFramework.Dashboard.Api.Tests — 85 passed, 0 failed
  • No [Fact(Skip=...)] — all tests are active and assert real behavior
  • No src/ edits — tests only
  • CI yml syntax validated — YAML is structurally correct, conditions use existing pattern
  • Post-merge: verify Codecov main-branch matches PR-branch (no 8-point drop)

🤖 Generated with Claude Code

GitHub Copilot and others added 3 commits April 24, 2026 10:39
…rage

pr-checks and e2e-tests jobs previously only fired on pull_request events.
Merge commits therefore only got coverage from the release job (unit tests,
no E2E), causing an ~8-point Codecov drop on every merge (74% PR → 66% main).

- Broaden pr-checks trigger: pull_request | push to main
- Broaden e2e-tests trigger: pull_request | push to main
- Guard the sticky PR comment step with if: github.event_name == 'pull_request'
  so it doesn't fail on push events (no PR context available)
- codecov.yml already has carryforward: true for both flags — no change needed

Post-merge main CI will now upload both unittests + e2e flags, matching
the PR-branch coverage number.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…dModel unit tests

Track A — Dashboard.UI deep coverage:
- ExperimentApiClientTests (60 tests): full HTTP method coverage via MockHandler;
  covers all 20+ methods including error paths, null responses, HttpRequestException
  handling, and all governance/plugin/DSL paths
- ExperimentCodeGeneratorTests (34 tests): all SelectionModeType and ErrorPolicyType
  branches for both GenerateYaml and GenerateFluentApi; special-char escaping,
  empty/null description handling, multi-variant output
- ExperimentWizardModelTests (37 tests): ValidateStep1/2/3 for every validation branch
  (invalid name format, kebab-case variants, duplicate keys, each selection mode,
  each error policy); Reset() verification; default state assertions

Total new tests in Dashboard.UI.Tests: +131 (198 total, was 71 bUnit + 16 services)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…r tests

Track B — Dashboard.Api deep coverage:
- DashboardApiErrorPathTests (63 new tests): covers every endpoint group with:
  - Error paths: 503 on missing rollout backplane, 501 on missing plugin/targeting
    service, 400 on invalid DSL/variant inputs, 404 on missing resources
  - Response shape assertions: JSON schema validation via JsonDocument.Parse
  - Mock-provider paths: analytics statistics, export (JSON + CSV), usage stats,
    targeting rules/evaluate, plugin list/discover, rollout config with backplane
  - Content-type consistency: governance, approvals, kill-switch endpoints
- DashboardApiTestHost: extended constructor to accept IRolloutPersistenceBackplane,
  IAnalyticsProvider, ITargetingManagementService, IPluginManagementService

Total new tests in Dashboard.Api.Tests: +63 (85 total, was 22)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Snapshot Warnings

⚠️: No snapshots were found for the head SHA 0460f9b.
Ensure that dependencies are being submitted on PR branches and consider enabling retry-on-snapshot-warnings. See the documentation for more information and troubleshooting advice.

Scanned Files

None

@github-actions
Copy link
Copy Markdown

Code Coverage

Summary
  Generated on: 04/24/2026 - 15:49:37
  Coverage date: 04/24/2026 - 15:47:16 - 04/24/2026 - 15:49:17
  Parser: MultiReport (16x Cobertura)
  Assemblies: 27
  Classes: 286
  Files: 252
  Line coverage: 72.4%
  Covered lines: 7196
  Uncovered lines: 2731
  Coverable lines: 9927
  Total lines: 44071
  Branch coverage: 63.3% (2642 of 4170)
  Covered branches: 2642
  Total branches: 4170
  Method coverage: 83.3% (1052 of 1262)
  Full method coverage: 73.3% (926 of 1262)
  Covered methods: 1052
  Fully covered methods: 926
  Total methods: 1262

ExperimentFramework                                                                                             90.4%
  ExperimentFramework.Activation.ActivationEvaluator                                                            93.1%
  ExperimentFramework.Activation.SystemTimeProvider                                                              100%
  ExperimentFramework.Decorators.BenchmarkDecoratorFactory                                                       100%
  ExperimentFramework.Decorators.DecoratorPipeline                                                               100%
  ExperimentFramework.Decorators.ErrorLoggingDecoratorFactory                                                    100%
  ExperimentFramework.Decorators.TimeoutDecoratorFactory                                                         100%
  ExperimentFramework.ExperimentBuilder                                                                         81.1%
  ExperimentFramework.ExperimentBuilderExtensions                                                                100%
  ExperimentFramework.ExperimentFrameworkBuilder                                                                 100%
  ExperimentFramework.ExperimentLoggingBuilder                                                                   100%
  ExperimentFramework.ExperimentRegistry                                                                         100%
  ExperimentFramework.KillSwitch.ExperimentDisabledException                                                     100%
  ExperimentFramework.KillSwitch.InMemoryKillSwitchProvider                                                      100%
  ExperimentFramework.KillSwitch.KillSwitchDecoratorFactory                                                      100%
  ExperimentFramework.KillSwitch.NoopKillSwitchProvider                                                          100%
  ExperimentFramework.KillSwitch.TrialDisabledException                                                          100%
  ExperimentFramework.Metrics.MetricsDecoratorFactory                                                            100%
  ExperimentFramework.Metrics.NoopExperimentMetrics                                                              100%
  ExperimentFramework.Models.BehaviorRule                                                                        100%
  ExperimentFramework.Models.Experiment                                                                          100%
  ExperimentFramework.Models.ExperimentRegistration                                                               75%
  ExperimentFramework.Models.SelectionModeExtensions                                                             100%
  ExperimentFramework.Models.SelectionRule                                                                       100%
  ExperimentFramework.Models.ServiceExperimentDefinition<T>                                                      100%
  ExperimentFramework.Models.Trial                                                                               100%
  ExperimentFramework.Naming.DefaultExperimentNamingConvention                                                   100%
  ExperimentFramework.Naming.ExperimentSelectorName                                                              100%
  ExperimentFramework.RuntimeExperimentProxy<T>                                                                 81.8%
  ExperimentFramework.Selection.Providers.BooleanFeatureFlagProvider                                             100%
  ExperimentFramework.Selection.Providers.BooleanFeatureFlagProviderFactory                                      100%
  ExperimentFramework.Selection.Providers.ConfigurationValueProvider                                              80%
  ExperimentFramework.Selection.Providers.ConfigurationValueProviderFactory                                      100%
  ExperimentFramework.Selection.SelectionModeAttribute                                                           100%
  ExperimentFramework.Selection.SelectionModeProviderBase                                                        100%
  ExperimentFramework.Selection.SelectionModeProviderFactory<T>                                                  100%
  ExperimentFramework.Selection.SelectionModeRegistry                                                            100%
  ExperimentFramework.ServiceCollectionExtensions                                                               77.6%
  ExperimentFramework.ServiceExperimentBuilder<T>                                                               94.5%
  ExperimentFramework.ServiceRegistration.OperationMetadata                                                      100%
  ExperimentFramework.ServiceRegistration.OperationResult                                                        100%
  ExperimentFramework.ServiceRegistration.PlanExecutionResult                                                   83.3%
  ExperimentFramework.ServiceRegistration.RegistrationPlan                                                       100%
  ExperimentFramework.ServiceRegistration.RegistrationPlanBuilder                                               97.2%
  ExperimentFramework.ServiceRegistration.RegistrationPlanExecutor                                              62.7%
  ExperimentFramework.ServiceRegistration.RegistrationPlanReport                                                98.1%
  ExperimentFramework.ServiceRegistration.ServiceGraphPatchOperation                                              77%
  ExperimentFramework.ServiceRegistration.ServiceGraphSnapshot                                                   100%
  ExperimentFramework.ServiceRegistration.ValidationFinding                                                      100%
  ExperimentFramework.ServiceRegistration.Validators.LifetimeSafetyValidator                                     100%
  ExperimentFramework.Telemetry.NoopExperimentTelemetry                                                          100%
  ExperimentFramework.Telemetry.OpenTelemetryExperimentTelemetry                                                 100%
  ExperimentFramework.Validation.TrialConflictDetector                                                          98.7%
  ExperimentFramework.Validation.TrialConflictException                                                          100%
  ExperimentFramework.Variants.VariantFeatureManagerAdapter                                                      100%

ExperimentFramework.Admin                                                                                        100%
  ExperimentFramework.Admin.ExperimentAdminEndpoints                                                             100%
  ExperimentFramework.Admin.GovernanceAdminEndpoints                                                             100%

ExperimentFramework.Audit                                                                                          0%
  ExperimentFramework.Audit.CompositeAuditSink                                                                     0%
  ExperimentFramework.Audit.LoggingAuditSink                                                                       0%
  ExperimentFramework.Audit.ServiceCollectionExtensions                                                            0%

ExperimentFramework.AutoStop                                                                                     100%
  ExperimentFramework.AutoStop.AutoStopOptions                                                                   100%
  ExperimentFramework.AutoStop.Rules.MinimumSampleSizeRule                                                       100%
  ExperimentFramework.AutoStop.Rules.StatisticalSignificanceRule                                                 100%
  ExperimentFramework.AutoStop.ServiceCollectionExtensions                                                       100%
  ExperimentFramework.AutoStop.VariantData                                                                       100%

ExperimentFramework.Bandit                                                                                      98.8%
  ExperimentFramework.Bandit.Algorithms.EpsilonGreedy                                                            100%
  ExperimentFramework.Bandit.Algorithms.ThompsonSampling                                                        97.3%
  ExperimentFramework.Bandit.Algorithms.UpperConfidenceBound                                                     100%
  ExperimentFramework.Bandit.ArmStatistics                                                                       100%
  ExperimentFramework.Bandit.ServiceCollectionExtensions                                                         100%

ExperimentFramework.Configuration                                                                               68.8%
  ExperimentFramework.Configuration.Building.ConfigurationExperimentBuilder                                     85.3%
  ExperimentFramework.Configuration.Building.TypeResolver                                                         69%
  ExperimentFramework.Configuration.ConfigurationFileWatcher                                                    89.4%
  ExperimentFramework.Configuration.Exceptions.ConfigurationLoadException                                        100%
  ExperimentFramework.Configuration.Exceptions.ExperimentConfigurationException                                  100%
  ExperimentFramework.Configuration.Exceptions.TypeResolutionException                                           100%
  ExperimentFramework.Configuration.Extensions.ConfigurationExtensionRegistry                                   79.1%
  ExperimentFramework.Configuration.Extensions.ConfigurationExtensionServiceCollectionExtensions                92.8%
  ExperimentFramework.Configuration.Extensions.Handlers.ConfigurationKeySelectionModeHandler                     100%
  ExperimentFramework.Configuration.Extensions.Handlers.CustomDecoratorHandler                                  93.7%
  ExperimentFramework.Configuration.Extensions.Handlers.CustomSelectionModeHandler                              66.6%
  ExperimentFramework.Configuration.Extensions.Handlers.FeatureFlagSelectionModeHandler                          100%
  ExperimentFramework.Configuration.Extensions.Handlers.GovernanceConfigurationHandler                            44%
  ExperimentFramework.Configuration.Extensions.Handlers.InMemoryBackplaneConfigurationHandler                   11.1%
  ExperimentFramework.Configuration.Extensions.Handlers.LoggingBackplaneConfigurationHandler                    11.1%
  ExperimentFramework.Configuration.Extensions.Handlers.LoggingDecoratorHandler                                 91.6%
  ExperimentFramework.Configuration.Extensions.Handlers.OpenTelemetryBackplaneConfigurationHandler              11.1%
  ExperimentFramework.Configuration.Extensions.Handlers.TimeoutDecoratorHandler                                  100%
  ExperimentFramework.Configuration.Loading.ConfigurationFileDiscovery                                           100%
  ExperimentFramework.Configuration.Loading.ExperimentConfigurationLoader                                       84.6%
  ExperimentFramework.Configuration.Models.CircuitBreakerDecoratorOptions                                        100%
  ExperimentFramework.Configuration.Models.OutcomeCollectionDecoratorOptions                                     100%
  ExperimentFramework.Configuration.Models.TimeoutDecoratorOptions                                               100%
  ExperimentFramework.Configuration.Schema.Generated.ConfigurationSchema                                           0%
  ExperimentFramework.Configuration.Schema.Generated.SchemaRegistry                                                0%
  ExperimentFramework.Configuration.Schema.SchemaExporter                                                          0%
  ExperimentFramework.Configuration.Schema.SchemaHasher                                                          100%
  ExperimentFramework.Configuration.Schema.SchemaVersionTracker                                                 94.5%
  ExperimentFramework.Configuration.ServiceCollectionExtensions                                                 48.2%
  ExperimentFramework.Configuration.Validation.ConfigurationValidationError                                      100%
  ExperimentFramework.Configuration.Validation.ConfigurationValidationResult                                     100%
  ExperimentFramework.Configuration.Validation.ConfigurationValidator                                           69.5%

ExperimentFramework.Dashboard                                                                                   23.3%
  ExperimentFramework.Dashboard.Authorization.ClaimsPrincipalAuthProvider                                          0%
  ExperimentFramework.Dashboard.DashboardMiddleware                                                                0%
  ExperimentFramework.Dashboard.Data.DefaultDashboardDataProvider                                               52.6%
  ExperimentFramework.Dashboard.EndpointRouteBuilderExtensions                                                  61.5%
  ExperimentFramework.Dashboard.NullTenantResolver                                                                 0%
  ExperimentFramework.Dashboard.Persistence.InMemoryRolloutPersistence                                             0%
  ExperimentFramework.Dashboard.ServiceCollectionExtensions                                                     86.3%
  ExperimentFramework.Dashboard.TenantResolvers.ClaimTenantResolver                                                0%
  ExperimentFramework.Dashboard.TenantResolvers.CompositeTenantResolver                                            0%
  ExperimentFramework.Dashboard.TenantResolvers.HttpHeaderTenantResolver                                           0%
  ExperimentFramework.Dashboard.TenantResolvers.SubdomainTenantResolver                                            0%
  ExperimentFramework.Dashboard.Theming.DefaultThemeProvider                                                       0%

ExperimentFramework.Dashboard.Abstractions                                                                       100%
  ExperimentFramework.Dashboard.Abstractions.TenantContextAccessor                                               100%

ExperimentFramework.Dashboard.Api                                                                               82.1%
  ExperimentFramework.Dashboard.Api.DashboardApiExtensions                                                       100%
  ExperimentFramework.Dashboard.Api.Endpoints.AnalyticsEndpoints                                                70.8%
  ExperimentFramework.Dashboard.Api.Endpoints.AuditEndpoints                                                     100%
  ExperimentFramework.Dashboard.Api.Endpoints.ConfigurationEndpoints                                            80.3%
  ExperimentFramework.Dashboard.Api.Endpoints.ExperimentEndpoints                                               88.5%
  ExperimentFramework.Dashboard.Api.Endpoints.GovernanceEndpoints                                               64.2%
  ExperimentFramework.Dashboard.Api.Endpoints.PluginEndpoints                                                    100%
  ExperimentFramework.Dashboard.Api.Endpoints.RolloutEndpoints                                                  92.8%
  ExperimentFramework.Dashboard.Api.Endpoints.TargetingEndpoints                                                 100%

ExperimentFramework.Dashboard.UI                                                                                18.4%
  ExperimentFramework.Dashboard.UI.Components.Layout.MainLayout                                                  100%
  ExperimentFramework.Dashboard.UI.Components.Pages.Analytics                                                      0%
  ExperimentFramework.Dashboard.UI.Components.Pages.Configuration                                                  0%
  ExperimentFramework.Dashboard.UI.Components.Pages.CreateExperiment                                               0%
  ExperimentFramework.Dashboard.UI.Components.Pages.DslEditor                                                      0%
  ExperimentFramework.Dashboard.UI.Components.Pages.Experiments                                                 30.5%
  ExperimentFramework.Dashboard.UI.Components.Pages.Governance.Audit                                               0%
  ExperimentFramework.Dashboard.UI.Components.Pages.Governance.Lifecycle                                           0%
  ExperimentFramework.Dashboard.UI.Components.Pages.Governance.Policies                                            0%
  ExperimentFramework.Dashboard.UI.Components.Pages.Governance.Versions                                            0%
  ExperimentFramework.Dashboard.UI.Components.Pages.HypothesisTesting                                              0%
  ExperimentFramework.Dashboard.UI.Components.Pages.MinimalTest                                                    0%
  ExperimentFramework.Dashboard.UI.Components.Pages.Plugins                                                        0%
  ExperimentFramework.Dashboard.UI.Components.Pages.Rollout                                                        0%
  ExperimentFramework.Dashboard.UI.Components.Pages.Targeting                                                      0%
  ExperimentFramework.Dashboard.UI.Components.Shared.MonacoEditor                                                  0%
  ExperimentFramework.Dashboard.UI.Models.ExperimentWizardModel                                                  100%
  ExperimentFramework.Dashboard.UI.Services.DashboardStateService                                               98.5%
  ExperimentFramework.Dashboard.UI.Services.ExperimentApiClient                                                  100%
  ExperimentFramework.Dashboard.UI.Services.ExperimentCodeGenerator                                              100%
  ExperimentFramework.Dashboard.UI.Services.GovernanceListResponse<T>                                              0%
  ExperimentFramework.Dashboard.UI.Services.ThemeService                                                         100%

ExperimentFramework.Data                                                                                        98.1%
  ExperimentFramework.Data.Configuration.OutcomeCollectionDecoratorHandler                                       100%
  ExperimentFramework.Data.Decorators.OutcomeCollectionDecoratorFactory                                          100%
  ExperimentFramework.Data.ExperimentBuilderExtensions                                                           100%
  ExperimentFramework.Data.Models.ExperimentOutcome                                                              100%
  ExperimentFramework.Data.Models.OutcomeAggregation                                                             100%
  ExperimentFramework.Data.Models.OutcomeQuery                                                                   100%
  ExperimentFramework.Data.Recording.OutcomeRecorder                                                             100%
  ExperimentFramework.Data.Recording.OutcomeRecorderOptions                                                      100%
  ExperimentFramework.Data.ServiceCollectionExtensions                                                           100%
  ExperimentFramework.Data.Storage.InMemoryOutcomeStore                                                         93.6%
  ExperimentFramework.Data.Storage.NoopOutcomeStore                                                              100%

ExperimentFramework.Distributed                                                                                 94.6%
  ExperimentFramework.Distributed.InMemoryDistributedLockProvider                                               92.5%
  ExperimentFramework.Distributed.InMemoryDistributedState                                                      95.4%
  ExperimentFramework.Distributed.ServiceCollectionExtensions                                                    100%

ExperimentFramework.Distributed.Redis                                                                            100%
  ExperimentFramework.Distributed.Redis.RedisDistributedLockProvider                                             100%
  ExperimentFramework.Distributed.Redis.RedisDistributedState                                                    100%
  ExperimentFramework.Distributed.Redis.ServiceCollectionExtensions                                              100%

ExperimentFramework.FeatureManagement                                                                             80%
  ExperimentFramework.FeatureManagement.ExperimentBuilderExtensions                                               50%
  ExperimentFramework.FeatureManagement.ServiceCollectionExtensions                                              100%
  ExperimentFramework.FeatureManagement.VariantFeatureFlagProvider                                               100%

ExperimentFramework.Governance                                                                                  93.2%
  ExperimentFramework.Governance.Approval.AutomaticApprovalGate                                                  100%
  ExperimentFramework.Governance.Approval.ManualApprovalGate                                                     100%
  ExperimentFramework.Governance.Approval.RoleBasedApprovalGate                                                  100%
  ExperimentFramework.Governance.ApprovalManager                                                                 100%
  ExperimentFramework.Governance.ApprovalResult                                                                  100%
  ExperimentFramework.Governance.GovernanceBuilder                                                              65.9%
  ExperimentFramework.Governance.GovernanceConfiguration                                                           0%
  ExperimentFramework.Governance.LifecycleManager                                                               98.9%
  ExperimentFramework.Governance.Policy.ConflictPreventionPolicy                                                96.9%
  ExperimentFramework.Governance.Policy.ErrorRatePolicy                                                           97%
  ExperimentFramework.Governance.Policy.PolicyEvaluator                                                          100%
  ExperimentFramework.Governance.Policy.TimeWindowPolicy                                                        96.7%
  ExperimentFramework.Governance.Policy.TrafficLimitPolicy                                                       100%
  ExperimentFramework.Governance.ServiceCollectionExtensions                                                     100%
  ExperimentFramework.Governance.Versioning.VersionManager                                                      86.3%

ExperimentFramework.Governance.Persistence                                                                       5.2%
  ExperimentFramework.Governance.Persistence.ConcurrencyConflictException                                          0%
  ExperimentFramework.Governance.Persistence.InMemoryGovernancePersistenceBackplane                                0%
  ExperimentFramework.Governance.Persistence.PersistenceResult<T>                                               68.4%
  ExperimentFramework.Governance.Persistence.ServiceCollectionExtensions                                           0%

ExperimentFramework.Governance.Persistence.Redis                                                                45.4%
  ExperimentFramework.Governance.Persistence.Redis.RedisGovernancePersistenceBackplane                          78.1%
  ExperimentFramework.Governance.Persistence.Redis.ServiceCollectionExtensions                                     0%

ExperimentFramework.Governance.Persistence.Sql                                                                  93.9%
  ExperimentFramework.Governance.Persistence.Sql.EntityConfigurations.ApprovalRecordEntityConfiguration          100%
  ExperimentFramework.Governance.Persistence.Sql.EntityConfigurations.ConfigurationVersionEntityConfiguration    100%
  ExperimentFramework.Governance.Persistence.Sql.EntityConfigurations.ExperimentStateEntityConfiguration         100%
  ExperimentFramework.Governance.Persistence.Sql.EntityConfigurations.PolicyEvaluationEntityConfiguration        100%
  ExperimentFramework.Governance.Persistence.Sql.EntityConfigurations.StateTransitionEntityConfiguration         100%
  ExperimentFramework.Governance.Persistence.Sql.GovernanceDbContext                                             100%
  ExperimentFramework.Governance.Persistence.Sql.ServiceCollectionExtensions                                       0%
  ExperimentFramework.Governance.Persistence.Sql.SqlGovernancePersistenceBackplane                              94.8%

ExperimentFramework.Metrics.Exporters                                                                            100%
  ExperimentFramework.Metrics.Exporters.OpenTelemetryExperimentMetrics                                           100%
  ExperimentFramework.Metrics.Exporters.PrometheusExperimentMetrics                                              100%

ExperimentFramework.OpenFeature                                                                                   80%
  ExperimentFramework.OpenFeature.ExperimentBuilderExtensions                                                     50%
  ExperimentFramework.OpenFeature.OpenFeatureProvider                                                            100%
  ExperimentFramework.OpenFeature.ServiceCollectionExtensions                                                    100%

ExperimentFramework.Plugins                                                                                     86.8%
  ExperimentFramework.Plugins.Abstractions.PluginEventArgs                                                       100%
  ExperimentFramework.Plugins.Abstractions.PluginLoadFailedEventArgs                                             100%
  ExperimentFramework.Plugins.Configuration.PluginConfigurationValidator                                         100%
  ExperimentFramework.Plugins.Configuration.PluginDiscoveryService                                               100%
  ExperimentFramework.Plugins.Configuration.PluginsConfig                                                        100%
  ExperimentFramework.Plugins.HotReload.PluginReloadEventArgs                                                    100%
  ExperimentFramework.Plugins.HotReload.PluginReloadFailedEventArgs                                              100%
  ExperimentFramework.Plugins.HotReload.PluginReloadService                                                      100%
  ExperimentFramework.Plugins.HotReload.PluginWatcher                                                           85.8%
  ExperimentFramework.Plugins.Integration.PluginBuilderExtensions                                                100%
  ExperimentFramework.Plugins.Integration.PluginManager                                                         83.3%
  ExperimentFramework.Plugins.Integration.PluginTypeResolver                                                     100%
  ExperimentFramework.Plugins.Loading.PluginContext                                                             55.4%
  ExperimentFramework.Plugins.Loading.PluginLoadContext                                                           72%
  ExperimentFramework.Plugins.Loading.PluginLoader                                                              91.9%
  ExperimentFramework.Plugins.Loading.SharedTypeRegistry                                                        89.1%
  ExperimentFramework.Plugins.Manifest.ManifestLoader                                                             92%
  ExperimentFramework.Plugins.Manifest.ManifestValidationResult                                                   50%
  ExperimentFramework.Plugins.Manifest.ManifestValidator                                                        97.7%
  ExperimentFramework.Plugins.Manifest.PluginManifest                                                            100%
  ExperimentFramework.Plugins.Manifest.PluginManifestAttribute                                                   100%
  ExperimentFramework.Plugins.Manifest.PluginManifestJson                                                        100%
  ExperimentFramework.Plugins.Security.PluginSecurityValidator                                                    73%
  ExperimentFramework.Plugins.ServiceCollectionDecoratorExtensions                                              70.5%
  ExperimentFramework.Plugins.ServiceCollectionExtensions                                                        100%

ExperimentFramework.Resilience                                                                                    99%
  ExperimentFramework.Resilience.CircuitBreakerDecoratorFactory                                                  100%
  ExperimentFramework.Resilience.CircuitBreakerOpenException                                                     100%
  ExperimentFramework.Resilience.CircuitBreakerOptions                                                           100%
  ExperimentFramework.Resilience.Configuration.CircuitBreakerDecoratorHandler                                    100%
  ExperimentFramework.Resilience.ResilienceBuilderExtensions                                                     100%
  ExperimentFramework.Resilience.ResilienceServiceCollectionExtensions                                          85.7%

ExperimentFramework.Rollout                                                                                     98.7%
  ExperimentFramework.Rollout.Configuration.RolloutSelectionModeHandler                                          100%
  ExperimentFramework.Rollout.Configuration.StagedRolloutSelectionModeHandler                                   97.9%
  ExperimentFramework.Rollout.ExperimentBuilderExtensions                                                        100%
  ExperimentFramework.Rollout.RolloutAllocator                                                                    95%
  ExperimentFramework.Rollout.RolloutProvider                                                                    100%
  ExperimentFramework.Rollout.ServiceCollectionExtensions                                                        100%
  ExperimentFramework.Rollout.StagedRolloutOptions                                                               100%
  ExperimentFramework.Rollout.StagedRolloutProvider                                                              100%

ExperimentFramework.Science                                                                                     93.8%
  ExperimentFramework.Science.Analysis.ExperimentAnalyzer                                                       88.3%
  ExperimentFramework.Science.Builders.EndpointBuilder                                                           100%
  ExperimentFramework.Science.Builders.HypothesisBuilder                                                         100%
  ExperimentFramework.Science.Builders.SuccessCriteriaBuilder                                                    100%
  ExperimentFramework.Science.Corrections.BenjaminiHochbergCorrection                                            100%
  ExperimentFramework.Science.Corrections.BonferroniCorrection                                                   100%
  ExperimentFramework.Science.Corrections.HolmBonferroniCorrection                                               100%
  ExperimentFramework.Science.EffectSize.CohensD                                                                 100%
  ExperimentFramework.Science.EffectSize.EffectSizeExtensions                                                    100%
  ExperimentFramework.Science.EffectSize.OddsRatio                                                               100%
  ExperimentFramework.Science.EffectSize.RelativeRisk                                                            100%
  ExperimentFramework.Science.Models.Hypothesis.Endpoint                                                           0%
  ExperimentFramework.Science.Models.Hypothesis.HypothesisDefinition                                               0%
  ExperimentFramework.Science.Models.Results.StatisticalTestResult                                              66.6%
  ExperimentFramework.Science.Models.Snapshots.EnvironmentInfo                                                     0%
  ExperimentFramework.Science.Power.PowerAnalyzer                                                               78.7%
  ExperimentFramework.Science.Reporting.JsonReporter                                                            88.8%
  ExperimentFramework.Science.Reporting.MarkdownReporter                                                        92.6%
  ExperimentFramework.Science.ServiceCollectionExtensions                                                        100%
  ExperimentFramework.Science.Snapshots.InMemorySnapshotStore                                                   90.1%
  ExperimentFramework.Science.Statistics.ChiSquareTest                                                          98.9%
  ExperimentFramework.Science.Statistics.MannWhitneyUTest                                                       97.3%
  ExperimentFramework.Science.Statistics.OneWayAnova                                                            98.4%
  ExperimentFramework.Science.Statistics.PairedTTest                                                            96.9%
  ExperimentFramework.Science.Statistics.TwoSampleTTest                                                         88.4%

ExperimentFramework.Simulation                                                                                  89.5%
  ExperimentFramework.Simulation.Builders.SimulationRunner                                                       100%
  ExperimentFramework.Simulation.Builders.SimulationRunner<T1, T2>                                                74%
  ExperimentFramework.Simulation.Builders.SimulationRunnerBuilder                                                100%
  ExperimentFramework.Simulation.Builders.SimulationServiceBuilder<T>                                            100%
  ExperimentFramework.Simulation.Comparators.EqualityComparator<T>                                               100%
  ExperimentFramework.Simulation.Comparators.JsonComparator<T>                                                  88.4%
  ExperimentFramework.Simulation.Comparators.SimulationComparators                                               100%
  ExperimentFramework.Simulation.Models.ImplementationResult<T>                                                 85.7%
  ExperimentFramework.Simulation.Models.Scenario<T1, T2>                                                         100%
  ExperimentFramework.Simulation.Models.ScenarioResult<T>                                                        100%
  ExperimentFramework.Simulation.Models.SimulationReport                                                         100%
  ExperimentFramework.Simulation.Reporting.SimulationReportExtensions                                           93.4%
  ExperimentFramework.Simulation.ServiceCollectionExtensions                                                       0%

ExperimentFramework.StickyRouting                                                                                100%
  ExperimentFramework.StickyRouting.ExperimentBuilderExtensions                                                  100%
  ExperimentFramework.StickyRouting.ServiceCollectionExtensions                                                  100%
  ExperimentFramework.StickyRouting.StickyRoutingProvider                                                        100%
  ExperimentFramework.StickyRouting.StickyTrialRouter                                                            100%

ExperimentFramework.Targeting                                                                                    100%
  ExperimentFramework.Targeting.Configuration.TargetingSelectionModeHandler                                      100%
  ExperimentFramework.Targeting.InMemoryTargetingConfiguration                                                   100%
  ExperimentFramework.Targeting.ServiceCollectionExtensions                                                      100%
  ExperimentFramework.Targeting.SimpleTargetingContext                                                           100%
  ExperimentFramework.Targeting.TargetingProvider                                                                100%
  ExperimentFramework.Targeting.TargetingRules                                                                   100%

@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 24, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 77.05%. Comparing base (7848a45) to head (0460f9b).
⚠️ Report is 4 commits behind head on main.

Additional details and impacted files

Impacted file tree graph

@@             Coverage Diff             @@
##             main      #89       +/-   ##
===========================================
+ Coverage   66.19%   77.05%   +10.86%     
===========================================
  Files         250      250               
  Lines        9888     9888               
  Branches     1634     1397      -237     
===========================================
+ Hits         6545     7619     +1074     
+ Misses       2989     2269      -720     
+ Partials      354        0      -354     
Flag Coverage Δ
unittests 77.05% <ø> (+10.86%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.
see 126 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@JerrettDavis JerrettDavis merged commit 4be4f97 into main Apr 24, 2026
11 checks passed
@JerrettDavis JerrettDavis deleted the feat/coverage-phase-3 branch April 24, 2026 15:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant