Merge remote changes (theirs)
This commit is contained in:
@@ -5,6 +5,6 @@ Source of truth: `docs/implplan/SPRINT_20251229_049_BE_csproj_audit_maint_tests.
|
||||
|
||||
| Task ID | Status | Notes |
|
||||
| --- | --- | --- |
|
||||
| AUDIT-0416-M | DONE | Maintainability audit for StellaOps.Notify.WebService. |
|
||||
| AUDIT-0416-T | DONE | Test coverage audit for StellaOps.Notify.WebService. |
|
||||
| AUDIT-0416-A | TODO | Pending approval for apply tasks. |
|
||||
| AUDIT-0416-M | DONE | Revalidated 2026-01-07; maintainability audit for StellaOps.Notify.WebService. |
|
||||
| AUDIT-0416-T | DONE | Revalidated 2026-01-07; test coverage audit for StellaOps.Notify.WebService. |
|
||||
| AUDIT-0416-A | TODO | Revalidated 2026-01-07 (open findings). |
|
||||
|
||||
@@ -5,6 +5,6 @@ Source of truth: `docs/implplan/SPRINT_20251229_049_BE_csproj_audit_maint_tests.
|
||||
|
||||
| Task ID | Status | Notes |
|
||||
| --- | --- | --- |
|
||||
| AUDIT-0418-M | DONE | Maintainability audit for StellaOps.Notify.Worker. |
|
||||
| AUDIT-0418-T | DONE | Test coverage audit for StellaOps.Notify.Worker. |
|
||||
| AUDIT-0418-A | TODO | Pending approval for apply tasks. |
|
||||
| AUDIT-0418-M | DONE | Revalidated 2026-01-07; maintainability audit for StellaOps.Notify.Worker. |
|
||||
| AUDIT-0418-T | DONE | Revalidated 2026-01-07; test coverage audit for StellaOps.Notify.Worker. |
|
||||
| AUDIT-0418-A | TODO | Revalidated 2026-01-07 (open findings). |
|
||||
|
||||
@@ -5,6 +5,6 @@ Source of truth: `docs/implplan/SPRINT_20251229_049_BE_csproj_audit_maint_tests.
|
||||
|
||||
| Task ID | Status | Notes |
|
||||
| --- | --- | --- |
|
||||
| AUDIT-0397-M | DONE | Maintainability audit for StellaOps.Notify.Connectors.Email. |
|
||||
| AUDIT-0397-T | DONE | Test coverage audit for StellaOps.Notify.Connectors.Email. |
|
||||
| AUDIT-0397-A | TODO | Pending approval for apply tasks. |
|
||||
| AUDIT-0397-M | DONE | Revalidated 2026-01-07; maintainability audit for StellaOps.Notify.Connectors.Email. |
|
||||
| AUDIT-0397-T | DONE | Revalidated 2026-01-07; test coverage audit for StellaOps.Notify.Connectors.Email. |
|
||||
| AUDIT-0397-A | TODO | Revalidated 2026-01-07 (open findings). |
|
||||
|
||||
@@ -5,6 +5,6 @@ Source of truth: `docs/implplan/SPRINT_20251229_049_BE_csproj_audit_maint_tests.
|
||||
|
||||
| Task ID | Status | Notes |
|
||||
| --- | --- | --- |
|
||||
| AUDIT-0399-M | DONE | Maintainability audit for StellaOps.Notify.Connectors.Shared. |
|
||||
| AUDIT-0399-T | DONE | Test coverage audit for StellaOps.Notify.Connectors.Shared. |
|
||||
| AUDIT-0399-A | TODO | Pending approval for apply tasks. |
|
||||
| AUDIT-0399-M | DONE | Revalidated 2026-01-07; maintainability audit for StellaOps.Notify.Connectors.Shared. |
|
||||
| AUDIT-0399-T | DONE | Revalidated 2026-01-07; test coverage audit for StellaOps.Notify.Connectors.Shared. |
|
||||
| AUDIT-0399-A | TODO | Revalidated 2026-01-07 (open findings). |
|
||||
|
||||
@@ -5,6 +5,6 @@ Source of truth: `docs/implplan/SPRINT_20251229_049_BE_csproj_audit_maint_tests.
|
||||
|
||||
| Task ID | Status | Notes |
|
||||
| --- | --- | --- |
|
||||
| AUDIT-0400-M | DONE | Maintainability audit for StellaOps.Notify.Connectors.Slack. |
|
||||
| AUDIT-0400-T | DONE | Test coverage audit for StellaOps.Notify.Connectors.Slack. |
|
||||
| AUDIT-0400-A | TODO | Pending approval for apply tasks. |
|
||||
| AUDIT-0400-M | DONE | Revalidated 2026-01-07; maintainability audit for StellaOps.Notify.Connectors.Slack. |
|
||||
| AUDIT-0400-T | DONE | Revalidated 2026-01-07; test coverage audit for StellaOps.Notify.Connectors.Slack. |
|
||||
| AUDIT-0400-A | TODO | Revalidated 2026-01-07 (open findings). |
|
||||
|
||||
@@ -5,6 +5,6 @@ Source of truth: `docs/implplan/SPRINT_20251229_049_BE_csproj_audit_maint_tests.
|
||||
|
||||
| Task ID | Status | Notes |
|
||||
| --- | --- | --- |
|
||||
| AUDIT-0402-M | DONE | Maintainability audit for StellaOps.Notify.Connectors.Teams. |
|
||||
| AUDIT-0402-T | DONE | Test coverage audit for StellaOps.Notify.Connectors.Teams. |
|
||||
| AUDIT-0402-A | TODO | Pending approval for apply tasks. |
|
||||
| AUDIT-0402-M | DONE | Revalidated 2026-01-07; maintainability audit for StellaOps.Notify.Connectors.Teams. |
|
||||
| AUDIT-0402-T | DONE | Revalidated 2026-01-07; test coverage audit for StellaOps.Notify.Connectors.Teams. |
|
||||
| AUDIT-0402-A | TODO | Revalidated 2026-01-07 (open findings). |
|
||||
|
||||
@@ -5,6 +5,6 @@ Source of truth: `docs/implplan/SPRINT_20251229_049_BE_csproj_audit_maint_tests.
|
||||
|
||||
| Task ID | Status | Notes |
|
||||
| --- | --- | --- |
|
||||
| AUDIT-0404-M | DONE | Maintainability audit for StellaOps.Notify.Connectors.Webhook. |
|
||||
| AUDIT-0404-T | DONE | Test coverage audit for StellaOps.Notify.Connectors.Webhook. |
|
||||
| AUDIT-0404-A | TODO | Pending approval for apply tasks. |
|
||||
| AUDIT-0404-M | DONE | Revalidated 2026-01-07; maintainability audit for StellaOps.Notify.Connectors.Webhook. |
|
||||
| AUDIT-0404-T | DONE | Revalidated 2026-01-07; test coverage audit for StellaOps.Notify.Connectors.Webhook. |
|
||||
| AUDIT-0404-A | TODO | Revalidated 2026-01-07 (open findings). |
|
||||
|
||||
@@ -5,6 +5,6 @@ Source of truth: `docs/implplan/SPRINT_20251229_049_BE_csproj_audit_maint_tests.
|
||||
|
||||
| Task ID | Status | Notes |
|
||||
| --- | --- | --- |
|
||||
| AUDIT-0407-M | DONE | Maintainability audit for StellaOps.Notify.Engine. |
|
||||
| AUDIT-0407-T | DONE | Test coverage audit for StellaOps.Notify.Engine. |
|
||||
| AUDIT-0407-A | TODO | Pending approval for apply tasks. |
|
||||
| AUDIT-0407-M | DONE | Revalidated 2026-01-07; maintainability audit for StellaOps.Notify.Engine. |
|
||||
| AUDIT-0407-T | DONE | Revalidated 2026-01-07; test coverage audit for StellaOps.Notify.Engine. |
|
||||
| AUDIT-0407-A | TODO | Revalidated 2026-01-07 (open findings). |
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -5,6 +5,6 @@ Source of truth: `docs/implplan/SPRINT_20251229_049_BE_csproj_audit_maint_tests.
|
||||
|
||||
| Task ID | Status | Notes |
|
||||
| --- | --- | --- |
|
||||
| AUDIT-0409-M | DONE | Maintainability audit for StellaOps.Notify.Models. |
|
||||
| AUDIT-0409-T | DONE | Test coverage audit for StellaOps.Notify.Models. |
|
||||
| AUDIT-0409-A | TODO | Pending approval for apply tasks. |
|
||||
| AUDIT-0409-M | DONE | Revalidated 2026-01-07; maintainability audit for StellaOps.Notify.Models. |
|
||||
| AUDIT-0409-T | DONE | Revalidated 2026-01-07; test coverage audit for StellaOps.Notify.Models. |
|
||||
| AUDIT-0409-A | TODO | Revalidated 2026-01-07 (open findings). |
|
||||
|
||||
@@ -5,6 +5,6 @@ Source of truth: `docs/implplan/SPRINT_20251229_049_BE_csproj_audit_maint_tests.
|
||||
|
||||
| Task ID | Status | Notes |
|
||||
| --- | --- | --- |
|
||||
| AUDIT-0411-M | DONE | Maintainability audit for StellaOps.Notify.Persistence. |
|
||||
| AUDIT-0411-T | DONE | Test coverage audit for StellaOps.Notify.Persistence. |
|
||||
| AUDIT-0411-A | TODO | Pending approval for apply tasks. |
|
||||
| AUDIT-0411-M | DONE | Revalidated 2026-01-07; maintainability audit for StellaOps.Notify.Persistence. |
|
||||
| AUDIT-0411-T | DONE | Revalidated 2026-01-07; test coverage audit for StellaOps.Notify.Persistence. |
|
||||
| AUDIT-0411-A | TODO | Revalidated 2026-01-07 (open findings). |
|
||||
|
||||
@@ -5,6 +5,6 @@ Source of truth: `docs/implplan/SPRINT_20251229_049_BE_csproj_audit_maint_tests.
|
||||
|
||||
| Task ID | Status | Notes |
|
||||
| --- | --- | --- |
|
||||
| AUDIT-0413-M | DONE | Maintainability audit for StellaOps.Notify.Queue. |
|
||||
| AUDIT-0413-T | DONE | Test coverage audit for StellaOps.Notify.Queue. |
|
||||
| AUDIT-0413-A | TODO | Pending approval for apply tasks. |
|
||||
| AUDIT-0413-M | DONE | Revalidated 2026-01-07; maintainability audit for StellaOps.Notify.Queue. |
|
||||
| AUDIT-0413-T | DONE | Revalidated 2026-01-07; test coverage audit for StellaOps.Notify.Queue. |
|
||||
| AUDIT-0413-A | TODO | Revalidated 2026-01-07 (open findings). |
|
||||
|
||||
@@ -9,6 +9,12 @@ namespace StellaOps.Notify.Storage.InMemory.Repositories;
|
||||
public sealed class NotifyChannelRepositoryAdapter : INotifyChannelRepository
|
||||
{
|
||||
private readonly ConcurrentDictionary<string, NotifyChannelDocument> _channels = new(StringComparer.OrdinalIgnoreCase);
|
||||
private readonly TimeProvider _timeProvider;
|
||||
|
||||
public NotifyChannelRepositoryAdapter(TimeProvider? timeProvider = null)
|
||||
{
|
||||
_timeProvider = timeProvider ?? TimeProvider.System;
|
||||
}
|
||||
|
||||
public Task<NotifyChannelDocument?> GetByIdAsync(string tenantId, string id, CancellationToken cancellationToken = default)
|
||||
{
|
||||
@@ -34,7 +40,7 @@ public sealed class NotifyChannelRepositoryAdapter : INotifyChannelRepository
|
||||
|
||||
public Task<NotifyChannelDocument> UpsertAsync(NotifyChannelDocument channel, CancellationToken cancellationToken = default)
|
||||
{
|
||||
channel.UpdatedAt = DateTimeOffset.UtcNow;
|
||||
channel.UpdatedAt = _timeProvider.GetUtcNow();
|
||||
var key = $"{channel.TenantId}:{channel.Id}";
|
||||
_channels[key] = channel;
|
||||
return Task.FromResult(channel);
|
||||
@@ -59,6 +65,12 @@ public sealed class NotifyChannelRepositoryAdapter : INotifyChannelRepository
|
||||
public sealed class NotifyRuleRepositoryAdapter : INotifyRuleRepository
|
||||
{
|
||||
private readonly ConcurrentDictionary<string, NotifyRuleDocument> _rules = new(StringComparer.OrdinalIgnoreCase);
|
||||
private readonly TimeProvider _timeProvider;
|
||||
|
||||
public NotifyRuleRepositoryAdapter(TimeProvider? timeProvider = null)
|
||||
{
|
||||
_timeProvider = timeProvider ?? TimeProvider.System;
|
||||
}
|
||||
|
||||
public Task<NotifyRuleDocument?> GetByIdAsync(string tenantId, string id, CancellationToken cancellationToken = default)
|
||||
{
|
||||
@@ -83,7 +95,7 @@ public sealed class NotifyRuleRepositoryAdapter : INotifyRuleRepository
|
||||
|
||||
public Task<NotifyRuleDocument> UpsertAsync(NotifyRuleDocument rule, CancellationToken cancellationToken = default)
|
||||
{
|
||||
rule.UpdatedAt = DateTimeOffset.UtcNow;
|
||||
rule.UpdatedAt = _timeProvider.GetUtcNow();
|
||||
var key = $"{rule.TenantId}:{rule.Id}";
|
||||
_rules[key] = rule;
|
||||
return Task.FromResult(rule);
|
||||
@@ -108,6 +120,12 @@ public sealed class NotifyRuleRepositoryAdapter : INotifyRuleRepository
|
||||
public sealed class NotifyTemplateRepositoryAdapter : INotifyTemplateRepository
|
||||
{
|
||||
private readonly ConcurrentDictionary<string, NotifyTemplateDocument> _templates = new(StringComparer.OrdinalIgnoreCase);
|
||||
private readonly TimeProvider _timeProvider;
|
||||
|
||||
public NotifyTemplateRepositoryAdapter(TimeProvider? timeProvider = null)
|
||||
{
|
||||
_timeProvider = timeProvider ?? TimeProvider.System;
|
||||
}
|
||||
|
||||
public Task<NotifyTemplateDocument?> GetByIdAsync(string tenantId, string id, CancellationToken cancellationToken = default)
|
||||
{
|
||||
@@ -130,7 +148,7 @@ public sealed class NotifyTemplateRepositoryAdapter : INotifyTemplateRepository
|
||||
|
||||
public Task<NotifyTemplateDocument> UpsertAsync(NotifyTemplateDocument template, CancellationToken cancellationToken = default)
|
||||
{
|
||||
template.UpdatedAt = DateTimeOffset.UtcNow;
|
||||
template.UpdatedAt = _timeProvider.GetUtcNow();
|
||||
var key = $"{template.TenantId}:{template.Id}";
|
||||
_templates[key] = template;
|
||||
return Task.FromResult(template);
|
||||
@@ -149,6 +167,12 @@ public sealed class NotifyTemplateRepositoryAdapter : INotifyTemplateRepository
|
||||
public sealed class NotifyDeliveryRepositoryAdapter : INotifyDeliveryRepository
|
||||
{
|
||||
private readonly ConcurrentDictionary<string, NotifyDeliveryDocument> _deliveries = new(StringComparer.OrdinalIgnoreCase);
|
||||
private readonly TimeProvider _timeProvider;
|
||||
|
||||
public NotifyDeliveryRepositoryAdapter(TimeProvider? timeProvider = null)
|
||||
{
|
||||
_timeProvider = timeProvider ?? TimeProvider.System;
|
||||
}
|
||||
|
||||
public Task<NotifyDeliveryDocument?> GetByIdAsync(string tenantId, string id, CancellationToken cancellationToken = default)
|
||||
{
|
||||
@@ -166,7 +190,7 @@ public sealed class NotifyDeliveryRepositoryAdapter : INotifyDeliveryRepository
|
||||
|
||||
public Task<NotifyDeliveryDocument> UpsertAsync(NotifyDeliveryDocument delivery, CancellationToken cancellationToken = default)
|
||||
{
|
||||
delivery.UpdatedAt = DateTimeOffset.UtcNow;
|
||||
delivery.UpdatedAt = _timeProvider.GetUtcNow();
|
||||
var key = $"{delivery.TenantId}:{delivery.Id}";
|
||||
_deliveries[key] = delivery;
|
||||
return Task.FromResult(delivery);
|
||||
@@ -179,7 +203,7 @@ public sealed class NotifyDeliveryRepositoryAdapter : INotifyDeliveryRepository
|
||||
{
|
||||
doc.Status = status;
|
||||
doc.Error = error;
|
||||
doc.UpdatedAt = DateTimeOffset.UtcNow;
|
||||
doc.UpdatedAt = _timeProvider.GetUtcNow();
|
||||
return Task.FromResult(true);
|
||||
}
|
||||
return Task.FromResult(false);
|
||||
@@ -199,6 +223,12 @@ public sealed class NotifyDeliveryRepositoryAdapter : INotifyDeliveryRepository
|
||||
public sealed class NotifyDigestRepositoryAdapter : INotifyDigestRepository
|
||||
{
|
||||
private readonly ConcurrentDictionary<string, NotifyDigestDocument> _digests = new(StringComparer.OrdinalIgnoreCase);
|
||||
private readonly TimeProvider _timeProvider;
|
||||
|
||||
public NotifyDigestRepositoryAdapter(TimeProvider? timeProvider = null)
|
||||
{
|
||||
_timeProvider = timeProvider ?? TimeProvider.System;
|
||||
}
|
||||
|
||||
public Task<NotifyDigestDocument?> GetByIdAsync(string tenantId, string id, CancellationToken cancellationToken = default)
|
||||
{
|
||||
@@ -209,7 +239,7 @@ public sealed class NotifyDigestRepositoryAdapter : INotifyDigestRepository
|
||||
|
||||
public Task<NotifyDigestDocument> UpsertAsync(NotifyDigestDocument digest, CancellationToken cancellationToken = default)
|
||||
{
|
||||
digest.UpdatedAt = DateTimeOffset.UtcNow;
|
||||
digest.UpdatedAt = _timeProvider.GetUtcNow();
|
||||
var key = $"{digest.TenantId}:{digest.Id}";
|
||||
_digests[key] = digest;
|
||||
return Task.FromResult(digest);
|
||||
@@ -257,10 +287,16 @@ public sealed class NotifyAuditRepositoryAdapter : INotifyAuditRepository
|
||||
public sealed class NotifyLockRepositoryAdapter : INotifyLockRepository
|
||||
{
|
||||
private readonly ConcurrentDictionary<string, (string Owner, DateTimeOffset ExpiresAt)> _locks = new(StringComparer.OrdinalIgnoreCase);
|
||||
private readonly TimeProvider _timeProvider;
|
||||
|
||||
public NotifyLockRepositoryAdapter(TimeProvider? timeProvider = null)
|
||||
{
|
||||
_timeProvider = timeProvider ?? TimeProvider.System;
|
||||
}
|
||||
|
||||
public Task<bool> TryAcquireAsync(string lockKey, string owner, TimeSpan ttl, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var now = DateTimeOffset.UtcNow;
|
||||
var now = _timeProvider.GetUtcNow();
|
||||
|
||||
// Clean up expired locks
|
||||
foreach (var key in _locks.Keys.ToList())
|
||||
@@ -288,7 +324,7 @@ public sealed class NotifyLockRepositoryAdapter : INotifyLockRepository
|
||||
{
|
||||
if (_locks.TryGetValue(lockKey, out var value) && value.Owner == owner)
|
||||
{
|
||||
var newExpiry = DateTimeOffset.UtcNow + ttl;
|
||||
var newExpiry = _timeProvider.GetUtcNow() + ttl;
|
||||
_locks[lockKey] = (owner, newExpiry);
|
||||
return Task.FromResult(true);
|
||||
}
|
||||
@@ -302,6 +338,12 @@ public sealed class NotifyLockRepositoryAdapter : INotifyLockRepository
|
||||
public sealed class NotifyEscalationPolicyRepositoryAdapter : INotifyEscalationPolicyRepository
|
||||
{
|
||||
private readonly ConcurrentDictionary<string, NotifyEscalationPolicyDocument> _policies = new(StringComparer.OrdinalIgnoreCase);
|
||||
private readonly TimeProvider _timeProvider;
|
||||
|
||||
public NotifyEscalationPolicyRepositoryAdapter(TimeProvider? timeProvider = null)
|
||||
{
|
||||
_timeProvider = timeProvider ?? TimeProvider.System;
|
||||
}
|
||||
|
||||
public Task<NotifyEscalationPolicyDocument?> GetByIdAsync(string tenantId, string id, CancellationToken cancellationToken = default)
|
||||
{
|
||||
@@ -318,7 +360,7 @@ public sealed class NotifyEscalationPolicyRepositoryAdapter : INotifyEscalationP
|
||||
|
||||
public Task<NotifyEscalationPolicyDocument> UpsertAsync(NotifyEscalationPolicyDocument policy, CancellationToken cancellationToken = default)
|
||||
{
|
||||
policy.UpdatedAt = DateTimeOffset.UtcNow;
|
||||
policy.UpdatedAt = _timeProvider.GetUtcNow();
|
||||
var key = $"{policy.TenantId}:{policy.Id}";
|
||||
_policies[key] = policy;
|
||||
return Task.FromResult(policy);
|
||||
@@ -331,6 +373,12 @@ public sealed class NotifyEscalationPolicyRepositoryAdapter : INotifyEscalationP
|
||||
public sealed class NotifyEscalationStateRepositoryAdapter : INotifyEscalationStateRepository
|
||||
{
|
||||
private readonly ConcurrentDictionary<string, NotifyEscalationStateDocument> _states = new(StringComparer.OrdinalIgnoreCase);
|
||||
private readonly TimeProvider _timeProvider;
|
||||
|
||||
public NotifyEscalationStateRepositoryAdapter(TimeProvider? timeProvider = null)
|
||||
{
|
||||
_timeProvider = timeProvider ?? TimeProvider.System;
|
||||
}
|
||||
|
||||
public Task<NotifyEscalationStateDocument?> GetByIdAsync(string tenantId, string id, CancellationToken cancellationToken = default)
|
||||
{
|
||||
@@ -341,7 +389,7 @@ public sealed class NotifyEscalationStateRepositoryAdapter : INotifyEscalationSt
|
||||
|
||||
public Task<NotifyEscalationStateDocument> UpsertAsync(NotifyEscalationStateDocument state, CancellationToken cancellationToken = default)
|
||||
{
|
||||
state.UpdatedAt = DateTimeOffset.UtcNow;
|
||||
state.UpdatedAt = _timeProvider.GetUtcNow();
|
||||
var key = $"{state.TenantId}:{state.Id}";
|
||||
_states[key] = state;
|
||||
return Task.FromResult(state);
|
||||
@@ -360,6 +408,12 @@ public sealed class NotifyEscalationStateRepositoryAdapter : INotifyEscalationSt
|
||||
public sealed class NotifyOnCallScheduleRepositoryAdapter : INotifyOnCallScheduleRepository
|
||||
{
|
||||
private readonly ConcurrentDictionary<string, NotifyOnCallScheduleDocument> _schedules = new(StringComparer.OrdinalIgnoreCase);
|
||||
private readonly TimeProvider _timeProvider;
|
||||
|
||||
public NotifyOnCallScheduleRepositoryAdapter(TimeProvider? timeProvider = null)
|
||||
{
|
||||
_timeProvider = timeProvider ?? TimeProvider.System;
|
||||
}
|
||||
|
||||
public Task<NotifyOnCallScheduleDocument?> GetByIdAsync(string tenantId, string id, CancellationToken cancellationToken = default)
|
||||
{
|
||||
@@ -376,7 +430,7 @@ public sealed class NotifyOnCallScheduleRepositoryAdapter : INotifyOnCallSchedul
|
||||
|
||||
public Task<NotifyOnCallScheduleDocument> UpsertAsync(NotifyOnCallScheduleDocument schedule, CancellationToken cancellationToken = default)
|
||||
{
|
||||
schedule.UpdatedAt = DateTimeOffset.UtcNow;
|
||||
schedule.UpdatedAt = _timeProvider.GetUtcNow();
|
||||
var key = $"{schedule.TenantId}:{schedule.Id}";
|
||||
_schedules[key] = schedule;
|
||||
return Task.FromResult(schedule);
|
||||
@@ -397,6 +451,12 @@ public sealed class NotifyOnCallScheduleRepositoryAdapter : INotifyOnCallSchedul
|
||||
public sealed class NotifyQuietHoursRepositoryAdapter : INotifyQuietHoursRepository
|
||||
{
|
||||
private readonly ConcurrentDictionary<string, NotifyQuietHoursDocument> _quietHours = new(StringComparer.OrdinalIgnoreCase);
|
||||
private readonly TimeProvider _timeProvider;
|
||||
|
||||
public NotifyQuietHoursRepositoryAdapter(TimeProvider? timeProvider = null)
|
||||
{
|
||||
_timeProvider = timeProvider ?? TimeProvider.System;
|
||||
}
|
||||
|
||||
public Task<NotifyQuietHoursDocument?> GetByIdAsync(string tenantId, string id, CancellationToken cancellationToken = default)
|
||||
{
|
||||
@@ -413,7 +473,7 @@ public sealed class NotifyQuietHoursRepositoryAdapter : INotifyQuietHoursReposit
|
||||
|
||||
public Task<NotifyQuietHoursDocument> UpsertAsync(NotifyQuietHoursDocument quietHours, CancellationToken cancellationToken = default)
|
||||
{
|
||||
quietHours.UpdatedAt = DateTimeOffset.UtcNow;
|
||||
quietHours.UpdatedAt = _timeProvider.GetUtcNow();
|
||||
var key = $"{quietHours.TenantId}:{quietHours.Id}";
|
||||
_quietHours[key] = quietHours;
|
||||
return Task.FromResult(quietHours);
|
||||
@@ -432,6 +492,12 @@ public sealed class NotifyQuietHoursRepositoryAdapter : INotifyQuietHoursReposit
|
||||
public sealed class NotifyMaintenanceWindowRepositoryAdapter : INotifyMaintenanceWindowRepository
|
||||
{
|
||||
private readonly ConcurrentDictionary<string, NotifyMaintenanceWindowDocument> _windows = new(StringComparer.OrdinalIgnoreCase);
|
||||
private readonly TimeProvider _timeProvider;
|
||||
|
||||
public NotifyMaintenanceWindowRepositoryAdapter(TimeProvider? timeProvider = null)
|
||||
{
|
||||
_timeProvider = timeProvider ?? TimeProvider.System;
|
||||
}
|
||||
|
||||
public Task<NotifyMaintenanceWindowDocument?> GetByIdAsync(string tenantId, string id, CancellationToken cancellationToken = default)
|
||||
{
|
||||
@@ -454,7 +520,7 @@ public sealed class NotifyMaintenanceWindowRepositoryAdapter : INotifyMaintenanc
|
||||
|
||||
public Task<NotifyMaintenanceWindowDocument> UpsertAsync(NotifyMaintenanceWindowDocument window, CancellationToken cancellationToken = default)
|
||||
{
|
||||
window.UpdatedAt = DateTimeOffset.UtcNow;
|
||||
window.UpdatedAt = _timeProvider.GetUtcNow();
|
||||
var key = $"{window.TenantId}:{window.Id}";
|
||||
_windows[key] = window;
|
||||
return Task.FromResult(window);
|
||||
@@ -473,6 +539,12 @@ public sealed class NotifyMaintenanceWindowRepositoryAdapter : INotifyMaintenanc
|
||||
public sealed class NotifyInboxRepositoryAdapter : INotifyInboxRepository
|
||||
{
|
||||
private readonly ConcurrentDictionary<string, NotifyInboxDocument> _inbox = new(StringComparer.OrdinalIgnoreCase);
|
||||
private readonly TimeProvider _timeProvider;
|
||||
|
||||
public NotifyInboxRepositoryAdapter(TimeProvider? timeProvider = null)
|
||||
{
|
||||
_timeProvider = timeProvider ?? TimeProvider.System;
|
||||
}
|
||||
|
||||
public Task<NotifyInboxDocument?> GetByIdAsync(string tenantId, string id, CancellationToken cancellationToken = default)
|
||||
{
|
||||
@@ -502,7 +574,7 @@ public sealed class NotifyInboxRepositoryAdapter : INotifyInboxRepository
|
||||
if (_inbox.TryGetValue(key, out var doc))
|
||||
{
|
||||
doc.Read = true;
|
||||
doc.ReadAt = DateTimeOffset.UtcNow;
|
||||
doc.ReadAt = _timeProvider.GetUtcNow();
|
||||
return Task.FromResult(true);
|
||||
}
|
||||
return Task.FromResult(false);
|
||||
|
||||
@@ -5,6 +5,6 @@ Source of truth: `docs/implplan/SPRINT_20251229_049_BE_csproj_audit_maint_tests.
|
||||
|
||||
| Task ID | Status | Notes |
|
||||
| --- | --- | --- |
|
||||
| AUDIT-0415-M | DONE | Maintainability audit for StellaOps.Notify.Storage.InMemory. |
|
||||
| AUDIT-0415-T | DONE | Test coverage audit for StellaOps.Notify.Storage.InMemory. |
|
||||
| AUDIT-0415-A | TODO | Pending approval for apply tasks. |
|
||||
| AUDIT-0415-M | DONE | Revalidated 2026-01-07; maintainability audit for StellaOps.Notify.Storage.InMemory. |
|
||||
| AUDIT-0415-T | DONE | Revalidated 2026-01-07; test coverage audit for StellaOps.Notify.Storage.InMemory. |
|
||||
| AUDIT-0415-A | TODO | Revalidated 2026-01-07 (open findings). |
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FluentAssertions" />
|
||||
<PackageReference Include="NSubstitute" />
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Fixtures/email/*.json">
|
||||
|
||||
@@ -5,6 +5,6 @@ Source of truth: `docs/implplan/SPRINT_20251229_049_BE_csproj_audit_maint_tests.
|
||||
|
||||
| Task ID | Status | Notes |
|
||||
| --- | --- | --- |
|
||||
| AUDIT-0398-M | DONE | Maintainability audit for StellaOps.Notify.Connectors.Email.Tests. |
|
||||
| AUDIT-0398-T | DONE | Test coverage audit for StellaOps.Notify.Connectors.Email.Tests. |
|
||||
| AUDIT-0398-A | DONE | Waived (test project). |
|
||||
| AUDIT-0398-M | DONE | Revalidated 2026-01-07; maintainability audit for StellaOps.Notify.Connectors.Email.Tests. |
|
||||
| AUDIT-0398-T | DONE | Revalidated 2026-01-07; test coverage audit for StellaOps.Notify.Connectors.Email.Tests. |
|
||||
| AUDIT-0398-A | DONE | Waived (test project; revalidated 2026-01-07). |
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FluentAssertions" />
|
||||
<PackageReference Include="NSubstitute" />
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
|
||||
@@ -5,6 +5,6 @@ Source of truth: `docs/implplan/SPRINT_20251229_049_BE_csproj_audit_maint_tests.
|
||||
|
||||
| Task ID | Status | Notes |
|
||||
| --- | --- | --- |
|
||||
| AUDIT-0401-M | DONE | Maintainability audit for StellaOps.Notify.Connectors.Slack.Tests. |
|
||||
| AUDIT-0401-T | DONE | Test coverage audit for StellaOps.Notify.Connectors.Slack.Tests. |
|
||||
| AUDIT-0401-A | DONE | Waived (test project). |
|
||||
| AUDIT-0401-M | DONE | Revalidated 2026-01-07; maintainability audit for StellaOps.Notify.Connectors.Slack.Tests. |
|
||||
| AUDIT-0401-T | DONE | Revalidated 2026-01-07; test coverage audit for StellaOps.Notify.Connectors.Slack.Tests. |
|
||||
| AUDIT-0401-A | DONE | Waived (test project; revalidated 2026-01-07). |
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FluentAssertions" />
|
||||
<PackageReference Include="NSubstitute" />
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
|
||||
@@ -5,6 +5,6 @@ Source of truth: `docs/implplan/SPRINT_20251229_049_BE_csproj_audit_maint_tests.
|
||||
|
||||
| Task ID | Status | Notes |
|
||||
| --- | --- | --- |
|
||||
| AUDIT-0403-M | DONE | Maintainability audit for StellaOps.Notify.Connectors.Teams.Tests. |
|
||||
| AUDIT-0403-T | DONE | Test coverage audit for StellaOps.Notify.Connectors.Teams.Tests. |
|
||||
| AUDIT-0403-A | DONE | Waived (test project). |
|
||||
| AUDIT-0403-M | DONE | Revalidated 2026-01-07; maintainability audit for StellaOps.Notify.Connectors.Teams.Tests. |
|
||||
| AUDIT-0403-T | DONE | Revalidated 2026-01-07; test coverage audit for StellaOps.Notify.Connectors.Teams.Tests. |
|
||||
| AUDIT-0403-A | DONE | Waived (test project; revalidated 2026-01-07). |
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FluentAssertions" />
|
||||
<PackageReference Include="NSubstitute" />
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -5,6 +5,6 @@ Source of truth: `docs/implplan/SPRINT_20251229_049_BE_csproj_audit_maint_tests.
|
||||
|
||||
| Task ID | Status | Notes |
|
||||
| --- | --- | --- |
|
||||
| AUDIT-0405-M | DONE | Maintainability audit for StellaOps.Notify.Connectors.Webhook.Tests. |
|
||||
| AUDIT-0405-T | DONE | Test coverage audit for StellaOps.Notify.Connectors.Webhook.Tests. |
|
||||
| AUDIT-0405-A | DONE | Waived (test project). |
|
||||
| AUDIT-0405-M | DONE | Revalidated 2026-01-07; maintainability audit for StellaOps.Notify.Connectors.Webhook.Tests. |
|
||||
| AUDIT-0405-T | DONE | Revalidated 2026-01-07; test coverage audit for StellaOps.Notify.Connectors.Webhook.Tests. |
|
||||
| AUDIT-0405-A | DONE | Waived (test project; revalidated 2026-01-07). |
|
||||
|
||||
@@ -17,6 +17,5 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FluentAssertions" />
|
||||
<PackageReference Include="NSubstitute" />
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -5,6 +5,6 @@ Source of truth: `docs/implplan/SPRINT_20251229_049_BE_csproj_audit_maint_tests.
|
||||
|
||||
| Task ID | Status | Notes |
|
||||
| --- | --- | --- |
|
||||
| AUDIT-0406-M | DONE | Maintainability audit for StellaOps.Notify.Core.Tests. |
|
||||
| AUDIT-0406-T | DONE | Test coverage audit for StellaOps.Notify.Core.Tests. |
|
||||
| AUDIT-0406-A | DONE | Waived (test project). |
|
||||
| AUDIT-0406-M | DONE | Revalidated 2026-01-07; maintainability audit for StellaOps.Notify.Core.Tests. |
|
||||
| AUDIT-0406-T | DONE | Revalidated 2026-01-07; test coverage audit for StellaOps.Notify.Core.Tests. |
|
||||
| AUDIT-0406-A | DONE | Waived (test project; revalidated 2026-01-07). |
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FluentAssertions" />
|
||||
<PackageReference Include="NSubstitute" />
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
|
||||
@@ -5,6 +5,6 @@ Source of truth: `docs/implplan/SPRINT_20251229_049_BE_csproj_audit_maint_tests.
|
||||
|
||||
| Task ID | Status | Notes |
|
||||
| --- | --- | --- |
|
||||
| AUDIT-0408-M | DONE | Maintainability audit for StellaOps.Notify.Engine.Tests. |
|
||||
| AUDIT-0408-T | DONE | Test coverage audit for StellaOps.Notify.Engine.Tests. |
|
||||
| AUDIT-0408-A | DONE | Waived (test project). |
|
||||
| AUDIT-0408-M | DONE | Revalidated 2026-01-07; maintainability audit for StellaOps.Notify.Engine.Tests. |
|
||||
| AUDIT-0408-T | DONE | Revalidated 2026-01-07; test coverage audit for StellaOps.Notify.Engine.Tests. |
|
||||
| AUDIT-0408-A | DONE | Waived (test project; revalidated 2026-01-07). |
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
<PackageReference Include="FluentAssertions" />
|
||||
<PackageReference Include="NJsonSchema" />
|
||||
<PackageReference Include="NSubstitute" />
|
||||
<PackageReference Include="xunit.v3" />
|
||||
<None Include="../../../../docs/events/samples/*.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
|
||||
@@ -5,6 +5,6 @@ Source of truth: `docs/implplan/SPRINT_20251229_049_BE_csproj_audit_maint_tests.
|
||||
|
||||
| Task ID | Status | Notes |
|
||||
| --- | --- | --- |
|
||||
| AUDIT-0410-M | DONE | Maintainability audit for StellaOps.Notify.Models.Tests. |
|
||||
| AUDIT-0410-T | DONE | Test coverage audit for StellaOps.Notify.Models.Tests. |
|
||||
| AUDIT-0410-A | DONE | Waived (test project). |
|
||||
| AUDIT-0410-M | DONE | Revalidated 2026-01-07; maintainability audit for StellaOps.Notify.Models.Tests. |
|
||||
| AUDIT-0410-T | DONE | Revalidated 2026-01-07; test coverage audit for StellaOps.Notify.Models.Tests. |
|
||||
| AUDIT-0410-A | DONE | Waived (test project; revalidated 2026-01-07). |
|
||||
|
||||
@@ -18,7 +18,6 @@
|
||||
<PackageReference Include="FluentAssertions" />
|
||||
<PackageReference Include="Moq" />
|
||||
<PackageReference Include="Testcontainers.PostgreSql" />
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -5,6 +5,6 @@ Source of truth: `docs/implplan/SPRINT_20251229_049_BE_csproj_audit_maint_tests.
|
||||
|
||||
| Task ID | Status | Notes |
|
||||
| --- | --- | --- |
|
||||
| AUDIT-0412-M | DONE | Maintainability audit for StellaOps.Notify.Persistence.Tests. |
|
||||
| AUDIT-0412-T | DONE | Test coverage audit for StellaOps.Notify.Persistence.Tests. |
|
||||
| AUDIT-0412-A | DONE | Waived (test project). |
|
||||
| AUDIT-0412-M | DONE | Revalidated 2026-01-07; maintainability audit for StellaOps.Notify.Persistence.Tests. |
|
||||
| AUDIT-0412-T | DONE | Revalidated 2026-01-07; test coverage audit for StellaOps.Notify.Persistence.Tests. |
|
||||
| AUDIT-0412-A | DONE | Waived (test project; revalidated 2026-01-07). |
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
<PackageReference Include="NSubstitute" />
|
||||
<PackageReference Include="Testcontainers" />
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -5,6 +5,6 @@ Source of truth: `docs/implplan/SPRINT_20251229_049_BE_csproj_audit_maint_tests.
|
||||
|
||||
| Task ID | Status | Notes |
|
||||
| --- | --- | --- |
|
||||
| AUDIT-0414-M | DONE | Maintainability audit for StellaOps.Notify.Queue.Tests. |
|
||||
| AUDIT-0414-T | DONE | Test coverage audit for StellaOps.Notify.Queue.Tests. |
|
||||
| AUDIT-0414-A | DONE | Waived (test project). |
|
||||
| AUDIT-0414-M | DONE | Revalidated 2026-01-07; maintainability audit for StellaOps.Notify.Queue.Tests. |
|
||||
| AUDIT-0414-T | DONE | Revalidated 2026-01-07; test coverage audit for StellaOps.Notify.Queue.Tests. |
|
||||
| AUDIT-0414-A | DONE | Waived (test project; revalidated 2026-01-07). |
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="FluentAssertions" />
|
||||
<PackageReference Include="NSubstitute" />
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -5,6 +5,6 @@ Source of truth: `docs/implplan/SPRINT_20251229_049_BE_csproj_audit_maint_tests.
|
||||
|
||||
| Task ID | Status | Notes |
|
||||
| --- | --- | --- |
|
||||
| AUDIT-0417-M | DONE | Maintainability audit for StellaOps.Notify.WebService.Tests. |
|
||||
| AUDIT-0417-T | DONE | Test coverage audit for StellaOps.Notify.WebService.Tests. |
|
||||
| AUDIT-0417-A | DONE | Waived (test project). |
|
||||
| AUDIT-0417-M | DONE | Revalidated 2026-01-07; maintainability audit for StellaOps.Notify.WebService.Tests. |
|
||||
| AUDIT-0417-T | DONE | Revalidated 2026-01-07; test coverage audit for StellaOps.Notify.WebService.Tests. |
|
||||
| AUDIT-0417-A | DONE | Waived (test project; revalidated 2026-01-07). |
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
<PackageReference Include="FluentAssertions" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" />
|
||||
<PackageReference Include="NSubstitute" />
|
||||
<PackageReference Include="xunit.v3" />
|
||||
</ItemGroup> <ItemGroup>
|
||||
<Using Include="Xunit" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -5,6 +5,6 @@ Source of truth: `docs/implplan/SPRINT_20251229_049_BE_csproj_audit_maint_tests.
|
||||
|
||||
| Task ID | Status | Notes |
|
||||
| --- | --- | --- |
|
||||
| AUDIT-0419-M | DONE | Maintainability audit for StellaOps.Notify.Worker.Tests. |
|
||||
| AUDIT-0419-T | DONE | Test coverage audit for StellaOps.Notify.Worker.Tests. |
|
||||
| AUDIT-0419-A | DONE | Waived (test project). |
|
||||
| AUDIT-0419-M | DONE | Revalidated 2026-01-07; maintainability audit for StellaOps.Notify.Worker.Tests. |
|
||||
| AUDIT-0419-T | DONE | Revalidated 2026-01-07; test coverage audit for StellaOps.Notify.Worker.Tests. |
|
||||
| AUDIT-0419-A | DONE | Waived (test project; revalidated 2026-01-07). |
|
||||
|
||||
Reference in New Issue
Block a user