Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: thomhurst/TUnit
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v1.40.5
Choose a base ref
...
head repository: thomhurst/TUnit
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v1.40.10
Choose a head ref
  • 5 commits
  • 45 files changed
  • 2 contributors

Commits on Apr 27, 2026

  1. Configuration menu
    Copy the full SHA
    a1fbb3c View commit details
    Browse the repository at this point in the history
  2. chore(deps): update tunit to 1.40.5 (#5769)

    Co-authored-by: Renovate Bot <[email protected]>
    thomhurst and renovate-bot authored Apr 27, 2026
    Configuration menu
    Copy the full SHA
    18affa5 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    106eb69 View commit details
    Browse the repository at this point in the history
  4. fix(cloudshop): retry RabbitMQ publishes and surface failures (#5772)

    * fix(cloudshop): retry RabbitMQ publishes and stop swallowing failures silently
    
    OrderEventPublisher now retries publishes up to 4 times with exponential
    backoff and logs every attempt. Order endpoints still tolerate publish
    failures (so payment isn't rejected when RabbitMQ is briefly down), but
    they now log at error level instead of discarding the exception, making
    the "stuck order" failure mode (e.g. CloudShop integration flake where
    Step3_Worker_Fulfills_Order timed out at PaymentProcessed) visible in
    test output.
    
    * fix(cloudshop): pre-declare RabbitMQ exchange/queue at API startup
    
    The previous CI failure was not a publish failure (no retry warnings
    appeared in the logs) but a publish/subscribe race: Aspire considers
    the worker resource ready as soon as its process starts, before
    OrderProcessingWorker.ExecuteAsync has actually declared the
    "order-processing" queue and bound it to "order.payment-processed".
    If the API publishes a payment event in that window the message is
    routed to an unbound exchange and dropped, leaving the order stuck
    at PaymentProcessed.
    
    Declare the exchange, durable queue and binding in API startup so the
    queue exists from the moment the API is ready. The worker's own
    declarations remain (idempotent) and continue to work standalone.
    thomhurst authored Apr 27, 2026
    Configuration menu
    Copy the full SHA
    c240c3a View commit details
    Browse the repository at this point in the history
  5. refactor(opentelemetry): depend on TUnit.Core instead of umbrella TUn…

    …it (#5774)
    
    * refactor(opentelemetry): depend on TUnit.Core instead of umbrella TUnit
    
    Inverts the cross-assembly contract for external span ingestion so
    TUnit.OpenTelemetry no longer pulls in TUnit.Engine + TUnit.Assertions
    + Microsoft.Testing.Extensions transitively.
    
    - Move SpanData/SpanEvent/SpanLink/ReportKeyValue POCOs to TUnit.Core.
    - Add ExternalSpanSink hook in TUnit.Core (Action<SpanData>? slot,
      Interlocked.CompareExchange register/unregister, first-wins).
    - ActivityCollector registers IngestExternalSpan as the sink during
      Start/Stop. OtlpReceiver pushes through the sink instead of calling
      ActivityCollector.Current directly.
    - Drop dead InternalsVisibleTo for TUnit.OpenTelemetry from
      TUnit.Engine.csproj.
    
    * review: Volatile.Read on ExternalSpanSink.Current; register SpanLink in JSON context
    
    Addresses PR #5774 review feedback:
    - ExternalSpanSink.Current now uses Volatile.Read so weak memory models
      (ARM) cannot observe a stale null after Register publishes the sink.
    - HtmlReportJsonContext explicitly registers SpanLink for consistency
      with the other peer DTOs (was reachable transitively via SpanData.Links).
    thomhurst authored Apr 27, 2026
    Configuration menu
    Copy the full SHA
    f9ed7e2 View commit details
    Browse the repository at this point in the history
Loading