< Summary - AsyncResponse (Release / net8.0+net10.0 / unit+integration)

Information
Class: AsyncResponse.Transports.SQS.SqsQueueAddress
Assembly: AsyncResponse.Transports.SQS
File(s): /_/src/Transports/AsyncResponse.Transports.SQS/SqsQueueAddress.cs
Line coverage
100%
Covered lines: 11
Uncovered lines: 0
Coverable lines: 11
Total lines: 39
Line coverage: 100%
Branch coverage
87%
Covered branches: 7
Total branches: 8
Branch coverage: 87.5%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
IsUrl(...)100%22100%
IsFifo(...)100%11100%
QueueName(...)75%44100%
DeriveDeadLetterQueueName(...)100%22100%

File(s)

/_/src/Transports/AsyncResponse.Transports.SQS/SqsQueueAddress.cs

#LineLine coverage
 1namespace AsyncResponse.Transports.SQS;
 2
 3/// <summary>
 4/// Interprets the queue strings accepted by <see cref="SqsAsyncResponseOptions"/>: either a plain
 5/// queue name (resolved through <c>GetQueueUrl</c>) or a full queue URL.
 6/// </summary>
 7internal static class SqsQueueAddress
 8{
 9    /// <summary>Returns <c>true</c> when the configured queue string is a full queue URL.</summary>
 10    public static bool IsUrl(string queue)
 621511        => queue.StartsWith("http://", StringComparison.OrdinalIgnoreCase)
 621512            || queue.StartsWith("https://", StringComparison.OrdinalIgnoreCase);
 13
 14    /// <summary>Returns <c>true</c> when the queue (name or URL) addresses an SQS FIFO queue.</summary>
 15    public static bool IsFifo(string queue)
 354816        => QueueName(queue).EndsWith(".fifo", StringComparison.OrdinalIgnoreCase);
 17
 18    /// <summary>Extracts the queue name from a queue string (the last URL segment, or the string itself).</summary>
 19    public static string QueueName(string queue)
 20    {
 358021        var trimmed = queue.TrimEnd('/');
 358022        if (!IsUrl(trimmed))
 354023            return trimmed;
 24
 4025        var lastSegment = trimmed.LastIndexOf('/');
 4026        return lastSegment >= 0 ? trimmed[(lastSegment + 1)..] : trimmed;
 27    }
 28
 29    /// <summary>
 30    /// Derives the dead-letter queue name provisioning creates for <paramref name="queueName"/>:
 31    /// the suffix is appended, and for FIFO queues re-inserted before the mandatory
 32    /// <c>.fifo</c> tail (a FIFO queue's dead-letter queue must itself be FIFO). The validator
 33    /// uses the SAME derivation to reject collisions with a live queue, so the two must not drift.
 34    /// </summary>
 35    public static string DeriveDeadLetterQueueName(string queueName, string suffix)
 202036        => IsFifo(queueName)
 202037            ? $"{queueName[..^".fifo".Length]}{suffix}.fifo"
 202038            : $"{queueName}{suffix}";
 39}