< Summary

Information
Class: MyNet.UI.Dialogs.MessageBox.MessageBoxViewModel
Assembly: MyNet.UI
File(s): https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.UI/Dialogs/MessageBox/MessageBoxViewModel.cs
Tag: 323_28699572109
Line coverage
61%
Covered lines: 13
Uncovered lines: 8
Coverable lines: 21
Total lines: 88
Line coverage: 61.9%
Branch coverage
0%
Covered branches: 0
Total branches: 13
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
ApplyResult(...)100%11100%
Complete(...)100%11100%
Supports(...)0%182130%

File(s)

https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.UI/Dialogs/MessageBox/MessageBoxViewModel.cs

#LineLine coverage
 1// -----------------------------------------------------------------------
 2// <copyright file="MessageBoxViewModel.cs" company="Stéphane ANDRE">
 3// Copyright (c) Stéphane ANDRE. All rights reserved.
 4// </copyright>
 5// -----------------------------------------------------------------------
 6
 7using System;
 8using System.Windows.Input;
 9using MyNet.UI.Commands;
 10using MyNet.UI.ViewModels.Dialog;
 11
 12namespace MyNet.UI.Dialogs.MessageBox;
 13
 14/// <summary>
 15/// View model for a message box dialog. Button commands set a <see cref="MessageBoxResult"/> and request close.
 16/// </summary>
 17public sealed class MessageBoxViewModel : DialogViewModel<MessageBoxResult>, IMessageBox
 18{
 19    /// <summary>
 20    /// Initializes a new instance of the <see cref="MessageBoxViewModel"/> class.
 21    /// </summary>
 22    /// <param name="options">Message box configuration.</param>
 23    /// <param name="commandFactory">Optional command factory.</param>
 24    public MessageBoxViewModel(MessageBoxOptions options, ICommandFactory? commandFactory = null)
 925        : base(commandFactory)
 26    {
 927        ArgumentNullException.ThrowIfNull(options);
 28
 929        Message = options.Message;
 930        Title = options.Title;
 931        Severity = options.Severity;
 932        Buttons = options.Buttons;
 933        DefaultResult = options.DefaultResult;
 34
 935        var commands = commandFactory.GetOrDefault();
 36        OkCommand = commands.Create(() => Complete(MessageBoxResult.Ok), () => Supports(MessageBoxResult.Ok));
 37        CancelCommand = commands.Create(() => Complete(MessageBoxResult.Cancel), () => Supports(MessageBoxResult.Cancel)
 38        YesCommand = commands.Create(() => Complete(MessageBoxResult.Yes), () => Supports(MessageBoxResult.Yes));
 39        NoCommand = commands.Create(() => Complete(MessageBoxResult.No), () => Supports(MessageBoxResult.No));
 940    }
 41
 42    /// <inheritdoc />
 43    public string Message { get; }
 44
 45    /// <inheritdoc />
 46    public MessageSeverity Severity { get; }
 47
 48    /// <inheritdoc />
 49    public MessageBoxResultOption Buttons { get; }
 50
 51    /// <inheritdoc />
 52    public MessageBoxResult DefaultResult { get; }
 53
 54    /// <summary>Gets the command bound to the OK button when visible.</summary>
 55    public ICommand OkCommand { get; }
 56
 57    /// <summary>Gets the command bound to the Cancel button when visible.</summary>
 58    public ICommand CancelCommand { get; }
 59
 60    /// <summary>Gets the command bound to the Yes button when visible.</summary>
 61    public ICommand YesCommand { get; }
 62
 63    /// <summary>Gets the command bound to the No button when visible.</summary>
 64    public ICommand NoCommand { get; }
 65
 66    /// <summary>
 67    /// Applies a result without user interaction (headless presenter / tests).
 68    /// </summary>
 69    /// <param name="result">The result to apply.</param>
 970    public void ApplyResult(MessageBoxResult result) => Complete(result);
 71
 72    private void Complete(MessageBoxResult result)
 73    {
 974        SetResult(result);
 975        RequestClose();
 976    }
 77
 78    private bool Supports(MessageBoxResult result)
 079        => result switch
 080        {
 081            MessageBoxResult.Ok => Buttons is MessageBoxResultOption.Ok or MessageBoxResultOption.OkCancel,
 082            MessageBoxResult.Cancel => Buttons is MessageBoxResultOption.OkCancel or MessageBoxResultOption.YesNoCancel,
 083            MessageBoxResult.Yes => Buttons is MessageBoxResultOption.YesNo or MessageBoxResultOption.YesNoCancel,
 084            MessageBoxResult.No => Buttons is MessageBoxResultOption.YesNo or MessageBoxResultOption.YesNoCancel,
 085            _ => false
 086        };
 87}
 88