public void Complex_current_value_can_be_set_and_the_actual_complex_object_is_set()
            {
                var entityEntry = FakeWithProps.CreateMockInternalEntityEntry().Object;
                var propEntry   = new InternalEntityPropertyEntry(entityEntry, FakeWithProps.ComplexPropertyMetadata);
                var entity      = (FakeWithProps)entityEntry.Entity;

                var complexObject = new FakeWithProps
                {
                    ValueTypeProp = -2,
                    ComplexProp   = new FakeWithProps
                    {
                        ValueTypeProp = -3
                    }
                };

                propEntry.CurrentValue = complexObject;

                Assert.Same(entity.ComplexProp, complexObject);
                Assert.Equal(-2, entity.ComplexProp.ValueTypeProp);
                Assert.Equal(-3, entity.ComplexProp.ComplexProp.ValueTypeProp);

                Assert.Equal(11, entityEntry.CurrentValues["ValueTypeProp"]);
                Assert.Equal(-2, ((InternalPropertyValues)entityEntry.CurrentValues["ComplexProp"])["ValueTypeProp"]);
                Assert.Equal(
                    -3,
                    ((InternalPropertyValues)((InternalPropertyValues)entityEntry.CurrentValues["ComplexProp"])["ComplexProp"])[
                        "ValueTypeProp"]);
            }
            public void IsModified_returns_false_if_property_is_not_in_modified_list()
            {
                var entityEntry = FakeWithProps.CreateMockInternalEntityEntry().Object;
                var propEntry   = new InternalEntityPropertyEntry(entityEntry, FakeWithProps.RefTypePropertyMetadata);

                Assert.False(propEntry.IsModified);
            }
Пример #3
0
            public void EntityEntity_can_be_obtained_from_generic_DbPropertyEntry_back_reference()
            {
                var entityEntry = new DbEntityEntry <FakeWithProps>(FakeWithProps.CreateMockInternalEntityEntry().Object);

                var backEntry = entityEntry.Property(e => e.ValueTypeProp).EntityEntry;

                Assert.Same(entityEntry.Entity, backEntry.Entity);
            }
            public void EntityEntity_can_be_obtained_from_non_generic_DbCollectionEntry_back_reference()
            {
                var entityEntry = new DbEntityEntry <FakeWithProps>(FakeWithProps.CreateMockInternalEntityEntry().Object);

                var backEntry = entityEntry.Collection("Collection").EntityEntry;

                Assert.Same(entityEntry.Entity, backEntry.Entity);
            }
Пример #5
0
            public void Parent_PropertyEntity_returns_null_for_non_nested_non_generic_DbPropertyEntry_back_reference()
            {
                var entityEntry = new DbEntityEntry <FakeWithProps>(FakeWithProps.CreateMockInternalEntityEntry().Object);

                var backEntry = entityEntry.Property("ValueTypeProp").ParentProperty;

                Assert.Null(backEntry);
            }
            public void IsModified_returns_true_if_property_is_in_modified_list()
            {
                // Note that CreateMockInternalEntry sets ValueTypeProp as modified
                var entityEntry = FakeWithProps.CreateMockInternalEntityEntry().Object;
                var propEntry   = new InternalEntityPropertyEntry(entityEntry, FakeWithProps.ValueTypePropertyMetadata);

                Assert.True(propEntry.IsModified);
            }
            public void Scalar_original_value_can_be_set()
            {
                var entityEntry = FakeWithProps.CreateMockInternalEntityEntry().Object;
                var propEntry   = new InternalEntityPropertyEntry(entityEntry, FakeWithProps.ValueTypePropertyMetadata);

                propEntry.OriginalValue = -1;

                Assert.Equal(-1, entityEntry.OriginalValues["ValueTypeProp"]);
            }
Пример #8
0
            public void Non_generic_DbMemberEntry_for_reference_can_be_converted_to_generic_version()
            {
                var memberEntry = new DbEntityEntry <FakeWithProps>(FakeWithProps.CreateMockInternalEntityEntry().Object).Member("Reference");

                var generic = memberEntry.Cast <FakeWithProps, FakeEntity>();

                Assert.IsType <DbReferenceEntry <FakeWithProps, FakeEntity> >(generic);
                Assert.Same(memberEntry.InternalMemberEntry, generic.InternalMemberEntry);
            }
            public void Current_value_for_complex_property_cannot_be_set_to_null()
            {
                var entityEntry = FakeWithProps.CreateMockInternalEntityEntry().Object;
                var propEntry   = new InternalEntityPropertyEntry(entityEntry, FakeWithProps.ComplexPropertyMetadata);

                Assert.Equal(
                    Strings.DbPropertyValues_ComplexObjectCannotBeNull("ComplexProp", "FakeWithProps"),
                    Assert.Throws <InvalidOperationException>(() => propEntry.CurrentValue = null).Message);
            }
            public void Scalar_original_value_can_be_set_to_null()
            {
                var entityEntry = FakeWithProps.CreateMockInternalEntityEntry().Object;
                var propEntry   = new InternalEntityPropertyEntry(entityEntry, FakeWithProps.RefTypePropertyMetadata);

                propEntry.OriginalValue = null;

                Assert.Null(entityEntry.OriginalValues["RefTypeProp"]);
            }
        private static void SetWrongComplexTypeTest(Action <InternalEntityPropertyEntry> setValue)
        {
            var entityEntry = FakeWithProps.CreateMockInternalEntityEntry().Object;
            var propEntry   = new InternalEntityPropertyEntry(entityEntry, FakeWithProps.ComplexPropertyMetadata);

            Assert.Equal(
                Strings.DbPropertyValues_AttemptToSetValuesFromWrongObject(typeof(Random).Name, typeof(FakeWithProps).Name),
                Assert.Throws <ArgumentException>(() => setValue(propEntry)).Message);
        }
            public void Scalar_original_value_can_be_read()
            {
                var entityEntry = FakeWithProps.CreateMockInternalEntityEntry().Object;
                var propEntry   = new InternalEntityPropertyEntry(entityEntry, FakeWithProps.ValueTypePropertyMetadata);

                var value = propEntry.OriginalValue;

                Assert.Equal(21, value);
            }
Пример #13
0
            public void Generic_DbMemberEntry_for_reference_can_be_converted_to_non_generic_version()
            {
                var memberEntry =
                    new DbEntityEntry <FakeWithProps>(FakeWithProps.CreateMockInternalEntityEntry().Object).Member <FakeEntity>("Reference");

                var nonGeneric = ImplicitConvert(memberEntry);

                Assert.IsType <DbReferenceEntry>(nonGeneric);
                Assert.Same(memberEntry.InternalMemberEntry, nonGeneric.InternalMemberEntry);
            }
Пример #14
0
            public void Non_generic_DbPropertyEntry_for_property_can_be_converted_to_generic_version_of_base_entity_type()
            {
                var memberEntry =
                    new DbEntityEntry <FakeWithProps>(FakeWithProps.CreateMockInternalEntityEntry().Object).Property("ValueTypeProp");

                var generic = memberEntry.Cast <object, int>();

                Assert.IsType <DbPropertyEntry <object, int> >(generic);
                Assert.Same(memberEntry.InternalMemberEntry, generic.InternalMemberEntry);
            }
Пример #15
0
            public void Non_generic_DbPropertyEntry_for_property_cannot_be_converted_to_generic_version_of_bad_property_type()
            {
                var memberEntry =
                    new DbEntityEntry <FakeWithProps>(FakeWithProps.CreateMockInternalEntityEntry().Object).Property("ValueTypeProp");

                Assert.Equal(
                    Strings.DbMember_BadTypeForCast(
                        typeof(DbPropertyEntry).Name, typeof(FakeWithProps).Name, typeof(short).Name, typeof(FakeWithProps).Name,
                        typeof(int).Name), Assert.Throws <InvalidCastException>(() => memberEntry.Cast <FakeWithProps, short>()).Message);
            }
Пример #16
0
            public void Non_generic_DbMemberEntry_for_reference_cannot_be_converted_to_generic_version_of_derived_property_type()
            {
                var memberEntry = new DbEntityEntry <FakeWithProps>(FakeWithProps.CreateMockInternalEntityEntry().Object).Member("Reference");

                Assert.Equal(
                    Strings.DbMember_BadTypeForCast(
                        typeof(DbMemberEntry).Name, typeof(FakeWithProps).Name, typeof(FakeDerivedEntity).Name, typeof(FakeWithProps).Name,
                        typeof(FakeEntity).Name),
                    Assert.Throws <InvalidCastException>(() => memberEntry.Cast <FakeWithProps, FakeDerivedEntity>()).Message);
            }
            public void Non_generic_DbCollectionEntry_for_collection_can_be_converted_to_generic_version_of_base_property_type()
            {
                var memberEntry =
                    new DbEntityEntry <FakeWithProps>(FakeWithProps.CreateMockInternalEntityEntry().Object).Collection("Collection");

                var generic = memberEntry.Cast <FakeWithProps, object>();

                Assert.IsType <DbCollectionEntry <FakeWithProps, object> >(generic);
                Assert.Same(memberEntry.InternalMemberEntry, generic.InternalMemberEntry);
            }
            public void Generic_DbCollectionEntry_for_collection_can_be_converted_to_non_generic_version()
            {
                var memberEntry =
                    new DbEntityEntry <FakeWithProps>(FakeWithProps.CreateMockInternalEntityEntry().Object).Collection(e => e.Collection);

                var nonGeneric = ImplicitConvert(memberEntry);

                Assert.IsType <DbCollectionEntry>(nonGeneric);
                Assert.Same(memberEntry.InternalMemberEntry, nonGeneric.InternalMemberEntry);
            }
            public void Original_value_returned_for_complex_property_is_object_instance()
            {
                var entityEntry = FakeWithProps.CreateMockInternalEntityEntry().Object;
                var propEntry   = new InternalEntityPropertyEntry(entityEntry, FakeWithProps.ComplexPropertyMetadata);

                var value = (FakeWithProps)propEntry.OriginalValue;

                Assert.Equal(22, value.ValueTypeProp);
                Assert.Equal(23, value.ComplexProp.ValueTypeProp);
            }
            public void Scalar_original_value_can_be_read_when_when_it_is_null()
            {
                var entityEntry = FakeWithProps.CreateMockInternalEntityEntry().Object;
                var propEntry   = new InternalEntityPropertyEntry(entityEntry, FakeWithProps.RefTypePropertyMetadata);

                propEntry.OriginalValue = null;
                var value = propEntry.OriginalValue;

                Assert.Null(value);
            }
        private static void SetWrongTypeTest(Action <InternalEntityPropertyEntry> setValue)
        {
            var entityEntry = FakeWithProps.CreateMockInternalEntityEntry().Object;
            var propEntry   = new InternalEntityPropertyEntry(entityEntry, FakeWithProps.RefTypePropertyMetadata);

            Assert.Equal(
                Strings.DbPropertyValues_WrongTypeForAssignment(
                    typeof(Random).Name, "RefTypeProp", typeof(string).Name, typeof(FakeWithProps).Name),
                Assert.Throws <InvalidOperationException>(() => setValue(propEntry)).Message);
        }
Пример #22
0
            public void Parent_PropertyEntity_can_be_obtained_from_nested_non_generic_DbComplexPropertyEntry_back_reference()
            {
                var mockInternalEntry = FakeWithProps.CreateMockInternalEntityEntry();
                var propEntry         =
                    new DbComplexPropertyEntry <FakeWithProps, FakeWithProps>(
                        new InternalEntityPropertyEntry(mockInternalEntry.Object, FakeWithProps.ComplexPropertyMetadata));

                var backEntry = propEntry.Property("ValueTypeProp").ParentProperty;

                Assert.Same(propEntry.Name, backEntry.Name);
            }
            public void IsModified_can_be_set_to_false_when_it_is_currently_false()
            {
                var entityEntry = FakeWithProps.CreateMockInternalEntityEntry().Object;
                var propEntry   = new InternalEntityPropertyEntry(entityEntry, FakeWithProps.RefTypePropertyMetadata);

                Assert.False(propEntry.IsModified);

                propEntry.IsModified = false;

                Assert.False(propEntry.IsModified);
            }
            public void Non_generic_DbMemberEntry_for_collection_cannot_be_converted_to_generic_version_of_base_property_type()
            {
                var memberEntry = new DbEntityEntry <FakeWithProps>(FakeWithProps.CreateMockInternalEntityEntry().Object).Member(
                    "Collection");

                // This cast fails because an ICollection<FakeEntity> is not an IColletion<object>.
                Assert.Equal(
                    Strings.DbMember_BadTypeForCast(
                        typeof(DbMemberEntry).Name, typeof(FakeWithProps).Name, typeof(ICollection <object>).Name, typeof(FakeWithProps).Name,
                        typeof(ICollection <FakeEntity>).Name),
                    Assert.Throws <InvalidCastException>(() => memberEntry.Cast <FakeWithProps, ICollection <object> >()).Message);
            }
            public void Current_value_returned_for_complex_property_is_actual_complex_object_instance()
            {
                var entityEntry = FakeWithProps.CreateMockInternalEntityEntry().Object;
                var propEntry   = new InternalEntityPropertyEntry(entityEntry, FakeWithProps.ComplexPropertyMetadata);
                var entity      = (FakeWithProps)entityEntry.Entity;

                var value = (FakeWithProps)propEntry.CurrentValue;

                Assert.Same(entity.ComplexProp, value);
                Assert.Equal(12, value.ValueTypeProp);
                Assert.Equal(13, value.ComplexProp.ValueTypeProp);
            }
            public void IsModified_can_be_set_to_true_when_it_is_currently_false()
            {
                var entityEntry    = FakeWithProps.CreateMockInternalEntityEntry().Object;
                var propEntry      = new InternalEntityPropertyEntry(entityEntry, FakeWithProps.RefTypePropertyMetadata);
                var mockStateEntry = Mock.Get(entityEntry.ObjectStateEntry);

                Assert.False(propEntry.IsModified);

                propEntry.IsModified = true;

                Assert.True(propEntry.IsModified);
                mockStateEntry.Verify(e => e.SetModifiedProperty("RefTypeProp"));
            }
            public void Current_value_returned_for_complex_property_can_be_null()
            {
                var properties = new Dictionary <string, object>
                {
                    { "ComplexProp", null }
                };
                var currentValues = new TestInternalPropertyValues <FakeWithProps>(properties, new[] { "ComplexProp" });
                var entityEntry   = FakeWithProps.CreateMockInternalEntityEntry(currentValues).Object;
                var propEntry     = new InternalEntityPropertyEntry(entityEntry, FakeWithProps.ComplexPropertyMetadata);

                var value = propEntry.CurrentValue;

                Assert.Null(value);
            }
            public void Current_value_for_complex_property_cannot_be_set_to_null_even_if_it_is_already_null()
            {
                var properties = new Dictionary <string, object>
                {
                    { "ComplexProp", null }
                };
                var currentValues = new TestInternalPropertyValues <FakeWithProps>(properties, new[] { "ComplexProp" });
                var entityEntry   = FakeWithProps.CreateMockInternalEntityEntry(currentValues).Object;
                var propEntry     = new InternalEntityPropertyEntry(entityEntry, FakeWithProps.ComplexPropertyMetadata);

                Assert.Equal(
                    Strings.DbPropertyValues_ComplexObjectCannotBeNull("ComplexProp", "FakeWithProps"),
                    Assert.Throws <InvalidOperationException>(() => propEntry.CurrentValue = null).Message);
            }
            public void Current_value_for_complex_property_cannot_be_set_to_instance_with_nested_null_complex_property()
            {
                var entityEntry = FakeWithProps.CreateMockInternalEntityEntry().Object;
                var propEntry   = new InternalEntityPropertyEntry(entityEntry, FakeWithProps.ComplexPropertyMetadata);

                var complexObject = new FakeWithProps
                {
                    ValueTypeProp = -2,
                    ComplexProp   = null
                };

                Assert.Equal(
                    Strings.DbPropertyValues_ComplexObjectCannotBeNull("ComplexProp", typeof(FakeWithProps).Name),
                    Assert.Throws <InvalidOperationException>(() => propEntry.CurrentValue = complexObject).Message);
            }
Пример #30
0
            public void Generic_DbCollectionEntry_throws_OperationCanceledException_if_task_is_cancelled()
            {
                var entityEntry = new DbEntityEntry <FakeWithProps>(FakeWithProps.CreateMockInternalEntityEntry().Object);

                var mockWrapper = new Mock <IEntityWrapper>();

                mockWrapper.Setup(w => w.Entity).Returns(new object());

                ((RelatedEnd)entityEntry
                 .Reference(e => e.Reference).InternalMemberEntry.InternalEntityEntry.GetRelatedEnd("Reference"))
                .SetWrappedOwner(mockWrapper.Object);

                Assert.Throws <OperationCanceledException>(
                    () => entityEntry.Reference(e => e.Reference).LoadAsync(new CancellationToken(canceled: true))
                    .GetAwaiter().GetResult());
            }