예제 #1
0
        public void TestOnStepAsyncAtCancel()
        {
            GeneralThreadAffineContext.Run(
                async () =>
                {
                    Mock.Arrange(() => Application.Current.Dispatcher.InvokeAsync(null))
                        .IgnoreArguments()
                        .DoNothing();

                    var managementMock = Mock.Create<CollectionsManagementViewModel>(Behavior.CallOriginal);
                    var editQueueMock = Mock.Create<EditQueueViewModel>(
                        Behavior.CallOriginal, managementMock);

                    Mock.NonPublic.Arrange<Task>(editQueueMock, "UnLockAsync").Returns(Task.Run(() => { }));
                    Mock.Arrange(() => editQueueMock.SelectedQueue).Returns(new QueueDetailsModel());
                    Mock.Arrange(
                        () => managementMock.OnStepAsync(CollectionsManagementViewModel.EnumSteps.SelectQueue))
                        .Returns(Task.Run(() => { }));

                    var mainView = new PrivateAccessor(editQueueMock);
                    mainView.SetProperty("IsCheckedOut", true);
                    await editQueueMock.OnStepAsync(EditQueueViewModel.EnumSteps.Cancel);

                    bool isCheckedOutOnMainViewModel = mainView.GetProperty("IsCheckedOut") is bool && (bool)mainView.GetProperty("IsCheckedOut");

                    Assert.IsFalse(isCheckedOutOnMainViewModel);
                });
        }
예제 #2
0
        public void PrivateAccessor_ShouldGetSetProperty()
        {
            // ACT
            // Wrapping the instance holding the private property.
            var inst = new PrivateAccessor(new ClassWithNonPublicMembers());
            // Setting the value of the private property.
            inst.SetProperty("Prop", 555);

            // ASSERT - Asserting with getting the value of the private property.
            Assert.AreEqual(555, inst.GetProperty("Prop"));
        } 
        public void IsSelectedPropertyTests()
        {
            var tvrs = new TreeViewRequiredStepEdit { DisplayFields = new TreeViewDisplayFields() };
            var tree = new TreeViewRequiredStepViewModel(tvrs, new StepInfo(), new ProcessFieldViewModel(new FieldEdit(), new ProcessSectionViewModel(new SectionEdit())));

            // Arrange
            var mockedClass = Mock.Create<TreeViewDisplayFieldViewModel>(Behavior.Loose);

            Mock.NonPublic.Arrange<ITreeViewRequiredStepViewModel>(mockedClass, "ParentStepViewModel").Returns(tree);

            // Act
            var inst = new PrivateAccessor(mockedClass);
            inst.SetProperty("IsSelected", true);

            var vm = inst.GetProperty("ParentStepViewModel");
            // Assert
            Assert.IsNotNull(vm);
        }
예제 #4
0
        public void GetSystemOptions()
        {
            // arrange
            var vm = new FieldFileViewModel();

            Mock.Arrange(() => Arg.IsAny<SystemPathsInfo>().BeginGetSystemPathsAsync()).Throws<Exception>();

            var logger = Mock.Create<ILogger>(Behavior.CallOriginal);

            var logWasCalled = false;
            Mock.Arrange(() => logger.Log(LogSeverity.Error, typeof(FieldFileViewModel).ToString(), Arg.IsAny<Exception>())).DoInstead(() => logWasCalled = true);

            vm.Logger = logger;

            var privateAccessor = new PrivateAccessor(vm);

            // act
            privateAccessor.CallMethod("GetSystemOptions");

            // assert
            Assert.AreEqual("Invalid System Paths. Contact your administrator, please.", vm.Message);

            var exceptionMessage = (string)privateAccessor.GetProperty("ExceptionMessage");
            Assert.IsTrue(exceptionMessage.StartsWith(new Exception().ToString()));

            Assert.AreEqual(FileControlMode.NotifyFail, vm.CurrentState);
            Assert.IsTrue(logWasCalled);

            // arrange
            vm.Message = null;
            privateAccessor.SetProperty("ExceptionMessage", new Exception().ToString());
            vm.CurrentState = FileControlMode.Download;

            var systemPathsInfo = Mock.Create<SystemPathsInfo>(Behavior.Loose);
            var task = new Task<SystemPathsInfo>(() => systemPathsInfo);
            task.RunSynchronously();

            Mock.Arrange(() => Arg.IsAny<SystemPathsInfo>().BeginGetSystemPathsAsync()).Returns(() => task);

            // act
            privateAccessor.CallMethod("GetSystemOptions");

            // assert
            Assert.AreEqual("System Paths in System Option menu is empty. Please fill in before using FileControl", vm.Message);
            Assert.IsNull(privateAccessor.GetProperty("ExceptionMessage"));
            Assert.AreEqual(FileControlMode.NotifyFail, vm.CurrentState);

            // arrange
            vm.Message = null;
            privateAccessor.SetProperty("ExceptionMessage", new Exception().ToString());
            vm.CurrentState = FileControlMode.Download;

            Mock.Arrange(() => systemPathsInfo.FileUploadURI).Returns("http://*****:*****@"D:\Projects\Cebos\Veyron\Cebos.Veyron.Web\FileStorage");

            var navigateUriWasRaises = false;
            Mock.NonPublic.Arrange(vm, "RaisePropertyChanged", "NavigateUri").DoInstead(() => navigateUriWasRaises = true);

            // act
            privateAccessor.CallMethod("GetSystemOptions");

            Assert.AreEqual("http://localhost:5558/FileUploadHandler.ashx", vm.UploadServiceUrl);
            Assert.AreEqual("/FileStorage", vm.TargetFolder);
            Assert.AreEqual("http://localhost:5558/", vm.DocHandlerUrl);
            Assert.IsTrue(navigateUriWasRaises);
        }
예제 #5
0
        public void Save()
        {
            // arrange
            var vm = new FieldFileViewModel();

            var fileProcess = Mock.Create<IFileProcess>(Behavior.Loose);
            fileProcess.OriginalFileName = "1.txt";
            Mock.NonPublic.Arrange<IFileProcess>(vm, "CurrentFileProcess").Returns(fileProcess);

            var newValue = Mock.Create<IFileProcess>(Behavior.Loose);

            var dataPortalResult = new DataPortalResult<IFileProcess>(newValue, null, null);
            Mock.Arrange(() => fileProcess.BeginSaveNew(Arg.IsAny<Action<object, IDataPortalResult>>()))
                .DoInstead<Action<object, IDataPortalResult>>(a => a(null, dataPortalResult));

            var privateAccessor = new PrivateAccessor(vm);

            // act
            privateAccessor.CallMethod("Save");

            // assert
            Assert.AreEqual(newValue, vm.Value);
            Assert.AreEqual("File '1.txt' uploaded successfully.", vm.Message);

            Assert.AreEqual(FileControlMode.NotifySuccess, privateAccessor.GetField("_previousState"));

            // arrange
            dataPortalResult = new DataPortalResult<IFileProcess>(null, new Exception(), null);

            // act
            privateAccessor.CallMethod("Save");

            // assert
            Assert.AreEqual("Error uploading file.", vm.Message);
            Assert.AreEqual(new Exception().ToString(), privateAccessor.GetProperty("ExceptionMessage"));
            Assert.AreEqual(FileControlMode.NotifyFail, privateAccessor.GetField("_previousState"));

            // arrange
            fileProcess.Id = 1;
            vm.Value = null;

            dataPortalResult = new DataPortalResult<IFileProcess>(newValue, null, null);

            Mock.Arrange(() => fileProcess.BeginUnlock(Arg.IsAny<Action<object, IDataPortalResult>>()))
                .DoInstead<Action<object, IDataPortalResult>>(a => a(null, dataPortalResult));

            // act
            privateAccessor.CallMethod("Save");

            // assert
            Assert.AreEqual(newValue, vm.Value);
            Assert.AreEqual("File '1.txt' uploaded successfully.", vm.Message);
            Assert.AreEqual(FileControlMode.NotifySuccess, vm.CurrentState);

            // arrange
            vm.Message = null;
            privateAccessor.SetProperty("ExceptionMessage", null);

            dataPortalResult = new DataPortalResult<IFileProcess>(null, new Exception(), null);

            var logger = Mock.Create<ILogger>(Behavior.CallOriginal);

            var logWasCalled = false;
            Mock.Arrange(() => logger.Log(LogSeverity.Error, typeof(FieldFileViewModel).ToString(), Arg.IsAny<Exception>())).DoInstead(() => logWasCalled = true);

            vm.Logger = logger;

            // act
            privateAccessor.CallMethod("Save");

            // assert
            Assert.AreEqual(string.Format(@"Error saving instance of new uploaded file{0}Please try again{0}If the problem persists, try to create a new record, and re-check the System Options\System Paths", Environment.NewLine), vm.Message);
            Assert.AreEqual(new Exception().ToString(), privateAccessor.GetProperty("ExceptionMessage"));
            Assert.AreEqual(FileControlMode.NotifyFail, vm.CurrentState);
            Assert.IsTrue(logWasCalled);
        }
예제 #6
0
        [Ignore] //Ignored because throws System.OutOfMemoryException
        public void OnUploadFinished()
        {
            // arrange
            var vm = new FieldFileViewModel();

            var privateAccessor = new PrivateAccessor(vm);
            privateAccessor.SetProperty("UploadError", true);

            var fileProcess = Mock.Create<IFileProcess>(Behavior.Loose);
            fileProcess.IsUploading = true;
            fileProcess.OriginalFileName = "1.doc";
            fileProcess.FileName = "EEE6B881-F39E-4CD0-9B0B-6CF777DCD1DA.doc";
            Mock.NonPublic.Arrange<IFileProcess>(vm, "CurrentFileProcess").Returns(fileProcess);

            Mock.NonPublic.Arrange<string>(vm, "Message1").Throws<Exception>();

            try
            {
                // act
                vm.OnUploadFinished(null, null);
            }
            catch (Exception ex)
            {
                // assert
                Assert.Fail("Expected no exception, but got: " + ex.Message);
            }

            // assert
            Assert.IsFalse(fileProcess.IsUploading);

            // arrange
            privateAccessor.SetProperty("UploadError", false);

            Mock.NonPublic.Arrange<string>(vm, "Message1").CallOriginal();

            Mock.Arrange(() => fileProcess.BeginUploadFile(Arg.IsAny<Action<Exception>>())).DoInstead<Action<Exception>>(a => a(null));
                
            Mock.NonPublic.Arrange<IFileProcess>(vm, "CurrentFileProcess").Returns(fileProcess);

            var saveWasCalled = false;
            Mock.NonPublic.Arrange(vm, "Save").DoInstead(() => saveWasCalled = true);

            // act
            vm.OnUploadFinished(null, null);

            // assert
            Assert.AreEqual("File '1.doc' uploaded successfully.", vm.Message);
            Assert.AreEqual(FileControlMode.NotifySuccess, vm.CurrentState);
            Assert.IsTrue(saveWasCalled);
            Assert.AreEqual("1.doc", fileProcess.OriginalFileName);
            Assert.AreEqual("EEE6B881-F39E-4CD0-9B0B-6CF777DCD1DA.doc", fileProcess.FileName);

            // arrange
            saveWasCalled = false;

            var logger = Mock.Create<ILogger>(Behavior.CallOriginal);
            Mock.Arrange(() => logger.Log(LogSeverity.Warning, typeof(FieldFileViewModel).ToString(), Arg.IsAny<Exception>())).DoNothing().MustBeCalled();
            vm.Logger = logger;

            Mock.Arrange(() => fileProcess.BeginUploadFile(Arg.IsAny<Action<Exception>>())).DoInstead<Action<Exception>>(action => action(new Exception()));
            fileProcess.FileName = Guid.NewGuid() + ".doc";

            // act
            vm.OnUploadFinished(null, null);

            // assert
            Assert.IsFalse(saveWasCalled);
            Assert.IsNull(fileProcess.OriginalFileName);
            Assert.IsNull(fileProcess.FileName);
            Assert.AreEqual("Error uploading file.", vm.Message);
            Assert.AreEqual(new Exception().ToString(), privateAccessor.GetProperty("ExceptionMessage"));
            Assert.AreEqual(FileControlMode.NotifyFail, vm.CurrentState);
            Mock.Assert(logger);

            // arrange
            fileProcess.OriginalFileName = "1.doc";
            fileProcess.FileName = Guid.NewGuid() + ".doc";
            vm.Message = null;
            privateAccessor.SetProperty("ExceptionMessage", null);
            vm.CurrentState = FileControlMode.Download;

            var lavel1WcfErrorInfo = new WcfErrorInfo();
            var lavel2WcfErrorInfo = new WcfErrorInfo();
            var lavel3WcfErrorInfo = new WcfErrorInfo();
            lavel1WcfErrorInfo.InnerError = lavel2WcfErrorInfo;
            lavel2WcfErrorInfo.InnerError = lavel3WcfErrorInfo;

            lavel3WcfErrorInfo.ExceptionTypeName = typeof(DirectoryNotFoundException).FullName;
            lavel3WcfErrorInfo.Message = @"Directory D:\ImportantFiles\ not found";
            lavel3WcfErrorInfo.StackTrace = "at ..., at ...";

            var exception = new DataPortalException(lavel1WcfErrorInfo);
            //dataPortalResult = new DataPortalResult<FileControlUploadFileCommand>(null, exception, null);
            Mock.Arrange(() => fileProcess.BeginUploadFile(Arg.IsAny<Action<Exception>>())).DoInstead<Action<Exception>>(action => action(exception));

            // act
            vm.OnUploadFinished(null, null);

            // assert
            Assert.IsFalse(saveWasCalled);
            Assert.IsNull(fileProcess.OriginalFileName);
            Assert.IsNull(fileProcess.FileName);
            Assert.AreEqual("Error uploading file.", vm.Message);
            Assert.AreEqual(string.Format(@"System.IO.DirectoryNotFoundException{0}Directory D:\ImportantFiles\ not found{0}at ..., at ...", Environment.NewLine),  privateAccessor.GetProperty("ExceptionMessage"));
            Assert.AreEqual(FileControlMode.NotifyFail, vm.CurrentState);

            // arrange
            fileProcess.OriginalFileName = "1.doc";
            fileProcess.FileName = Guid.NewGuid() + ".doc";
            vm.Message = null;
            privateAccessor.SetProperty("ExceptionMessage", null);
            vm.CurrentState = FileControlMode.Download;

            lavel3WcfErrorInfo.ExceptionTypeName = typeof(WebException).FullName;
            lavel3WcfErrorInfo.Message = "Host not responding";
            lavel3WcfErrorInfo.StackTrace = "at ..., at ...";

            // act
            vm.OnUploadFinished(null, null);

            // assert
            Assert.IsFalse(saveWasCalled);
            Assert.IsNull(fileProcess.OriginalFileName);
            Assert.IsNull(fileProcess.FileName);
            Assert.AreEqual("DocumentProcessor service is not responding. Please contact your administrator to make sure it is running and 'File Processor URI' is set correcltly in the Control Panel.", vm.Message);
            Assert.AreEqual(string.Format(@"System.Net.WebException{0}Host not responding{0}at ..., at ...", Environment.NewLine), privateAccessor.GetProperty("ExceptionMessage"));
            Assert.AreEqual(FileControlMode.NotifyFail, vm.CurrentState);

            // arrange
            fileProcess.OriginalFileName = "1.doc";
            fileProcess.FileName = Guid.NewGuid() + ".doc";
            vm.Message = null;
            privateAccessor.SetProperty("ExceptionMessage", null);
            vm.CurrentState = FileControlMode.Download;

            lavel3WcfErrorInfo.ExceptionTypeName = typeof(FileNotFoundException).FullName;
            lavel3WcfErrorInfo.Message = @"File D:\ImportantFiles\1.doc not exists";
            lavel3WcfErrorInfo.StackTrace = "at ..., at ...";

            // act
            vm.OnUploadFinished(null, null);

            // assert
            Assert.IsFalse(saveWasCalled);
            Assert.IsNull(fileProcess.OriginalFileName);
            Assert.IsNull(fileProcess.FileName);
            Assert.AreEqual(string.Format(@"Uploaded file in temp location was not found{0}Please verify System Options\System Paths", Environment.NewLine), vm.Message);
            Assert.AreEqual(string.Format(@"System.IO.FileNotFoundException{0}File D:\ImportantFiles\1.doc not exists{0}at ..., at ...", Environment.NewLine), privateAccessor.GetProperty("ExceptionMessage"));
            Assert.AreEqual(FileControlMode.NotifyFail, vm.CurrentState);
        }
예제 #7
0
        public void OnNotificationMessageChanged_WhenHasValue_SetShowNotificationToTrue()
        {
            var connectorThumb = new ConnectorThumb();
            var privateAccessor = new PrivateAccessor(connectorThumb);

            privateAccessor.SetProperty("NotificationMessage", "some text");
            Assert.IsTrue(connectorThumb.ShowNotification);
        }
예제 #8
0
        public void OnShowNotificationChanged_WhenFalse_ClearNotificationMessage()
        {
            var connectorThumb = new ConnectorThumb();
            var privateAccessor = new PrivateAccessor(connectorThumb);

            Mock.NonPublic.Arrange(connectorThumb, "OnNotificationMessageChanged",
                                   ArgExpr.IsAny<DependencyObject>(),
                                   ArgExpr.IsAny<DependencyPropertyChangedEventArgs>())
                          .DoNothing();

            privateAccessor.SetProperty("NotificationMessage", "some text");

            connectorThumb.ShowNotification = true;
            connectorThumb.ShowNotification = false;
            Assert.IsNull(connectorThumb.NotificationMessage);
        }
        public void TestOnStepAsyncSelectTranche_SetSelectedTranche()
        {
            GeneralThreadAffineContext.Run(
                async () =>
                {
                    // Mock enviroment for test
                    Mock.Arrange(() => Application.Current.Dispatcher.InvokeAsync(null))
                        .IgnoreArguments()
                        .DoNothing();

                    FundingSummaryViewModel fundingSummary;
                    ExistingTrancheViewModel existingTranche;

                    // Create mock
                    fundingSummary = Mock.Create<FundingSummaryViewModel>(Behavior.CallOriginal);

                    // fundingDetail = Mock.Create<FundingDetailsViewModel>(
                    //    x =>
                    //        {
                    //            x.CallConstructor(() => new FundingDetailsViewModel(fundingSummary));
                    //            x.SetBehavior(Behavior.CallOriginal);
                    //        });
                    existingTranche = Mock.Create<ExistingTrancheViewModel>(
                        x =>
                            {
                                x.CallConstructor(() => new ExistingTrancheViewModel(fundingSummary));
                                x.SetBehavior(Behavior.CallOriginal);
                            });

                    fundingSummary.CanEdit = true;

                    // Create mock static class
                    Mock.SetupStatic(typeof(FundingFunctions), StaticConstructor.Mocked);
                    Mock.SetupStatic(typeof(ExistingTrancheViewModel), StaticConstructor.Mocked);

                    // Fake data
                    // Mock.Arrange(() => fundingDetail.OnStepAsync(FundingDetailsViewModel.EnumStep.Start))
                    //    .IgnoreArguments()
                    //    .Returns(() => Task.Run(() => { }));
                    Mock.Arrange(() => FundingFunctions.GetFundingTrancheAsync(Arg.IsAny<int>())).IgnoreArguments()
                        .Returns(FakeDataFunding.FakeDataFundingSummary.FakeFundingTranche());
                    Mock.Arrange(() => fundingSummary.SelectedTranche)
                        .Returns(await FakeDataFunding.FakeDataFundingSummary.FakeSelectedTranche());

                    Mock.Arrange(() => existingTranche.SetTrancheIdAsync(Arg.IsAny<int>())).Returns(Task.Run(() => { }));

                    // Fake data for private property
                    var priva = new PrivateAccessor(fundingSummary);
                    priva.SetProperty("ExistingTrancheViewModel", existingTranche);

                    Mock.Arrange(
                        () =>
                        fundingSummary.FundingDetails.OnStepAsync(FundingDetailsViewModel.EnumStep.TrancheSelected))
                        .IgnoreArguments()
                        .Returns(() => Task.Run(() => { }));
                    
                    // Run method
                    await fundingSummary.OnStepAsync("SelectTranche");

                    // Test action command
                    var actual = fundingSummary.ActionCommands;

                    Assert.AreEqual(1, actual.Count);
                    Assert.AreEqual("CreateNew", actual.First().Parameter);
                });
        }
        public void TestOnStepAsyncTrancheAdded_AddTrancheInExistingSummary()
        {
            GeneralThreadAffineContext.Run(
                async () =>
                {
                    // Mock enviroment for test
                    Mock.Arrange(() => Application.Current.Dispatcher.InvokeAsync(null))
                        .IgnoreArguments()
                        .DoNothing();

                    FundingSummaryViewModel fundingSummary;
                    ExistingTrancheViewModel existingTranche;

                    // Create mock
                    fundingSummary = Mock.Create<FundingSummaryViewModel>(Behavior.CallOriginal);
                    Mock.SetupStatic(typeof(FundingFunctions), StaticConstructor.Mocked);

                    existingTranche = Mock.Create<ExistingTrancheViewModel>(
                        x =>
                        {
                            x.CallConstructor(() => new ExistingTrancheViewModel(fundingSummary));
                            x.SetBehavior(Behavior.CallOriginal);
                        });

                    // Fake data for private property
                    var priva = new PrivateAccessor(fundingSummary);
                    priva.SetProperty("ExistingTrancheViewModel", existingTranche);

                    // Fake data
                    fundingSummary.AddedTrancheId = 1;
                    Mock.Arrange(() => fundingSummary.FundingDetails)
                        .Returns(new FundingDetailsViewModel(fundingSummary));
                    Mock.Arrange(() => existingTranche.SetTrancheIdAsync(Arg.IsAny<int>())).Returns(Task.Run(() => { }));
                    Mock.Arrange(() => FundingFunctions.GetAllTranchesAsync())
                        .Returns(FakeDataFunding.FakeDataFundingSummary.FakeFundingSummaryList());

                    // Run method
                    await fundingSummary.OnStepAsync("TrancheAdded");

                    // Test
                    // Test fundingDetail.BusyContent is null and IsBusy is false
                    var actual = fundingSummary.FundingDetails;

                    // Test value TrancheSummary
                    var actual2 = fundingSummary.TrancheSummary;

                    // Test SelectedTranche has value
                    var actual3 = fundingSummary.SelectedTranche;

                    Assert.AreEqual(string.Empty, actual.BusyContent);
                    Assert.IsFalse(actual.IsBusy);
                    Assert.AreEqual(2, actual2.Count);
                    Assert.AreEqual(1, actual3.TrancheId);
                });
        }
        public void TestOnStepAsyncStart_LoadNewTrancheSummary()
        {
            GeneralThreadAffineContext.Run(
                async () =>
                {
                    // Mock enviroment for test
                    Mock.Arrange(() => Application.Current.Dispatcher.InvokeAsync(null))
                        .IgnoreArguments()
                        .DoNothing();

                    FundingSummaryViewModel fundingSummary;
                    NewTrancheViewModel newTranche;

                    // Create mock
                    fundingSummary = Mock.Create<FundingSummaryViewModel>(Behavior.CallOriginal);

                    newTranche = Mock.Create<NewTrancheViewModel>(
                        x =>
                        {
                            x.CallConstructor(() => new NewTrancheViewModel(fundingSummary));
                            x.SetBehavior(Behavior.CallOriginal);
                        });

                    // Mock.Arrange(() => FundingFunctions.GetFundingTrancheAsync(Arg.IsAny<int>())).IgnoreArguments()
                    // .Returns(FakeDataFunding.FakeDataFundingSummary.FakeFundingTranche());
                    // Mock.Arrange(() => fundingSummary.SelectedTranche)
                    // .Returns(await FakeDataFunding.FakeDataFundingSummary.FakeSelectedTranche());

                    // Fake data for private property
                    var priva = new PrivateAccessor(fundingSummary);
                    priva.SetProperty("NewTrancheViewModel", newTranche);

                    Mock.Arrange(
                        () =>
                        newTranche.OnStepAsync(FundingDetailsViewModel.EnumStep.Start))
                        .IgnoreArguments()
                        .Returns(() => Task.Run(() => { }));

                    // Run method
                    await fundingSummary.OnStepAsync("CreateNew");

                    // Test action command
                    var actual = fundingSummary.ActionCommands;

                    Assert.IsNull(actual);
                });
        }
예제 #12
0
        public void TestOnStepAsyncSave_AddedTrancheId()
        {
            GeneralThreadAffineContext.Run(
                async () =>
                {
                    Mock.Arrange(() => Application.Current.Dispatcher.InvokeAsync(null))
                        .IgnoreArguments()
                        .DoNothing();

                    // Create mock
                    var summaryViewModel = Mock.Create<FundingSummaryViewModel>(
                        new Constructor(),
                        Behavior.CallOriginal);
                    var existingTranche = Mock.Create<ExistingTrancheViewModel>(
                        x =>
                        {
                            x.CallConstructor(() => new ExistingTrancheViewModel(summaryViewModel));
                            x.SetBehavior(Behavior.CallOriginal);
                        });
                    var detailsViewModel = Mock.Create<FundingDetailsViewModel>(
                        x =>
                        {
                            x.CallConstructor(() => new FundingDetailsViewModel(summaryViewModel));
                            x.SetBehavior(Behavior.CallOriginal);
                        });
                    var newTrancheViewModel = Mock.Create<NewTrancheViewModel>(x =>
                    {
                        x.CallConstructor(() => new NewTrancheViewModel(summaryViewModel));
                        x.SetBehavior(Behavior.CallOriginal);

                    });
                    var contracts = FakeDataFunding.FakeDataFundingDetail.FakeTrancheContracts();

                    // Create mock static class
                    Mock.SetupStatic(typeof(SystemConstantFunctions), StaticConstructor.Mocked);
                    Mock.SetupStatic(typeof(FinanceTypeFunctions), StaticConstructor.Mocked);
                    Mock.SetupStatic(typeof(OperationsEntityFunctions), StaticConstructor.Mocked);
                    Mock.SetupStatic(typeof(DirectDebitProfileFunctions), StaticConstructor.Mocked);
                    Mock.SetupStatic(typeof(FundingFunctions), StaticConstructor.Mocked);

                    // Fake data
                    Mock.Arrange(
                        () =>
                        SystemConstantFunctions.GetSystemConstantsByTypeAsync(
                            SystemConstantType.TrancheStatus))
                        .Returns(FakeDataFunding.FakeDataFundingDetail.FakeSystemConstants());
                    Mock.Arrange(() => FinanceTypeFunctions.GetAllFinanceTypesAsync())
                        .Returns(FakeDataFunding.FakeDataFundingDetail.FakeRawFinanceTypes());
                    Mock.Arrange(
                        () =>
                        SystemConstantFunctions.GetSystemConstantsByTypeAsync(
                            SystemConstantType.Frequency))
                        .Returns(FakeDataFunding.FakeDataFundingDetail.FakeSystemConstants());
                    Mock.Arrange(
                        () =>
                        SystemConstantFunctions.GetSystemConstantsByTypeAsync(
                            SystemConstantType.InstallmentType))
                        .Returns(FakeDataFunding.FakeDataFundingDetail.FakeSystemConstants());
                    Mock.Arrange(
                        () =>
                        SystemConstantFunctions.GetSystemConstantsByTypeAsync(
                            SystemConstantType.FundingStatus))
                        .Returns(FakeDataFunding.FakeDataFundingDetail.FakeSystemConstants());
                    Mock.Arrange(
                        () =>
                        OperationsEntityFunctions.GetEntitiesByCategoryIdAsync(
                            EntityCategory.InternalCompany))
                        .Returns(FakeDataFunding.FakeDataFundingDetail.FakeRawInternalCompanies());
                    Mock.Arrange(
                        () =>
                        OperationsEntityFunctions.GetEntitiesByCategoryIdAsync(
                            EntityCategory.Supplier))
                        .Returns(FakeDataFunding.FakeDataFundingDetail.FakeRawSuppliers());
                    Mock.Arrange(
                        () =>
                        OperationsEntityFunctions.GetEntitiesByCategoryIdAsync(
                            EntityCategory.Funder))
                        .Returns(FakeDataFunding.FakeDataFundingDetail.FakeRawFunders());
                    Mock.Arrange(() => DirectDebitProfileFunctions.GetAllDirectDebitProfilesAsync())
                        .Returns(FakeDataFunding.FakeDataFundingDetail.FakeDirectDebitProfiles());

                    Mock.Arrange(() => FundingFunctions.CalculateFundingTrancheAsync(detailsViewModel.SelectedTrancheProfile)).IgnoreArguments()
                        .Returns(Task.Run(() => { }));

                    Mock.Arrange(() => newTrancheViewModel.IncludedInTrancheContracts)
                        .Returns(new ObservableModelCollection<TrancheContractSummary>(contracts));
                    Mock.Arrange(() => detailsViewModel.OriginalTrancheStatus).Returns(TrancheStatus.Confirmed);

                    Mock.Arrange(() => newTrancheViewModel.SelectedTrancheProfile).Returns(FakeDataFunding.FakeDataFundingDetail.FakeTrancheProfile());

                    Mock.NonPublic.Arrange<Task>(newTrancheViewModel, "SaveAsync").Returns(Task.Run(() => { }));

                    // Fake data for private property
                    var priva = new PrivateAccessor(summaryViewModel);
                    priva.SetProperty("ExistingTrancheViewModel", existingTranche);
                    summaryViewModel.AddedTrancheId = new int();

                    // Fake data
                    summaryViewModel.AddedTrancheId = 1;
                    Mock.Arrange(() => summaryViewModel.FundingDetails)
                        .Returns(new FundingDetailsViewModel(summaryViewModel));
                    Mock.Arrange(() => existingTranche.SetTrancheIdAsync(Arg.IsAny<int>())).Returns(Task.Run(() => { }));
                    Mock.Arrange(() => FundingFunctions.GetAllTranchesAsync())
                        .Returns(FakeDataFunding.FakeDataFundingSummary.FakeFundingSummaryList());

                    // Run method
                    await newTrancheViewModel.OnStepAsync(FundingDetailsViewModel.EnumStep.Save);

                    // Expect summaryViewModel.AddedTrancheId = newTrancheViewModel.SelectedTrancheProfile.TrancheId
                    Assert.AreEqual(summaryViewModel.AddedTrancheId, newTrancheViewModel.SelectedTrancheProfile.TrancheId);
                });
        }