public void ActivityCollectionDesignerViewModel_ChangeDtoProperty_CausesCustomActionsToFire()
        {
            //------------Setup for test--------------------------
            const int ItemCount = 3;

            var modelItem = CreateModelItem(ItemCount);
            var viewModel = new TestActivityDesignerCollectionViewModelItemsInitialized(modelItem);

            const int ExpectedItemCount = 5;
            var source = new List<string>();
            for(var i = 0; i < ExpectedItemCount; i++)
            {
                source.Add("NewField" + i);
            }
            viewModel.TestAddToCollection(source, true);
            // ReSharper disable PossibleNullReferenceException
            var mic = viewModel.ModelItem.Properties[viewModel.CollectionName].Collection;
            var dto = (ActivityDTO)mic[0].GetCurrentValue();
            // ReSharper restore PossibleNullReferenceException
            //------------Execute Test---------------------------
            dto.FieldName = "Test";
            //------------Assert Results-------------------------
            Assert.IsTrue(viewModel.CustomActionCalled);
        }
        public void ActivityCollectionDesignerViewModel_AddToCollection_OverwriteFalseAndTwoBlankRows_ItemsAdded()
        {
            //------------Setup for test--------------------------
            var items = CreateItemsList(2);     // all blank rows
            var modelItem = CreateModelItem(items);
            var viewModel = new TestActivityDesignerCollectionViewModelItemsInitialized(modelItem);

            var source = new List<string>();
            for(var i = 0; i < 2; i++)
            {
                source.Add("NewField" + (i + 1));
            }

            const int ExpectedItemCount = 3;

            //------------Execute Test---------------------------
            viewModel.TestAddToCollection(source, false);

            //------------Assert Results-------------------------
            // ReSharper disable PossibleNullReferenceException
            var mic = viewModel.ModelItem.Properties[viewModel.CollectionName].Collection;

            // Extra blank row is also added
            Assert.AreEqual(ExpectedItemCount, viewModel.ItemCount);

            VerifyItem(mic[0], 1, "NewField1", "");
            VerifyItem(mic[1], 2, "NewField2", "");

            // check that the first blank row was not removed - just repositioned
            Assert.AreSame(items[0], mic[2].GetCurrentValue());
            VerifyItem(mic[2], 3, "", "");

            // ReSharper restore PossibleNullReferenceException

            Assert.AreEqual(string.Format("Activity ({0})", ExpectedItemCount - 1), viewModel.ModelItem.GetProperty("DisplayName"));
        }
        public void ActivityCollectionDesignerViewModel_AddToCollection_OverwriteTrue_CollectionClearedAndNewItemsAdded()
        {
            //------------Setup for test--------------------------
            const int ItemCount = 3;

            var modelItem = CreateModelItem(ItemCount);
            var viewModel = new TestActivityDesignerCollectionViewModelItemsInitialized(modelItem);

            const int ExpectedItemCount = 5;
            var source = new List<string>();
            for(var i = 0; i < ExpectedItemCount; i++)
            {
                source.Add("NewField" + i);
            }

            //------------Execute Test---------------------------
            viewModel.TestAddToCollection(source, true);

            //------------Assert Results-------------------------
            // ReSharper disable PossibleNullReferenceException
            var mic = viewModel.ModelItem.Properties[viewModel.CollectionName].Collection;
            // ReSharper restore PossibleNullReferenceException

            // Extra blank row is also added
            Assert.AreEqual(ExpectedItemCount + 1, viewModel.ItemCount);
            Assert.AreEqual(string.Format("Activity ({0})", ExpectedItemCount), viewModel.ModelItem.GetProperty("DisplayName"));

            System.Diagnostics.Debug.Assert(mic != null, "mic != null");
            for(var i = 0; i < mic.Count; i++)
            {
                var dto = (ActivityDTO)mic[i].GetCurrentValue();
                if(i == ExpectedItemCount)
                {
                    // last row is blank
                    Assert.IsTrue(dto.CanRemove());
                }
                else
                {
                    Assert.IsFalse(dto.CanRemove());
                    Assert.AreEqual("NewField" + i, dto.FieldName);
                }
            }
        }