< 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    {
 30714        ArgumentNullException.ThrowIfNull(transport);
 30715        ArgumentNullException.ThrowIfNull(options);
 30716        ArgumentNullException.ThrowIfNull(contentBuilder);
 17
 30718        _transport = transport;
 30719        _options = options;
 30720        _contentBuilder = contentBuilder;
 30721    }
 22
 23    public TelegramTransportRequest CreateRequest<TResponse>(
 24        ITelegramExecutableRequest<TResponse> request)
 25        where TResponse : ITelegramResponse
 26    {
 9827        return new TelegramTransportRequest(
 9828            request.MethodName,
 9829            BuildMethodUri(request.MethodName),
 9830            _contentBuilder.Build(request.Payload));
 31    }
 32
 33    public async Task<TelegramTransportResponse> SendAsync(
 34        TelegramTransportRequest request,
 35        CancellationToken cancellationToken)
 36    {
 9737        ArgumentNullException.ThrowIfNull(request);
 38
 39        try
 40        {
 9741            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        }
 9365    }
 66
 67    private Uri BuildMethodUri(string methodName)
 68    {
 9869        var baseUrl = _options.BaseUrl.TrimEnd('/');
 9870        var environmentPath = _options.Environment == TelegramBotApiEnvironment.Test
 9871            ? "/test"
 9872            : string.Empty;
 73
 9874        return new Uri($"{baseUrl}/bot{_options.Token}{environmentPath}/{methodName}", UriKind.Absolute);
 75    }
 76}