< Summary

Information
Class: TeleFlow.Telegram.Internal.TelegramAllowedUpdatesResolver
Assembly: TeleFlow.Framework.LongPolling
File(s): /_/src/TeleFlow.Framework.LongPolling/Internal/TelegramAllowedUpdatesResolver.cs
Line coverage
95%
Covered lines: 23
Uncovered lines: 1
Coverable lines: 24
Total lines: 67
Line coverage: 95.8%
Branch coverage
88%
Covered branches: 16
Total branches: 18
Branch coverage: 88.8%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
Resolve(...)75%4490%
ResolveAuto(...)92.85%1414100%

File(s)

/_/src/TeleFlow.Framework.LongPolling/Internal/TelegramAllowedUpdatesResolver.cs

#LineLine coverage
 1using Microsoft.Extensions.Logging;
 2using TeleFlow.Telegram.Internal.Handlers;
 3
 4namespace TeleFlow.Telegram.Internal;
 5
 6internal static partial class TelegramAllowedUpdatesResolver
 7{
 8    public static IReadOnlyList<string>? Resolve(
 9        TelegramAllowedUpdates allowedUpdates,
 10        IReadOnlyList<TelegramHandlerDescriptor> handlerDescriptors,
 11        ILogger logger)
 12    {
 1613        ArgumentNullException.ThrowIfNull(allowedUpdates);
 1614        ArgumentNullException.ThrowIfNull(handlerDescriptors);
 1615        ArgumentNullException.ThrowIfNull(logger);
 16
 1617        return allowedUpdates.Mode switch
 1618        {
 1419            TelegramAllowedUpdatesMode.Auto => ResolveAuto(handlerDescriptors, logger),
 2720            TelegramAllowedUpdatesMode.All => TelegramUpdateType.AllKnown.Select(static item => item.Value).ToArray(),
 321            TelegramAllowedUpdatesMode.Only => allowedUpdates.UpdateTypes.Select(static item => item.Value).ToArray(),
 022            _ => throw new InvalidOperationException("Unsupported Telegram allowed updates mode.")
 1623        };
 24    }
 25
 26    private static List<string>? ResolveAuto(
 27        IReadOnlyList<TelegramHandlerDescriptor> handlerDescriptors,
 28        ILogger logger)
 29    {
 1430        if (handlerDescriptors.Count == 0)
 31        {
 1032            LogAutoInferenceSkipped(logger);
 1033            return null;
 34        }
 35
 436        var values = new List<string>(capacity: 4);
 37
 438        if (handlerDescriptors.Any(static descriptor =>
 939                descriptor.Kind is TelegramHandlerKind.Command or TelegramHandlerKind.Message))
 40        {
 241            values.Add(TelegramUpdateType.Message.Value);
 42        }
 43
 1044        if (handlerDescriptors.Any(static descriptor => descriptor.Kind == TelegramHandlerKind.Callback))
 45        {
 146            values.Add(TelegramUpdateType.CallbackQuery.Value);
 47        }
 48
 1049        if (handlerDescriptors.Any(static descriptor => descriptor.Route.RouteKind == TelegramRouteKind.MyChatMemberUpda
 50        {
 151            values.Add(TelegramUpdateType.MyChatMember.Value);
 52        }
 53
 954        if (handlerDescriptors.Any(static descriptor => descriptor.Route.RouteKind == TelegramRouteKind.ChatMemberUpdate
 55        {
 156            values.Add(TelegramUpdateType.ChatMember.Value);
 57        }
 58
 459        return values.Count == 0 ? null : values;
 60    }
 61
 62    [LoggerMessage(
 63        EventId = 1,
 64        Level = LogLevel.Information,
 65        Message = "Telegram allowed_updates auto inference has no handler metadata. getUpdates will leave allowed_update
 66    private static partial void LogAutoInferenceSkipped(ILogger logger);
 67}