public void DeleteCommand_DoNothingOnReadMode()
        {
            var viewModel = new TestEditableItemViewModel(_itemsService, _selectedItemService);

            viewModel.DeleteCommand.Execute();
            Assert.False(viewModel.IsDeleted);
        }
        public void BeginEdit_IsEditMode()
        {
            var viewModel = new TestEditableItemViewModel(_itemsService, _selectedItemService);

            viewModel.BeginEdit();

            Assert.True(viewModel.IsEditMode);
        }
        public void BeginEdit_CreateCopy()
        {
            var viewModel = new TestEditableItemViewModel(_itemsService, _selectedItemService);

            viewModel.BeginEdit();
            viewModel.EditItem.Text = "new text";

            Assert.NotEqual(viewModel.Item.Text, viewModel.EditItem.Text);
        }
        public void DeleteCommand_CallOnDeleteAsyncSure_IsReadModeAfterDelete()
        {
            var viewModel = new TestEditableItemViewModel(_itemsService, _selectedItemService)
            {
                SureToDelete = true
            };

            viewModel.DeleteCommand.Execute();
            Assert.True(viewModel.IsDeleted);
        }
        public void DeleteCommand_CallOnDeleteAsyncNotSure()
        {
            var viewModel = new TestEditableItemViewModel(_itemsService, _selectedItemService)
            {
                SureToDelete = false
            };

            viewModel.DeleteCommand.Execute();
            Assert.False(viewModel.IsDeleted);
        }
        public void CancelEdit_EditMode()
        {
            var viewModel = new TestEditableItemViewModel(_itemsService, _selectedItemService);

            viewModel.BeginEdit();

            viewModel.CancelEdit();

            Assert.False(viewModel.IsEditMode);
        }
        public void EndEdit_ItemSaved()
        {
            var viewModel = new TestEditableItemViewModel(_itemsService, _selectedItemService);

            viewModel.BeginEdit();
            viewModel.EditItem.Text = "new text";

            viewModel.EndEdit();

            Assert.Equal("new text", viewModel.EditItem.Text);
            Assert.Equal(viewModel.EditItem.Text, viewModel.Item.Text);
        }
        public void CancelEdit_EditItemReset()
        {
            var viewModel = new TestEditableItemViewModel(_itemsService, _selectedItemService);

            viewModel.BeginEdit();
            viewModel.EditItem.Text = "new text";

            viewModel.CancelEdit();

            Assert.Equal("second", viewModel.Item.Text);
            Assert.Equal(viewModel.Item.Text, viewModel.EditItem.Text);
        }
        public void IsEditModeRaiseEvents()
        {
            // arrange
            var  viewModel          = new TestEditableItemViewModel(_itemsService, _selectedItemService);
            bool cancelCommandFired = false;
            bool saveCommandFired   = false;
            bool editCommandFired   = false;

            viewModel.CancelCommand.CanExecuteChanged += (sender, e) =>
                                                         cancelCommandFired = true;
            viewModel.SaveCommand.CanExecuteChanged += (sender, e) =>
                                                       saveCommandFired = true;
            viewModel.EditCommand.CanExecuteChanged += (sender, e) =>
                                                       editCommandFired = true;
            // act
            viewModel.BeginEdit();

            // assert
            Assert.True(viewModel.IsEditMode);
            Assert.True(cancelCommandFired);
            Assert.True(saveCommandFired);
            Assert.True(editCommandFired);
        }
        public void FireEditItemEventOnItemChange()
        {
            bool editItemChangedFired = false;
            bool itemChangedFired     = false;

            var viewModel = new TestEditableItemViewModel(_itemsService, _selectedItemService);

            viewModel.PropertyChanged += (sender, e) =>
            {
                if (e.PropertyName == "Item")
                {
                    itemChangedFired = true;
                }
                if (e.PropertyName == "EditItem")
                {
                    editItemChangedFired = true;
                }
            };
            viewModel.Item = new AnItem();

            Assert.True(editItemChangedFired);
            Assert.True(itemChangedFired);
        }