• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

ImmediatePlatform / Immediate.Jobs / 30302568744

27 Jul 2026 08:26PM UTC coverage: 66.69%. First build
30302568744

Pull #26

github

web-flow
Merge 4a231468a into eac5c1044
Pull Request #26: Add batches and continuation workflows

1239 of 1810 new or added lines in 17 files covered. (68.45%)

2855 of 4281 relevant lines covered (66.69%)

2.66 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/Immediate.Jobs.Testing/CaptureOnlyRecurringJobScheduler.cs
1
namespace Immediate.Jobs.Testing;
2

3
/// <summary>
4
/// A storage-free implementation of <see cref="IRecurringJobScheduler"/> that records recurring calls.
5
/// </summary>
6
public class CaptureOnlyRecurringJobScheduler : IRecurringJobScheduler
7
{
8
        private readonly List<RecurringJobCapture> _captures = [];
×
9

10
        /// <summary>All calls captured in call order.</summary>
11
        public IReadOnlyList<RecurringJobCapture> Captures => _captures;
×
12

13
        /// <summary>The latest captured call, or <see langword="null"/> when none exists.</summary>
14
        public RecurringJobCapture? Last => _captures.Count == 0 ? null : _captures[^1];
×
15

16
        /// <inheritdoc />
17
        public virtual ValueTask AddOrUpdateRecurring(
18
                string name,
19
                string cron,
20
                string timeZone = "UTC",
21
                CancellationToken cancellationToken = default
22
        )
23
        {
24
                cancellationToken.ThrowIfCancellationRequested();
×
25
                _captures.Add(new(RecurringJobOperation.AddOrUpdate, name, cron, timeZone));
×
26
                return ValueTask.CompletedTask;
×
27
        }
28

29
        /// <inheritdoc />
30
        public virtual ValueTask RemoveRecurring(string name, CancellationToken cancellationToken = default)
31
        {
32
                cancellationToken.ThrowIfCancellationRequested();
×
33
                _captures.Add(new(RecurringJobOperation.Remove, name));
×
34
                return ValueTask.CompletedTask;
×
35
        }
36

37
        /// <inheritdoc />
38
        public virtual ValueTask<JobHandle> TriggerNow(CancellationToken cancellationToken = default)
39
        {
40
                cancellationToken.ThrowIfCancellationRequested();
×
41
                var id = CreateId();
×
42
                _captures.Add(new(RecurringJobOperation.Trigger, JobId: id));
×
NEW
43
                return ValueTask.FromResult(new JobHandle(id));
×
44
        }
45

46
        /// <summary>Clears every captured call.</summary>
47
        public void Clear() => _captures.Clear();
×
48

49
        /// <summary>Creates trigger identifiers. Override when a test requires predictable identifiers.</summary>
50
        protected virtual string CreateId() => Guid.NewGuid().ToString("N");
×
51
}
52

53
/// <summary>The operation represented by a recurring scheduler capture.</summary>
54
public enum RecurringJobOperation
55
{
56
        /// <summary>Add or replace a durable schedule.</summary>
57
        AddOrUpdate,
58
        /// <summary>Remove a durable schedule.</summary>
59
        Remove,
60
        /// <summary>Trigger the recurring job immediately.</summary>
61
        Trigger,
62
}
63

64
/// <summary>A captured recurring scheduler call.</summary>
65
public sealed record RecurringJobCapture(
×
66
        RecurringJobOperation Operation,
×
67
        string? Name = null,
×
68
        string? Cron = null,
×
69
        string? TimeZone = null,
×
70
        string? JobId = null
×
71
);
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc