public void Title_AddCategory_CorrectTitle()
        {
            var settingsManagerMock = new Mock<ISettingsManager>();
            var viewmodel = new ModifyCategoryViewModel(new Mock<ICategoryRepository>().Object, 
                new Mock<IDialogService>().Object, 
                settingsManagerMock.Object,
                new Mock<IBackupManager>().Object)
            {
                IsEdit = false
            };

            viewmodel.Title.ShouldBe(Strings.AddCategoryTitle); 
        }
        public void Title_EditCategory_CorrectTitle()
        {
            var categoryName = "groceries";

            var settingsManagerMock = new Mock<ISettingsManager>();
            var viewmodel = new ModifyCategoryViewModel(new Mock<ICategoryRepository>().Object, 
                new Mock<IDialogService>().Object,
                settingsManagerMock.Object,
                new Mock<IBackupManager>().Object)
            {
                IsEdit = true,
                SelectedCategory = new CategoryViewModel { Id = 9, Name = categoryName }
            };

            viewmodel.Title.ShouldBe(string.Format(Strings.EditCategoryTitle, categoryName));
        }
        public void SaveCommand_Does_Not_Allow_Duplicate_Names2()
        {
            var categoryList = new List<CategoryViewModel>();

            var categoryRepositorySetup = new Mock<ICategoryRepository>();
            categoryRepositorySetup.Setup(c => c.GetList(It.IsAny<Expression<Func<CategoryViewModel, bool>>>()))
                .Returns(categoryList);
            categoryRepositorySetup.Setup(c => c.Save(It.IsAny<CategoryViewModel>()))
                .Callback((CategoryViewModel cat) => { categoryList.Add(cat); });

            var settingsManagerMock = new Mock<ISettingsManager>();

            var categoryPrimary = new CategoryViewModel
            {
                Id = 1,
                Name = "TeSt CATEGory"
            };
            var categorySecondary = new CategoryViewModel
            {
                Name = "Test CategoryViewModel"
            };
            categoryList.Add(categoryPrimary);

            var viewmodel = new ModifyCategoryViewModel(categoryRepositorySetup.Object, 
                new Mock<IDialogService>().Object, 
                settingsManagerMock.Object,
                new Mock<IBackupManager>().Object)
            {
                IsEdit = false,
                SelectedCategory = categorySecondary
            };

            viewmodel.SaveCommand.Execute();
            categoryList.Count.ShouldBe(1);
        }
        public void DoneCommand_NameEmpty_ShowMessage()
        {
            // Setup
            var wasDialogServiceCalled = false;

            var dialogSetup = new Mock<IDialogService>();
            dialogSetup.Setup(x => x.ShowMessage(It.IsAny<string>(), It.IsAny<string>()))
                .Callback((string a, string b) => wasDialogServiceCalled = true);

            var settingsManagerMock = new Mock<ISettingsManager>();

            var vm = new ModifyCategoryViewModel(new Mock<ICategoryRepository>().Object,
                dialogSetup.Object,
                settingsManagerMock.Object,
                new Mock<IBackupManager>().Object)
            { SelectedCategory = new CategoryViewModel() };

            // Execute
            vm.SaveCommand.Execute(new CategoryViewModel());

            // Assert
            wasDialogServiceCalled.ShouldBeTrue();
        }
        public void Cancel_SelectedCategoryReseted()
        {
            string name = "Cateory";
            var baseCategory = new CategoryViewModel { Id = 5, Name = name };
            var category = new CategoryViewModel { Id = 5, Name = name };

            var categoryRepositorySetup = new Mock<ICategoryRepository>();
            categoryRepositorySetup.Setup(x => x.FindById(It.IsAny<int>())).Returns(baseCategory);

            var settingsManagerMock = new Mock<ISettingsManager>();

            var viewmodel = new ModifyCategoryViewModel(categoryRepositorySetup.Object,
                new Mock<IDialogService>().Object, 
                settingsManagerMock.Object,
                new Mock<IBackupManager>().Object)
            {
                IsEdit = true,
                SelectedCategory = category
            };

            viewmodel.SelectedCategory.Name = "foooo";
            viewmodel.CancelCommand.Execute();

            viewmodel.SelectedCategory.Name.ShouldBe(name);
        }
        public void DeleteCategory_DeletesCategory()
        {
            var categoryList = new List<CategoryViewModel>();
            var categoryRepositorySetup = new Mock<ICategoryRepository>();

            categoryRepositorySetup.Setup(c => c.Save(It.IsAny<CategoryViewModel>()))
                .Callback((CategoryViewModel cat) => { categoryList.Add(cat); });
            categoryRepositorySetup.Setup(c => c.Delete(It.IsAny<CategoryViewModel>()))
                .Callback((CategoryViewModel cat) => { categoryList.Remove(cat); });

            var settingsManagerMock = new Mock<ISettingsManager>();

            var categoryPrimary = new CategoryViewModel
            {
                Id = 1,
                Name = "Test CategoryViewModel",
                Notes = "Notes about the test CategoryViewModel"
            };

            categoryList.Add(categoryPrimary);

            var viewmodel = new ModifyCategoryViewModel(categoryRepositorySetup.Object, 
                new Mock<IDialogService>().Object, 
                settingsManagerMock.Object,
                new Mock<IBackupManager>().Object)
            {
                IsEdit = true,
                SelectedCategory = categoryPrimary
            };

            viewmodel.DeleteCommand.Execute();
            categoryList.Any().ShouldBeFalse();
        }
        public void SaveCategory_UpdateTimeStamp()
        {
            var category = new CategoryViewModel { Id = 0, Name = "CategoryViewModel", Notes = "" };

            var categoryRepositorySetup = new Mock<ICategoryRepository>();

            categoryRepositorySetup.SetupAllProperties();
            categoryRepositorySetup.Setup(x => x.Save(category)).Returns(true);
            categoryRepositorySetup.Setup(x => x.GetList(null)).Returns(() => new ObservableCollection<CategoryViewModel>());

            var localDateSetting = DateTime.MinValue;

            var settingsManagerMock = new Mock<ISettingsManager>();
            settingsManagerMock.SetupSet(x => x.LastDatabaseUpdate = It.IsAny<DateTime>()).Callback((DateTime x) => localDateSetting = x);
            
            var viewmodel = new ModifyCategoryViewModel(categoryRepositorySetup.Object, 
                new Mock<IDialogService>().Object, 
                settingsManagerMock.Object,
                new Mock<IBackupManager>().Object)
            {
                IsEdit = false,
                SelectedCategory = category
            };

            viewmodel.SaveCommand.Execute();

            localDateSetting.ShouldBeGreaterThan(DateTime.Now.AddSeconds(-1));
            localDateSetting.ShouldBeLessThan(DateTime.Now.AddSeconds(1));
        }