< Summary

Information
Class: MyNet.UI.Toasting.Settings.ToastSettingsMerger
Assembly: MyNet.UI
File(s): https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.UI/Toasting/Settings/ToastSettingsMerger.cs
Tag: 323_28699572109
Line coverage
100%
Covered lines: 27
Uncovered lines: 0
Coverable lines: 27
Total lines: 66
Line coverage: 100%
Branch coverage
95%
Covered branches: 19
Total branches: 20
Branch coverage: 95%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
Merge(...)83.33%66100%
ApplyOverrides(...)100%66100%
ApplyNotificationTypeDefaults(...)100%88100%

File(s)

https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.UI/Toasting/Settings/ToastSettingsMerger.cs

#LineLine coverage
 1// -----------------------------------------------------------------------
 2// <copyright file="ToastSettingsMerger.cs" company="Stéphane ANDRE">
 3// Copyright (c) Stéphane ANDRE. All rights reserved.
 4// </copyright>
 5// -----------------------------------------------------------------------
 6
 7using MyNet.UI.Notifications.Models;
 8
 9namespace MyNet.UI.Toasting.Settings;
 10
 11/// <summary>
 12/// Merges global toast defaults, optional notification overrides, and notification-type rules.
 13/// </summary>
 14public static class ToastSettingsMerger
 15{
 16    /// <summary>
 17    /// Builds effective toast settings for the given notification.
 18    /// </summary>
 19    /// <param name="notification">The notification being displayed as a toast.</param>
 20    /// <param name="options">Global toast manager defaults.</param>
 21    /// <returns>Resolved toast settings for the toast instance.</returns>
 22    public static ToastSettings Merge(INotification notification, ToastManagerOptions? options = null)
 23    {
 3324        options ??= new();
 25
 3326        var settings = new ToastSettings
 3327        {
 3328            ClosingStrategy = options.DefaultClosingStrategy,
 3329            FreezeOnMouseEnter = options.DefaultFreezeOnMouseEnter,
 3330            Duration = null
 3331        };
 32
 3333        if (notification is IHasToastSettings { ToastSettings: { } overrides })
 934            ApplyOverrides(settings, overrides);
 35
 3336        ApplyNotificationTypeDefaults(settings, notification);
 37
 3338        return settings;
 39    }
 40
 41    private static void ApplyOverrides(ToastSettings settings, ToastSettingsOverrides overrides)
 42    {
 943        if (overrides.ClosingStrategy is { } closingStrategy)
 344            settings.ClosingStrategy = closingStrategy;
 45
 946        if (overrides.FreezeOnMouseEnter is { } freezeOnMouseEnter)
 347            settings.FreezeOnMouseEnter = freezeOnMouseEnter;
 48
 949        if (overrides.Duration is { } duration)
 650            settings.Duration = duration;
 951    }
 52
 53    private static void ApplyNotificationTypeDefaults(ToastSettings settings, INotification notification)
 54    {
 3355        if (notification is not IClosableNotification { IsClosable: true })
 1556            return;
 57
 1858        settings.ClosingStrategy = settings.ClosingStrategy switch
 1859        {
 1260            ToastClosingStrategy.AutoClose => ToastClosingStrategy.Both,
 361            ToastClosingStrategy.None => ToastClosingStrategy.CloseButton,
 362            _ => settings.ClosingStrategy
 1863        };
 1864    }
 65}
 66