private void Calls_collection_override_passing_in_null(MergeOption mergeOption)
            {
                var entityCollectionMock = MockHelper.CreateMockEntityCollection <object>(null);

                var timesLoadCalled = 0;

                entityCollectionMock.Setup(m => m.Load(It.IsAny <List <IEntityWrapper> >(), It.IsAny <MergeOption>()))
                .Callback(
                    (IEnumerable <object> actualCollection, MergeOption actualMergeOption) =>
                {
                    timesLoadCalled++;
                    Assert.Equal(null, actualCollection);
                    Assert.Equal(mergeOption, actualMergeOption);
                });

                var timesCheckOwnerNullCalled = 0;

                entityCollectionMock.Setup(m => m.CheckOwnerNull())
                .Callback(() => { timesCheckOwnerNullCalled++; });

                entityCollectionMock.Object.Load(mergeOption);

                entityCollectionMock.Verify(m => m.Load(It.IsAny <List <IEntityWrapper> >(), It.IsAny <MergeOption>()));

                Assert.True(1 == timesLoadCalled, "Expected Load to be called once for MergeOption." + mergeOption);
                Assert.True(1 == timesCheckOwnerNullCalled, "Expected CheckOwnerNull to be called once for MergeOption." + mergeOption);
            }
            private void Calls_merge_passing_in_expected_values(
                List <IEntityWrapper> collection, MergeOption mergeOption, object refreshedValue)
            {
                var entityCollectionMock = MockHelper.CreateMockEntityCollection(refreshedValue);

                var timesMergeCalled = 0;

                if (collection == null)
                {
                    entityCollectionMock.Setup(m => m.Merge(It.IsAny <IEnumerable <object> >(), It.IsAny <MergeOption>(), true))
                    .Callback(
                        (IEnumerable <object> actualCollection, MergeOption actualMergeOption, bool setIsLoaded) =>
                    {
                        timesMergeCalled++;

                        Assert.Equal(
                            refreshedValue == null ? Enumerable.Empty <object>() : new[] { refreshedValue }, actualCollection);
                        Assert.Equal(mergeOption, actualMergeOption);
                    });
                }
                else
                {
                    entityCollectionMock.Setup(m => m.Merge <object>(It.IsAny <List <IEntityWrapper> >(), It.IsAny <MergeOption>(), true))
                    .Callback(
                        (List <IEntityWrapper> actualCollection, MergeOption actualMergeOption, bool setIsLoaded) =>
                    {
                        timesMergeCalled++;

                        Assert.Equal(collection, actualCollection);
                        Assert.Equal(mergeOption, actualMergeOption);
                    });
                }

                entityCollectionMock.Object.Load(collection, mergeOption);

                Assert.True(
                    1 == timesMergeCalled,
                    string.Format(
                        "Expected Merge to be called once for MergeOption.{0}, {1} collection and {2} refreshed value.",
                        mergeOption,
                        collection == null ? "null" : "not null",
                        refreshedValue == null ? "null" : "not null"));
            }
 public void Remove_throws_for_null_argument()
 {
     Assert.Throws <ArgumentNullException>(
         () => MockHelper.CreateMockEntityCollection <object>(null).Object.Remove(null));
 }
 public void Add_IEntityWithRelationships_throws_for_null_argument()
 {
     Assert.Throws <ArgumentNullException>(
         () => ((IRelatedEnd)MockHelper.CreateMockEntityCollection <string>(null).Object).Add(null));
 }
 public void Add_generic_throws_for_null_argument()
 {
     Assert.Throws <ArgumentNullException>(
         () => MockHelper.CreateMockEntityCollection <string>(null).Object.Add(null));
 }