public void SelectTemplateFileCommand() { // arrange var vm = new FieldFileViewModel { SelectedFileTemplateId = 1, TemplateData = new FileProcessAttribute("eCar_p", "DoNotExistingPropertyName", null, null) }; var parentModel = Mock.Create<IEditableRoot>(Behavior.Loose); Mock.NonPublic.Arrange<IEditableRoot>(vm, "ParentModel").Returns(parentModel); var dynamicManager = Mock.Create<IDynamicTypeManager>(Behavior.CallOriginal); var dataPortalResult = new DataPortalResult<IEditableRoot>(null, new Exception(), null); Mock.Arrange(() => dynamicManager.BeginGetEditableRoot(Arg.AnyString, 1, Arg.IsAny<Action<object, DataPortalResult<IEditableRoot>>>())) .DoInstead<string, int, Action<object, DataPortalResult<IEditableRoot>>>((processName, id, callback) => callback(null, dataPortalResult)); vm.TheDynamicTypeManager = dynamicManager; var logWasCalled = false; var logger = Mock.Create<ILogger>(Behavior.CallOriginal); Mock.Arrange(() => logger.Log(LogSeverity.Error, vm.GetType().FullName, Arg.IsAny<Exception>())).DoInstead(() => logWasCalled = true); vm.Logger = logger; // act vm.SelectTemplateFileCommand.Execute(null); // assert Assert.AreEqual(LanguageService.Translate("Msg_TemplateNotFound"), vm.Message); Assert.AreEqual(new Exception().ToString(), new PrivateAccessor(vm).GetProperty("ExceptionMessage")); Assert.AreEqual(FileControlMode.NotifyFail, vm.CurrentState); Assert.IsTrue(logWasCalled); // arrange vm.Message = null; vm.CurrentState = FileControlMode.Download; logWasCalled = false; var editableRoot = Mock.Create<IEditableRoot>(Behavior.CallOriginal); dataPortalResult = new DataPortalResult<IEditableRoot>(editableRoot, null, null); // act vm.SelectTemplateFileCommand.Execute(null); // assert Assert.AreEqual(LanguageService.Translate("Msg_TemplateNotFound"), vm.Message); Assert.AreEqual(FileControlMode.NotifyFail, vm.CurrentState); Assert.IsFalse(logWasCalled); // arrange var currentFileProcess = Mock.Create<IFileProcess>(Behavior.Loose); currentFileProcess.Locked = true; Mock.NonPublic.Arrange<IFileProcess>(vm, "CurrentFileProcess").Returns(currentFileProcess); var templateFileProcess = Mock.Create<IFileProcess>(Behavior.Loose); templateFileProcess.FileName = "603512C1-87D1-48BA-9C3F-13DA0C9EF5C0.txt"; templateFileProcess.OriginalFileName = "1.txt"; Mock.Arrange(() => editableRoot.GetValueByPropertyName(Arg.IsAny<string>())).Returns(templateFileProcess); var navigateUriWasRaises = false; Mock.NonPublic.Arrange(vm, "RaisePropertyChanged", "NavigateUri").DoInstead(() => { navigateUriWasRaises = true; }); var templateWasSelectedMessageWasRaises = false; Mock.NonPublic.Arrange(vm, "RaisePropertyChanged", "TemplateWasSelectedMessage").DoInstead(() => { templateWasSelectedMessageWasRaises = true; }); // act vm.SelectTemplateFileCommand.Execute(null); // act Assert.AreEqual("603512C1-87D1-48BA-9C3F-13DA0C9EF5C0.txt", currentFileProcess.FileName); Assert.AreEqual("1.txt", currentFileProcess.OriginalFileName); Assert.IsFalse(currentFileProcess.Locked.Value); Assert.AreEqual(FileControlMode.TemplateWasSelected, vm.CurrentState); Assert.IsTrue(navigateUriWasRaises); Assert.IsTrue(templateWasSelectedMessageWasRaises); }