Skip to content

feat: implemented the composite pattern and a pricing rules demo using it.#15

Merged
JerrettDavis merged 1 commit intomainfrom
feature/add-composite
Sep 17, 2025
Merged

feat: implemented the composite pattern and a pricing rules demo using it.#15
JerrettDavis merged 1 commit intomainfrom
feature/add-composite

Conversation

@JerrettDavis
Copy link
Copy Markdown
Owner

@JerrettDavis JerrettDavis commented Sep 17, 2025

No description provided.

@JerrettDavis JerrettDavis self-assigned this Sep 17, 2025
@JerrettDavis JerrettDavis added documentation Improvements or additions to documentation enhancement New feature or request labels Sep 17, 2025
@JerrettDavis JerrettDavis changed the title feat: implemented the composite pattern and a pricing rules demo usin… feat: implemented the composite pattern and a pricing rules demo using it. Sep 17, 2025
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR implements the Composite pattern and demonstrates it with a comprehensive pricing rules demo, while also updating TinyBDD dependencies across test projects.

  • Implements Composite<TIn,TOut> pattern with fluent builder API for uniform treatment of leaves and compositions
  • Adds a pricing calculator demo showcasing async sources, loyalty stacking, payment discounts, bundles, coupons, taxes, and rounding rules
  • Updates TinyBDD package versions from 0.8.3 to 0.9.0 across all test projects

Reviewed Changes

Copilot reviewed 23 out of 23 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/PatternKit.Core/Structural/Composite/Composite.cs Core implementation of Composite pattern with fluent builder
test/PatternKit.Tests/Structural/Composite/CompositeTests.cs Comprehensive tests for Composite pattern functionality
src/PatternKit.Examples/Pricing/*.cs Complete pricing calculator demo with domain models, sources, pipeline, and demo builder
test/PatternKit.Examples.Tests/Pricing/PricingDemoTests.cs End-to-end tests for pricing calculator scenarios
docs/patterns/structural/composite/composite.md Complete documentation and tutorial for Composite pattern
docs/patterns/index.md Updated to include Composite pattern
test/**/packages.lock.json Updated TinyBDD dependency versions to 0.9.0
test/**/*.csproj Updated TinyBDD package references to 0.9.0

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

Comment thread test/PatternKit.Tests/Behavioral/Chain/ActionChainTests.cs
Comment thread test/PatternKit.Tests/Behavioral/Chain/ActionChainTests.cs
@github-actions
Copy link
Copy Markdown
Contributor

Code Coverage

Summary
  Generated on: 09/17/2025 - 03:16:56
  Coverage date: 09/17/2025 - 03:16:47 - 09/17/2025 - 03:16:52
  Parser: MultiReport (6x Cobertura)
  Assemblies: 3
  Classes: 96
  Files: 39
  Line coverage: 88.4%
  Covered lines: 1807
  Uncovered lines: 235
  Coverable lines: 2042
  Total lines: 6638
  Branch coverage: 80.3% (574 of 714)
  Covered branches: 574
  Total branches: 714
  Method coverage: 88.2% (497 of 563)
  Full method coverage: 82.7% (466 of 563)
  Covered methods: 497
  Fully covered methods: 466
  Total methods: 563

PatternKit.Core                                                                  90.2%
  PatternKit.Behavioral.Chain.ActionChain<T>                                     84.7%
  PatternKit.Behavioral.Chain.ResultChain<T1, T2>                                 100%
  PatternKit.Behavioral.Strategy.ActionStrategy<T>                                 97%
  PatternKit.Behavioral.Strategy.AsyncStrategy<T1, T2>                           93.5%
  PatternKit.Behavioral.Strategy.Strategy<T1, T2>                                 100%
  PatternKit.Behavioral.Strategy.TryStrategy<T1, T2>                             95.8%
  PatternKit.Common.Option<T>                                                      60%
  PatternKit.Common.Throw                                                         100%
  PatternKit.Common.TryHandlerExtensions                                         33.3%
  PatternKit.Creational.Builder.BranchBuilder<T1, T2>                             100%
  PatternKit.Creational.Builder.BuilderExtensions                                 100%
  PatternKit.Creational.Builder.ChainBuilder<T>                                   100%
  PatternKit.Creational.Builder.Composer<T1, T2>                                  100%
  PatternKit.Creational.Builder.MutableBuilder<T>                                 100%
  PatternKit.Creational.Factory.Factory<T1, T2>                                    90%
  PatternKit.Creational.Factory.Factory<T1, T2, T3>                                90%
  PatternKit.Creational.Prototype.Prototype<T>                                    100%
  PatternKit.Creational.Prototype.Prototype<T1, T2>                                90%
  PatternKit.Creational.Singleton.Singleton<T>                                    100%
  PatternKit.Structural.Adapter.Adapter<T1, T2>                                  82.2%
  PatternKit.Structural.Bridge.Bridge<T1, T2, T3>                                77.5%
  PatternKit.Structural.Composite.Composite<T1, T2>                              97.4%

PatternKit.Examples                                                              87.7%
  PatternKit.Examples.ApiGateway.Demo                                            97.8%
  PatternKit.Examples.ApiGateway.MiniRouter                                      96.6%
  PatternKit.Examples.ApiGateway.Request                                           75%
  PatternKit.Examples.ApiGateway.Response                                         100%
  PatternKit.Examples.ApiGateway.Responses                                        100%
  PatternKit.Examples.Chain.AuthLoggingDemo                                      95.2%
  PatternKit.Examples.Chain.CardProcessors                                        100%
  PatternKit.Examples.Chain.CardTenderStrategy                                      0%
  PatternKit.Examples.Chain.CashTenderStrategy                                      0%
  PatternKit.Examples.Chain.ChainStage                                            100%
  PatternKit.Examples.Chain.CharityRoundUpRule                                     20%
  PatternKit.Examples.Chain.ConfigDriven.Bundle1OffEach                          14.2%
  PatternKit.Examples.Chain.ConfigDriven.CardTender                              72.2%
  PatternKit.Examples.Chain.ConfigDriven.Cash2Pct                                16.6%
  PatternKit.Examples.Chain.ConfigDriven.CashTender                              90.9%
  PatternKit.Examples.Chain.ConfigDriven.CharityRoundUp                           100%
  PatternKit.Examples.Chain.ConfigDriven.ConfigDrivenPipelineBuilderExtensions   94.2%
  PatternKit.Examples.Chain.ConfigDriven.ConfigDrivenPipelineDemo                 100%
  PatternKit.Examples.Chain.ConfigDriven.Loyalty5Pct                               20%
  PatternKit.Examples.Chain.ConfigDriven.NickelCashOnly                          77.7%
  PatternKit.Examples.Chain.ConfigDriven.PipelineOptions                          100%
  PatternKit.Examples.Chain.Customer                                              100%
  PatternKit.Examples.Chain.DeviceBus                                             100%
  PatternKit.Examples.Chain.GenericProcessor                                      100%
  PatternKit.Examples.Chain.HttpRequest                                           100%
  PatternKit.Examples.Chain.IRoundingRule                                         100%
  PatternKit.Examples.Chain.LineItem                                              100%
  PatternKit.Examples.Chain.MediatedTransactionPipelineDemo                       100%
  PatternKit.Examples.Chain.NickelCashOnlyRule                                    100%
  PatternKit.Examples.Chain.NoopCharityTracker                                      0%
  PatternKit.Examples.Chain.RoundingPipeline                                      100%
  PatternKit.Examples.Chain.Tender                                                100%
  PatternKit.Examples.Chain.TenderRouterFactory                                  91.3%
  PatternKit.Examples.Chain.TenderStrategyRegistry                                  0%
  PatternKit.Examples.Chain.TransactionContext                                    100%
  PatternKit.Examples.Chain.TransactionPipeline                                   100%
  PatternKit.Examples.Chain.TransactionPipelineBuilder                           92.3%
  PatternKit.Examples.Chain.TxResult                                              100%
  PatternKit.Examples.Coercion.Coercer<T>                                        83.3%
  PatternKit.Examples.Coercion.CoercerExtensions                                  100%
  PatternKit.Examples.Generators.IntParser                                         60%
  PatternKit.Examples.Generators.OrderRouter                                     95.2%
  PatternKit.Examples.Generators.ScoreLabeler                                     100%
  PatternKit.Examples.Pricing.ApiPricingSource                                    100%
  PatternKit.Examples.Pricing.CharityRoundUpRule                                  100%
  PatternKit.Examples.Pricing.Coupon                                              100%
  PatternKit.Examples.Pricing.DbPricingSource                                     100%
  PatternKit.Examples.Pricing.DefaultSourceRouting                               83.3%
  PatternKit.Examples.Pricing.FilePricingSource                                   100%
  PatternKit.Examples.Pricing.LineItem                                            100%
  PatternKit.Examples.Pricing.Location                                            100%
  PatternKit.Examples.Pricing.LoyaltyMembership                                   100%
  PatternKit.Examples.Pricing.NickelCashOnlyRule                                  100%
  PatternKit.Examples.Pricing.PercentLoyaltyRule                                  100%
  PatternKit.Examples.Pricing.PricingContext                                      100%
  PatternKit.Examples.Pricing.PricingDemo                                        59.3%
  PatternKit.Examples.Pricing.PricingPipeline                                     100%
  PatternKit.Examples.Pricing.PricingPipelineBuilder                              100%
  PatternKit.Examples.Pricing.PricingResult                                       100%
  PatternKit.Examples.Pricing.RegionCategoryTaxPolicy                             100%
  PatternKit.Examples.Pricing.Sku                                                85.7%
  PatternKit.Examples.Pricing.SourceRouter                                       92.3%
  PatternKit.Examples.Singleton.DeviceRegistry                                    100%
  PatternKit.Examples.Singleton.PosAppState                                       100%
  PatternKit.Examples.Singleton.PosAppStateDemo                                   100%
  PatternKit.Examples.Singleton.PricingCache                                      100%
  PatternKit.Examples.Singleton.StoreConfig                                       100%
  PatternKit.Examples.Strategies.Composed.ChannelPolicy                           100%
  PatternKit.Examples.Strategies.Composed.ChannelPolicyFactory                    100%
  PatternKit.Examples.Strategies.Composed.ComposedStrategies                     94.2%
  PatternKit.Examples.Strategies.Composed.SendContext                             100%
  PatternKit.Examples.Strategies.Composed.SendResult                              100%

PatternKit.Generators                                                            88.2%
  PatternKit.Generators.GenerateStrategyAttribute                                   0%
  PatternKit.Generators.StrategyGenerator                                        93.9%

@codecov-commenter
Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 90.74074% with 30 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.01%. Comparing base (94e21b9) to head (2735d79).

Files with missing lines Patch % Lines
src/PatternKit.Examples/Pricing/Demo.cs 59.37% 26 Missing ⚠️
src/PatternKit.Examples/Pricing/Sources.cs 93.75% 2 Missing ⚠️
.../PatternKit.Core/Structural/Composite/Composite.cs 97.43% 1 Missing ⚠️
src/PatternKit.Examples/Pricing/Domain.cs 95.23% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main      #15      +/-   ##
==========================================
+ Coverage   84.63%   90.01%   +5.37%     
==========================================
  Files          28       33       +5     
  Lines        1608     1932     +324     
  Branches      227      277      +50     
==========================================
+ Hits         1361     1739     +378     
- Misses        186      193       +7     
+ Partials       61        0      -61     
Flag Coverage Δ
unittests 90.01% <90.74%> (+5.37%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@JerrettDavis JerrettDavis merged commit 0e1623f into main Sep 17, 2025
4 checks passed
@JerrettDavis JerrettDavis deleted the feature/add-composite branch September 17, 2025 03:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants