< 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
95%
Covered lines: 23
Uncovered lines: 1
Coverable lines: 24
Total lines: 52
Line coverage: 95.8%
Branch coverage
90%
Covered branches: 9
Total branches: 10
Branch coverage: 90%
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(...)100%88100%
.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
 157public sealed class InMemoryPreviewResultStore(ISystemClock clock) : IPreviewResultStore
 8{
 159    private readonly object _syncRoot = new();
 1510    private readonly Dictionary<string, PreviewEntry> _entries = new(StringComparer.Ordinal);
 11
 12    public ValueTask SaveAsync(PreviewResult result, CancellationToken cancellationToken = default)
 13    {
 614        cancellationToken.ThrowIfCancellationRequested();
 15
 616        lock (_syncRoot)
 17        {
 618            if (_entries.ContainsKey(result.HandleHash))
 019                throw new InvalidOperationException("A preview result already exists for the supplied handle.");
 20
 621            _entries[result.HandleHash] = new(result);
 622        }
 23
 624        return ValueTask.CompletedTask;
 25    }
 26
 27    public ValueTask<TakeResult<PreviewResult>> TryTakeAsync(string handleHash, string administratorId, CancellationToke
 28    {
 2829        cancellationToken.ThrowIfCancellationRequested();
 30
 2831        lock (_syncRoot)
 32        {
 2833            if (!_entries.TryGetValue(handleHash, out var entry) || !string.Equals(entry.Result.AdministratorId, adminis
 234                return ValueTask.FromResult<TakeResult<PreviewResult>>(new TakeResult<PreviewResult>.NotFound());
 35
 2636            if (entry.Result.ExpiresAt <= clock.UtcNow)
 237                return ValueTask.FromResult<TakeResult<PreviewResult>>(new TakeResult<PreviewResult>.Expired());
 38
 2439            if (entry.IsConsumed)
 1940                return ValueTask.FromResult<TakeResult<PreviewResult>>(new TakeResult<PreviewResult>.AlreadyConsumed());
 41
 542            entry.IsConsumed = true;
 543            return ValueTask.FromResult<TakeResult<PreviewResult>>(new TakeResult<PreviewResult>.Taken(entry.Result));
 44        }
 2845    }
 46
 647    private sealed class PreviewEntry(PreviewResult result)
 48    {
 6549        public PreviewResult Result { get; } = result;
 2950        public bool IsConsumed { get; set; }
 51    }
 52}