< Summary

Information
Class: Elsa.ExternalAuthentication.Stores.InMemory.InMemoryPreviewResultStore
Assembly: Elsa.ExternalAuthentication
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.ExternalAuthentication/Stores/InMemory/InMemoryPreviewResultStore.cs
Line coverage
91%
Covered lines: 22
Uncovered lines: 2
Coverable lines: 24
Total lines: 52
Line coverage: 91.6%
Branch coverage
80%
Covered branches: 8
Total branches: 10
Branch coverage: 80%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
SaveAsync(...)50%2285.71%
TryTakeAsync(...)87.5%8890.9%
.ctor(...)100%11100%
get_Result()100%11100%
get_IsConsumed()100%11100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.ExternalAuthentication/Stores/InMemory/InMemoryPreviewResultStore.cs

#LineLine coverage
 1using Elsa.Common;
 2using Elsa.ExternalAuthentication.Contracts;
 3using Elsa.ExternalAuthentication.Models;
 4
 5namespace Elsa.ExternalAuthentication.Stores.InMemory;
 6
 67public sealed class InMemoryPreviewResultStore(ISystemClock clock) : IPreviewResultStore
 8{
 69    private readonly object _syncRoot = new();
 610    private readonly Dictionary<string, PreviewEntry> _entries = new(StringComparer.Ordinal);
 11
 12    public ValueTask SaveAsync(PreviewResult result, CancellationToken cancellationToken = default)
 13    {
 314        cancellationToken.ThrowIfCancellationRequested();
 15
 316        lock (_syncRoot)
 17        {
 318            if (_entries.ContainsKey(result.HandleHash))
 019                throw new InvalidOperationException("A preview result already exists for the supplied handle.");
 20
 321            _entries[result.HandleHash] = new PreviewEntry(result);
 322        }
 23
 324        return ValueTask.CompletedTask;
 25    }
 26
 27    public ValueTask<TakeResult<PreviewResult>> TryTakeAsync(string handleHash, string administratorId, CancellationToke
 28    {
 2229        cancellationToken.ThrowIfCancellationRequested();
 30
 2231        lock (_syncRoot)
 32        {
 2233            if (!_entries.TryGetValue(handleHash, out var entry) || !string.Equals(entry.Result.AdministratorId, adminis
 234                return ValueTask.FromResult<TakeResult<PreviewResult>>(new TakeResult<PreviewResult>.NotFound());
 35
 2036            if (entry.Result.ExpiresAt <= clock.UtcNow)
 037                return ValueTask.FromResult<TakeResult<PreviewResult>>(new TakeResult<PreviewResult>.Expired());
 38
 2039            if (entry.IsConsumed)
 1740                return ValueTask.FromResult<TakeResult<PreviewResult>>(new TakeResult<PreviewResult>.AlreadyConsumed());
 41
 342            entry.IsConsumed = true;
 343            return ValueTask.FromResult<TakeResult<PreviewResult>>(new TakeResult<PreviewResult>.Taken(entry.Result));
 44        }
 2245    }
 46
 347    private sealed class PreviewEntry(PreviewResult result)
 48    {
 4849        public PreviewResult Result { get; } = result;
 2350        public bool IsConsumed { get; set; }
 51    }
 52}