namespace HrynCo.DAL.EF.Tests; using System.Data.Common; using Microsoft.EntityFrameworkCore.Diagnostics; internal sealed class TransactionFailureInterceptor : DbTransactionInterceptor { public Exception? CommitException { get; init; } public Exception? RollbackException { get; init; } public int CommitAttempts { get; private set; } public int RollbackAttempts { get; private set; } public override ValueTask TransactionCommittingAsync( DbTransaction transaction, TransactionEventData eventData, InterceptionResult result, CancellationToken cancellationToken = default) { CommitAttempts++; if (CommitException is not null) { throw CommitException; } return ValueTask.FromResult(result); } public override ValueTask TransactionRollingBackAsync( DbTransaction transaction, TransactionEventData eventData, InterceptionResult result, CancellationToken cancellationToken = default) { RollbackAttempts++; if (RollbackException is not null) { throw RollbackException; } return ValueTask.FromResult(result); } }