public void FormatTreatmentsCommand_WithNullFormatter_ShouldThrowArgumentNullExceptionWithCorrectParamName()
        {
            // Arrange + Act + Assert
            var exception = Assert.Throws <ArgumentNullException>(() =>
            {
                var command = new FormatTreatmentsCommand(null);
            });

            Assert.AreEqual(ParameterNames.Formatter, exception.ParamName, "ParamName is not correct.");
        }
        public void FormatTreatmentsCommand_RunWithNullDocumentAndNullProgramSettings_ShouldThrowArgumentNullException()
        {
            // Arrange
            var formatterMock = new Mock <ITreatmentFormatter>();
            var command       = new FormatTreatmentsCommand(formatterMock.Object);

            // Act + Assert
            var exception = Assert.ThrowsAsync <ArgumentNullException>(() =>
            {
                return(command.Run(null, null));
            });

            formatterMock.Verify(p => p.Format(It.IsAny <IDocument>()), Times.Never);
        }
        public async Task FormatTreatmentsCommand_RunWithValidDocumentAndValidProgramSettings_ShouldCallParserWithCorrectParameter()
        {
            // Arrange
            var formatterMock = new Mock <ITreatmentFormatter>();
            var command       = new FormatTreatmentsCommand(formatterMock.Object);
            var settingsMock  = new Mock <ICommandSettings>();
            var documentMock  = new Mock <IDocument>();

            // Act
            var result = await command.Run(documentMock.Object, settingsMock.Object);

            // Assert
            formatterMock.Verify(p => p.Format(It.IsAny <IDocument>()), Times.Once);
            formatterMock.Verify(p => p.Format(documentMock.Object), Times.Once);
        }
        public void FormatTreatmentsCommand_RunWithValidDocumentAndNullProgramSettings_ShouldThrowArgumentNullExceptionWithCorrectParamName()
        {
            // Arrange
            var formatterMock = new Mock <ITreatmentFormatter>();
            var command       = new FormatTreatmentsCommand(formatterMock.Object);
            var documentMock  = new Mock <IDocument>();

            // Act + Assert
            var exception = Assert.ThrowsAsync <ArgumentNullException>(() =>
            {
                return(command.Run(documentMock.Object, null));
            });

            Assert.AreEqual(ParameterNames.Settings, exception.ParamName, "ParamName is not correct.");

            formatterMock.Verify(p => p.Format(It.IsAny <IDocument>()), Times.Never);
        }
        public void FormatTreatmentsCommand_WithValidFormatter_ShouldCorrectlyInitializeObject()
        {
            // Arrange + Act
            var formatterMock = new Mock <ITreatmentFormatter>();
            var command       = new FormatTreatmentsCommand(formatterMock.Object);

            // Assert
            Assert.IsNotNull(command, "Initialized Command object should not be null.");

            var formatter = PrivateField.GetInstanceField(
                typeof(FormatTreatmentsCommand).BaseType,
                command,
                ParameterNames.Formatter);

            Assert.IsNotNull(formatter, "Private formatter field should not be null.");
            Assert.AreSame(formatterMock.Object, formatter, "Private formatter field should not be set correctly.");
        }