< Summary

Line coverage
73%
Covered lines: 11
Uncovered lines: 4
Coverable lines: 15
Total lines: 266
Line coverage: 73.3%
Branch coverage
100%
Covered branches: 2
Total branches: 2
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
File 1: .cctor()100%210%
File 2: .ctor(...)100%11100%
File 2: get_Order()100%210%
File 2: CanInvoke(...)100%210%
File 2: InvokeAsync()100%22100%

File(s)

/home/runner/work/anichron/anichron/src/.artifacts/obj/Anichron.Worker/debug/Microsoft.Extensions.Logging.Generators/Microsoft.Extensions.Logging.Generators.LoggerMessageGenerator/LoggerMessage.g.cs

File '/home/runner/work/anichron/anichron/src/.artifacts/obj/Anichron.Worker/debug/Microsoft.Extensions.Logging.Generators/Microsoft.Extensions.Logging.Generators.LoggerMessageGenerator/LoggerMessage.g.cs' does not exist (any more).

/home/runner/work/anichron/anichron/src/Anichron.Worker/Ingestion/Middlewares/IdempotencyCheckMiddleware.cs

#LineLine coverage
 1using Anichron.Core.Data.Repository;
 2using Anichron.Worker.Ingestion.Pipeline;
 3
 4namespace Anichron.Worker.Ingestion.Middlewares;
 5
 36internal sealed partial class IdempotencyCheckMiddleware(
 37    IMediaAssetRepository repository,
 38    ILogger<IdempotencyCheckMiddleware> logger) : IIngestionMiddleware
 9{
 010    public int Order => IngestionOrder.IdempotencyCheck;
 011    public bool CanInvoke(IngestionContext context) => true;
 12
 13    public async Task InvokeAsync(IngestionContext context, IngestionDelegate next, CancellationToken ct)
 314    {
 15        // Ordering guarantees ContentHashingMiddleware ran first; suppression is safe.
 316        var existing = await repository.FindByHashAsync(context.ContentHash!, context.Config.Id, ct);
 317        if (existing is not null)
 118        {
 119            Log.AlreadyIngested(logger, context.Item.AbsolutePath);
 120            return;
 21        }
 22
 223        await next(context, ct);
 324    }
 25
 26    private static partial class Log
 27    {
 28        [LoggerMessage(Level = LogLevel.Debug, Message = "Already ingested {Path}, skipping.")]
 29        public static partial void AlreadyIngested(ILogger logger, string path);
 30    }
 31}