public void ExportarCommandShouldExecute(params string[] files)
        {
            // Arrange
            _mockConfig.SetupGet(config => config.Config)
            .Returns(new Config());
            _mockDialog.Setup(d => d.ShowFolderBrowser(It.IsAny <string>(), It.IsAny <string>(), false))
            .Returns(true);
            _mockDialog.SetupGet(d => d.FolderPath)
            .Returns(@"C:\Example");
            _mockFileSystem.Setup(f => f.Directory.Exists(It.IsAny <string>()))
            .Returns(true);
            _mockFileSystem.Setup(f => f.Path.GetDirectoryName(It.IsAny <string>()))
            .Returns(It.IsAny <string>());
            _mockFileSystem.Setup(f => f.Directory.GetFiles(
                                      @"C:\Example",
                                      "*.csv",
                                      SearchOption.TopDirectoryOnly))
            .Returns(files);
            _mockFileSystem.Setup(f => f.File.Exists(It.IsAny <string>()))
            .Returns(true);
            _mockEsterolesLogic.Setup(e => e.Calculate(It.IsAny <string>()))
            .Returns(new EsterolesResult());

            // Act
            var esterolesViewModel = new EsterolesViewModel(_mockDialog.Object, _mockConfig.Object,
                                                            _mockEsterolesLogic.Object, _mockFileSystem.Object);

            esterolesViewModel.SeleccionaDirectorio.Execute(null);
            esterolesViewModel.Generar.Execute(null);

            // Assert
            Assert.True(esterolesViewModel.Exportar.CanExecute(null));
        }
        public void GenerarCommandShouldShowDialogInfoIfThereAreNotFiles()
        {
            // Arrange
            _mockConfig.SetupGet(config => config.Config)
            .Returns(new Config());
            _mockDialog.Setup(d => d.ShowFolderBrowser(It.IsAny <string>(), It.IsAny <string>(), false))
            .Returns(true);
            _mockDialog.SetupGet(d => d.FolderPath)
            .Returns(@"C:\Example");
            _mockFileSystem.Setup(f => f.Directory.Exists(It.IsAny <string>()))
            .Returns(true);
            _mockFileSystem.Setup(f => f.Path.GetDirectoryName(It.IsAny <string>()))
            .Returns(It.IsAny <string>());
            // Act
            var esterolesViewModel = new EsterolesViewModel(_mockDialog.Object, _mockConfig.Object,
                                                            _mockEsterolesLogic.Object, _mockFileSystem.Object);

            esterolesViewModel.SeleccionaDirectorio.Execute(null);
            esterolesViewModel.Generar.Execute(null);

            // Assert
            _mockDialog.Verify(d =>
                               d.ShowInfoDialogAsync(
                                   "Info",
                                   "No hay análisis en este directorio"),
                               Times.Once);
        }
        public void GenerarCommandShouldInsertDirectoryFirstItemInHistoryWithItems()
        {
            // Arrange
            Config config = new Config();

            config.Esteroles.HistoricoDirectorios.Add(@"C:\Example1");
            _mockConfig.SetupGet(c => c.Config)
            .Returns(config);
            _mockDialog.Setup(d => d.ShowFolderBrowser(It.IsAny <string>(), It.IsAny <string>(), false))
            .Returns(true);
            _mockDialog.SetupGet(d => d.FolderPath)
            .Returns(@"C:\Example2");
            _mockFileSystem.Setup(f => f.Directory.Exists(It.IsAny <string>()))
            .Returns(true);
            _mockFileSystem.Setup(f => f.Path.GetDirectoryName(It.IsAny <string>()))
            .Returns(It.IsAny <string>());
            _mockFileSystem.Setup(f => f.Directory.GetFiles(
                                      @"C:\Example2",
                                      "*.csv",
                                      SearchOption.TopDirectoryOnly))
            .Returns(new string[] { "file1.csv" });
            // Act
            var esterolesViewModel = new EsterolesViewModel(_mockDialog.Object, _mockConfig.Object,
                                                            _mockEsterolesLogic.Object, _mockFileSystem.Object);

            esterolesViewModel.SeleccionaDirectorio.Execute(null);
            esterolesViewModel.Generar.Execute(null);

            // Assert
            Assert.Collection(esterolesViewModel.HistoricoDirectorios,
                              item => Assert.Equal(@"C:\Example2", item),
                              item => Assert.Equal(@"C:\Example1", item));
        }
        public void GenerarCommandShouldSetSelectedDirectory()
        {
            // Arrange
            _mockConfig.SetupGet(config => config.Config)
            .Returns(new Config());
            _mockDialog.Setup(d => d.ShowFolderBrowser(It.IsAny <string>(), It.IsAny <string>(), false))
            .Returns(true);
            _mockDialog.SetupGet(d => d.FolderPath)
            .Returns(@"C:\Example");
            _mockFileSystem.Setup(f => f.Directory.Exists(It.IsAny <string>()))
            .Returns(true);
            _mockFileSystem.Setup(f => f.Path.GetDirectoryName(It.IsAny <string>()))
            .Returns(It.IsAny <string>());
            _mockFileSystem.Setup(f => f.Directory.GetFiles(
                                      @"C:\Example",
                                      "*.csv",
                                      SearchOption.TopDirectoryOnly))
            .Returns(new string[] { "file1.csv" });
            // Act
            var esterolesViewModel = new EsterolesViewModel(_mockDialog.Object, _mockConfig.Object,
                                                            _mockEsterolesLogic.Object, _mockFileSystem.Object);

            esterolesViewModel.SeleccionaDirectorio.Execute(null);
            esterolesViewModel.Generar.Execute(null);

            // Assert
            Assert.Equal(@"C:\Example", esterolesViewModel.SelectedDirectorio);
        }
        public void ExportarCommandShouldNotExecute()
        {
            // Arrange
            _mockConfig.SetupGet(config => config.Config)
            .Returns(new Config());
            // Act
            var esterolesViewModel = new EsterolesViewModel(_mockDialog.Object, _mockConfig.Object,
                                                            _mockEsterolesLogic.Object, _mockFileSystem.Object);

            // Assert
            Assert.False(esterolesViewModel.Exportar.CanExecute(null));
        }
        public void ExportarCommandShouldExportCsv(params string[] files)
        {
            // Arrange
            _mockConfig.SetupGet(config => config.Config)
            .Returns(new Config());
            _mockDialog.Setup(d => d.ShowFolderBrowser(It.IsAny <string>(), It.IsAny <string>(), false))
            .Returns(true);
            _mockDialog.SetupGet(d => d.FolderPath)
            .Returns(@"C:\Example");
            _mockFileSystem.Setup(f => f.Directory.Exists(It.IsAny <string>()))
            .Returns(true);
            _mockFileSystem.Setup(f => f.Path.GetDirectoryName(It.IsAny <string>()))
            .Returns(It.IsAny <string>());
            _mockFileSystem.Setup(f => f.Directory.GetFiles(
                                      @"C:\Example",
                                      "*.csv",
                                      SearchOption.TopDirectoryOnly))
            .Returns(files);
            _mockFileSystem.Setup(f => f.File.Exists(It.IsAny <string>()))
            .Returns(true);
            _mockEsterolesLogic.Setup(e => e.Calculate(It.IsAny <string>()))
            .Returns(new EsterolesResult());
            _mockDialog.Setup(d => d.ShowSaveFileDialog("Exportar CSV",
                                                        "",
                                                        "export.csv",
                                                        ".csv",
                                                        "CSV documents (.csv)|*.csv"))
            .Returns(true);
            _mockDialog.SetupGet(d => d.FilePathToSave)
            .Returns(It.IsAny <string>());

            // Act
            var esterolesViewModel = new EsterolesViewModel(_mockDialog.Object, _mockConfig.Object,
                                                            _mockEsterolesLogic.Object, _mockFileSystem.Object);

            esterolesViewModel.SeleccionaDirectorio.Execute(null);
            esterolesViewModel.Generar.Execute(null);
            esterolesViewModel.Exportar.Execute(null);

            // Assert
            Assert.True(esterolesViewModel.Exportar.CanExecute(null));
            _mockDialog.Verify(d => d.ShowSaveFileDialog("Exportar CSV",
                                                         "",
                                                         "export.csv",
                                                         ".csv",
                                                         "CSV documents (.csv)|*.csv"),
                               Times.Once);
            _mockDialog.Verify(d => d.FilePathToSave, Times.Once);
            _mockEsterolesLogic.Verify(e => e.Export(It.IsAny <string>(),
                                                     It.IsAny <ObservableCollection <EsterolesResult> >()),
                                       Times.Once);
        }
        public void ExportarCommandShouldShowInfoDialogIfEsterolesLogicThrowsException(params string[] files)
        {
            // Arrange
            _mockConfig.SetupGet(config => config.Config)
            .Returns(new Config());
            _mockDialog.Setup(d => d.ShowFolderBrowser(It.IsAny <string>(), It.IsAny <string>(), false))
            .Returns(true);
            _mockDialog.SetupGet(d => d.FolderPath)
            .Returns(@"C:\Example");
            _mockFileSystem.Setup(f => f.Directory.Exists(It.IsAny <string>()))
            .Returns(true);
            _mockFileSystem.Setup(f => f.Path.GetDirectoryName(It.IsAny <string>()))
            .Returns(It.IsAny <string>());
            _mockFileSystem.Setup(f => f.Directory.GetFiles(
                                      @"C:\Example",
                                      "*.csv",
                                      SearchOption.TopDirectoryOnly))
            .Returns(files);
            _mockFileSystem.Setup(f => f.File.Exists(It.IsAny <string>()))
            .Returns(true);
            _mockEsterolesLogic.Setup(e => e.Calculate(It.IsAny <string>()))
            .Throws(new Exception("Exception error"));
            _mockDialog.Setup(d => d.ShowSaveFileDialog("Exportar CSV",
                                                        "",
                                                        "export.csv",
                                                        ".csv",
                                                        "CSV documents (.csv)|*.csv"))
            .Returns(true);
            _mockDialog.SetupGet(d => d.FilePathToSave)
            .Returns(It.IsAny <string>());

            // Act
            var esterolesViewModel = new EsterolesViewModel(_mockDialog.Object, _mockConfig.Object,
                                                            _mockEsterolesLogic.Object, _mockFileSystem.Object);

            esterolesViewModel.SeleccionaDirectorio.Execute(null);
            esterolesViewModel.Generar.Execute(null);
            esterolesViewModel.Exportar.Execute(null);

            // Assert
            _mockFileSystem.Verify(f => f.File.Exists(It.IsAny <string>()),
                                   Times.Exactly(files.Length));
            _mockEsterolesLogic.Verify(e => e.Calculate(It.IsAny <string>()),
                                       Times.Exactly(files.Length));
            Assert.Empty(esterolesViewModel.Results);
            _mockDialog.Verify(d => d.ShowInfoDialogAsync("Error", $"Error: Exception error"),
                               Times.Exactly(files.Length));
        }
        public void GenerarCommandShouldNotExecute()
        {
            // Arrange
            _mockConfig.SetupGet(config => config.Config)
            .Returns(new Config());
            _mockDialog.Setup(d => d.ShowFolderBrowser(It.IsAny <string>(), It.IsAny <string>(), false))
            .Returns(false);
            // Act
            var esterolesViewModel = new EsterolesViewModel(_mockDialog.Object, _mockConfig.Object,
                                                            _mockEsterolesLogic.Object, _mockFileSystem.Object);

            esterolesViewModel.SeleccionaDirectorio.Execute(null);

            // Assert
            Assert.False(esterolesViewModel.Generar.CanExecute(null));
        }
        public void CloseCommandShouldSaveAnalysisType()
        {
            // Arrange
            _mockConfig.SetupGet(config => config.Config)
            .Returns(new Config());

            // Act
            var esterolesViewModel = new EsterolesViewModel(_mockDialog.Object, _mockConfig.Object,
                                                            _mockEsterolesLogic.Object, _mockFileSystem.Object);

            esterolesViewModel.Close();

            // Assert
            _mockConfig.Verify(c => c.Save(), Times.Once);
            Assert.Equal(nameof(EsterolesViewModel), _mockConfig.Object.Config.LastAnalysis);
        }
        public void SeleccionaDirectorioCommandShouldSelectADirectory()
        {
            // Arrange
            _mockConfig.SetupGet(config => config.Config)
            .Returns(new Config());
            _mockDialog.Setup(d => d.ShowFolderBrowser(It.IsAny <string>(), It.IsAny <string>(), false))
            .Returns(true);
            _mockDialog.SetupGet(d => d.FolderPath)
            .Returns(@"C:\Example");
            // Act
            var esterolesViewModel = new EsterolesViewModel(_mockDialog.Object, _mockConfig.Object,
                                                            _mockEsterolesLogic.Object, _mockFileSystem.Object);

            esterolesViewModel.SeleccionaDirectorio.Execute(null);

            // Assert
            _mockDialog.Verify(d => d.ShowFolderBrowser(It.IsAny <string>(), It.IsAny <string>(), false),
                               Times.Once);
            Assert.Equal(@"C:\Example", esterolesViewModel.TextDirectorio);
        }