< Summary

Information
Class: TeleFlow.Telegram.Internal.TelegramRequestSender
Assembly: TeleFlow.Telegram.Client
File(s): /_/src/TeleFlow.Telegram.Client/Internal/TelegramRequestSender.cs
Line coverage
69%
Covered lines: 23
Uncovered lines: 10
Coverable lines: 33
Total lines: 76
Line coverage: 69.6%
Branch coverage
100%
Covered branches: 2
Total branches: 2
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
CreateRequest(...)100%11100%
SendAsync()100%1141.17%
BuildMethodUri(...)100%22100%

File(s)

/_/src/TeleFlow.Telegram.Client/Internal/TelegramRequestSender.cs

#LineLine coverage
 1namespace TeleFlow.Telegram.Internal;
 2
 3internal sealed class TelegramRequestSender
 4{
 5    private readonly ITelegramTransport _transport;
 6    private readonly TelegramClientOptions _options;
 7    private readonly TelegramRequestContentBuilder _contentBuilder;
 8
 9    public TelegramRequestSender(
 10        ITelegramTransport transport,
 11        TelegramClientOptions options,
 12        TelegramRequestContentBuilder contentBuilder)
 13    {
 30214        ArgumentNullException.ThrowIfNull(transport);
 30215        ArgumentNullException.ThrowIfNull(options);
 30216        ArgumentNullException.ThrowIfNull(contentBuilder);
 17
 30218        _transport = transport;
 30219        _options = options;
 30220        _contentBuilder = contentBuilder;
 30221    }
 22
 23    public TelegramTransportRequest CreateRequest<TResponse>(
 24        ITelegramExecutableRequest<TResponse> request)
 25        where TResponse : ITelegramResponse
 26    {
 9227        return new TelegramTransportRequest(
 9228            request.MethodName,
 9229            BuildMethodUri(request.MethodName),
 9230            _contentBuilder.Build(request.Payload));
 31    }
 32
 33    public async Task<TelegramTransportResponse> SendAsync(
 34        TelegramTransportRequest request,
 35        CancellationToken cancellationToken)
 36    {
 9137        ArgumentNullException.ThrowIfNull(request);
 38
 39        try
 40        {
 9141            return await _transport.SendAsync(request, cancellationToken).ConfigureAwait(false);
 42        }
 143        catch (OperationCanceledException) when (cancellationToken.IsCancellationRequested)
 44        {
 145            throw;
 46        }
 347        catch (TelegramRequestException)
 48        {
 349            throw;
 50        }
 051        catch (OperationCanceledException exception)
 52        {
 053            throw new TelegramNetworkException(
 054                $"Telegram request '{request.MethodName}' failed because the HTTP transport timed out or was interrupted
 055                exception,
 056                request.MethodName);
 57        }
 058        catch (Exception exception)
 59        {
 060            throw new TelegramNetworkException(
 061                $"Telegram request '{request.MethodName}' failed because the Telegram transport failed.",
 062                exception,
 063                request.MethodName);
 64        }
 8765    }
 66
 67    private Uri BuildMethodUri(string methodName)
 68    {
 9269        var baseUrl = _options.BaseUrl.TrimEnd('/');
 9270        var environmentPath = _options.Environment == TelegramBotApiEnvironment.Test
 9271            ? "/test"
 9272            : string.Empty;
 73
 9274        return new Uri($"{baseUrl}/bot{_options.Token}{environmentPath}/{methodName}", UriKind.Absolute);
 75    }
 76}