Skip to content

Commit

Permalink
Add more tests
Browse files Browse the repository at this point in the history
  • Loading branch information
smitpatel committed Jul 8, 2020
1 parent 20acb3c commit 254c3e7
Show file tree
Hide file tree
Showing 11 changed files with 254 additions and 83 deletions.
13 changes: 8 additions & 5 deletions src/EFCore/Metadata/Builders/EntityTypeBuilder`.cs
Original file line number Diff line number Diff line change
Expand Up @@ -853,11 +853,14 @@ private OwnedNavigationBuilder<TEntity, TRelatedEntity> OwnsManyBuilder<TRelated
InternalForeignKeyBuilder relationship;
using (var batch = Builder.Metadata.Model.ConventionDispatcher.DelayConventions())
{
relationship = navigation.MemberInfo == null
? targetTypeName == null
relationship = targetTypeName == null
? navigation.MemberInfo == null
? Builder.HasOwnership(typeof(TRelatedEntity), navigation.Name, ConfigurationSource.Explicit)
: Builder.HasOwnership(targetTypeName, typeof(TRelatedEntity), navigation.Name, ConfigurationSource.Explicit)
: Builder.HasOwnership(typeof(TRelatedEntity), (PropertyInfo)navigation.MemberInfo, ConfigurationSource.Explicit);
: Builder.HasOwnership(typeof(TRelatedEntity), navigation.MemberInfo, ConfigurationSource.Explicit)
: navigation.MemberInfo == null
? Builder.HasOwnership(targetTypeName, typeof(TRelatedEntity), navigation.Name, ConfigurationSource.Explicit)
: Builder.HasOwnership(targetTypeName, typeof(TRelatedEntity), navigation.MemberInfo, ConfigurationSource.Explicit);

relationship.IsUnique(false, ConfigurationSource.Explicit);
relationship = (InternalForeignKeyBuilder)batch.Run(relationship.Metadata).Builder;
}
Expand Down Expand Up @@ -1035,7 +1038,7 @@ public virtual ReferenceNavigationBuilder<TEntity, TRelatedEntity> HasOne<TRelat
Check.NotEmpty(targetTypeName, nameof(targetTypeName));

var navigationMember = navigationExpression?.GetMemberAccess();
var relatedEntityType = FindRelatedEntityType(typeof(TRelatedEntity), navigationMember?.GetSimpleMemberName());
var relatedEntityType = FindRelatedEntityType(targetTypeName, typeof(TRelatedEntity), navigationMember?.GetSimpleMemberName());
var foreignKey = HasOneBuilder(
MemberIdentity.Create(navigationMember), relatedEntityType);

Expand Down
4 changes: 3 additions & 1 deletion src/EFCore/Metadata/Builders/OwnedNavigationBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -526,7 +526,9 @@ private OwnedNavigationBuilder OwnsOneBuilder(in TypeIdentity ownedType, Type sh
using (DependentEntityType.Model.ConventionDispatcher.DelayConventions())
{
relationship = ownedType.Type == null
? DependentEntityType.Builder.HasOwnership(ownedType.Name, navigationName, ConfigurationSource.Explicit)
? sharedTypeClrType == null
? DependentEntityType.Builder.HasOwnership(ownedType.Name, navigationName, ConfigurationSource.Explicit)
: DependentEntityType.Builder.HasOwnership(ownedType.Name, sharedTypeClrType, navigationName, ConfigurationSource.Explicit)
: DependentEntityType.Builder.HasOwnership(ownedType.Type, navigationName, ConfigurationSource.Explicit);
relationship.IsUnique(true, ConfigurationSource.Explicit);
}
Expand Down
28 changes: 16 additions & 12 deletions src/EFCore/Metadata/Builders/OwnedNavigationBuilder`.cs
Original file line number Diff line number Diff line change
Expand Up @@ -512,12 +512,14 @@ private OwnedNavigationBuilder<TDependentEntity, TNewDependentEntity> OwnsOneBui
InternalForeignKeyBuilder relationship;
using (var batch = DependentEntityType.Model.ConventionDispatcher.DelayConventions())
{
relationship = navigation.MemberInfo == null
? targetTypeName == null
? DependentEntityType.Builder.HasOwnership(typeof(TNewDependentEntity), navigation.Name, ConfigurationSource.Explicit)
: DependentEntityType.Builder.HasOwnership(targetTypeName, typeof(TNewDependentEntity), navigation.Name, ConfigurationSource.Explicit)
: DependentEntityType.Builder.HasOwnership(
typeof(TNewDependentEntity), (PropertyInfo)navigation.MemberInfo, ConfigurationSource.Explicit);
relationship = targetTypeName == null
? navigation.MemberInfo == null
? DependentEntityType.Builder.HasOwnership(typeof(TNewDependentEntity), navigation.Name, ConfigurationSource.Explicit)
: DependentEntityType.Builder.HasOwnership(typeof(TNewDependentEntity), navigation.MemberInfo, ConfigurationSource.Explicit)
: navigation.MemberInfo == null
? DependentEntityType.Builder.HasOwnership(targetTypeName, typeof(TNewDependentEntity), navigation.Name, ConfigurationSource.Explicit)
: DependentEntityType.Builder.HasOwnership(targetTypeName, typeof(TNewDependentEntity), navigation.MemberInfo, ConfigurationSource.Explicit);

relationship.IsUnique(true, ConfigurationSource.Explicit);
relationship = (InternalForeignKeyBuilder)batch.Run(relationship.Metadata).Builder;
}
Expand Down Expand Up @@ -812,12 +814,14 @@ private OwnedNavigationBuilder<TDependentEntity, TNewRelatedEntity> OwnsManyBuil
InternalForeignKeyBuilder relationship;
using (var batch = DependentEntityType.Model.ConventionDispatcher.DelayConventions())
{
relationship = navigation.MemberInfo == null
? targetTypeName == null
? DependentEntityType.Builder.HasOwnership(typeof(TNewRelatedEntity), navigation.Name, ConfigurationSource.Explicit)
: DependentEntityType.Builder.HasOwnership(targetTypeName, typeof(TNewRelatedEntity), navigation.Name, ConfigurationSource.Explicit)
: DependentEntityType.Builder.HasOwnership(
typeof(TNewRelatedEntity), (PropertyInfo)navigation.MemberInfo, ConfigurationSource.Explicit);
relationship = targetTypeName == null
? navigation.MemberInfo == null
? DependentEntityType.Builder.HasOwnership(typeof(TNewRelatedEntity), navigation.Name, ConfigurationSource.Explicit)
: DependentEntityType.Builder.HasOwnership(typeof(TNewRelatedEntity), navigation.MemberInfo, ConfigurationSource.Explicit)
: navigation.MemberInfo == null
? DependentEntityType.Builder.HasOwnership(targetTypeName, typeof(TNewRelatedEntity), navigation.Name, ConfigurationSource.Explicit)
: DependentEntityType.Builder.HasOwnership(targetTypeName, typeof(TNewRelatedEntity), navigation.MemberInfo, ConfigurationSource.Explicit);

relationship.IsUnique(false, ConfigurationSource.Explicit);
relationship = (InternalForeignKeyBuilder)batch.Run(relationship.Metadata).Builder;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,27 +171,6 @@ public virtual void No_alternate_key_is_created_if_primary_key_contains_id_and_p
Assert.Empty(entity.GetKeys().Where(k => k != entity.FindPrimaryKey()));
}

public override void Can_add_shared_type_entity_type()
{
var modelBuilder = CreateModelBuilder();
modelBuilder.Entity<Dictionary<string, object>>("Shared1");

modelBuilder.Entity<Dictionary<string, object>>("Shared2", b => b.IndexerProperty<int>("Id"));

var model = modelBuilder.Model;
Assert.Equal(2, model.GetEntityTypes().Count());

var shared1 = modelBuilder.Model.FindEntityType("Shared1");
Assert.NotNull(shared1);
Assert.True(shared1.HasSharedClrType);
Assert.Equal(new [] { "Discriminator", "__id", "__jObject" }, shared1.GetProperties().Select(e => e.Name));

var shared2 = modelBuilder.Model.FindEntityType("Shared2");
Assert.NotNull(shared2);
Assert.True(shared2.HasSharedClrType);
Assert.Equal(new[] { "Id", "Discriminator", "__id", "__jObject" }, shared2.GetProperties().Select(e => e.Name));
}

protected override TestModelBuilder CreateModelBuilder()
=> CreateTestModelBuilder(CosmosTestHelpers.Instance);
}
Expand Down
16 changes: 16 additions & 0 deletions test/EFCore.Tests/ModelBuilding/ManyToOneTestBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2002,6 +2002,22 @@ public virtual void Access_mode_can_be_overridden_at_entity_and_navigation_prope
Assert.Equal(PropertyAccessMode.Field, dependent.Metadata.GetPropertyAccessMode());
Assert.Equal(PropertyAccessMode.Property, dependent.Metadata.FindNavigation("OneToManyPrincipal").GetPropertyAccessMode());
}

[ConditionalFact]
public virtual void Navigation_to_shared_type()
{
var modelBuilder = CreateModelBuilder();

modelBuilder.Entity<SharedHolderAlpha>()
.HasMany("Shared1", e => e.SharedCollection)
.WithOne();

modelBuilder.Entity<SharedHolderBeta>()
.HasMany("Shared2", e => e.SharedCollection)
.WithOne();

Assert.Equal(2, modelBuilder.Model.GetEntityTypes().Where(e => e.HasSharedClrType).Count());
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,21 @@ public override void OwnedType_can_derive_from_Collection()
public override void Can_configure_owned_type_collection_with_one_call_afterwards()
{
}

//Shadow navigations not supported #3864
public override void Can_use_shared_type_entity_type_with_owns_one_inside_owned_entity()
{
}

//Shadow navigations not supported #3864
public override void Can_use_shared_type_entity_type_with_owns_many_inside_owned_entity()
{
}

//Shadow navigations not supported #3864
public override void Can_use_shared_type_entity_type_with_has_one_inside_owned_entity()
{
}
}

public class NonGenericStringOneToManyType : OneToManyTestBase
Expand Down
4 changes: 2 additions & 2 deletions test/EFCore.Tests/ModelBuilding/NonRelationshipTestBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1555,12 +1555,12 @@ public virtual void Can_add_shared_type_entity_type()
var shared1 = modelBuilder.Model.FindEntityType("Shared1");
Assert.NotNull(shared1);
Assert.True(shared1.HasSharedClrType);
Assert.Empty(shared1.GetProperties());
Assert.Null(shared1.FindProperty("Id"));

var shared2 = modelBuilder.Model.FindEntityType("Shared2");
Assert.NotNull(shared2);
Assert.True(shared2.HasSharedClrType);
Assert.Equal("Id", Assert.Single(shared2.GetProperties()).Name);
Assert.NotNull(shared2.FindProperty("Id"));
}
}
}
Expand Down
16 changes: 16 additions & 0 deletions test/EFCore.Tests/ModelBuilding/OneToManyTestBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2577,6 +2577,22 @@ public virtual void Attempt_to_configure_Navigation_property_which_is_actually_a
.UsePropertyAccessMode(PropertyAccessMode.Property)
).Message);
}

[ConditionalFact]
public virtual void Navigation_to_shared_type()
{
var modelBuilder = CreateModelBuilder();

modelBuilder.Entity<SharedHolderAlpha>()
.HasOne<SharedTypeEntityType>("Shared1", e => e.SharedReference)
.WithMany();

modelBuilder.Entity<SharedHolderBeta>()
.HasOne<SharedTypeEntityType>("Shared2", e => e.SharedReference)
.WithMany();

Assert.Equal(2, modelBuilder.Model.GetEntityTypes().Where(e => e.HasSharedClrType).Count());
}
}
}
}
16 changes: 16 additions & 0 deletions test/EFCore.Tests/ModelBuilding/OneToOneTestBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4056,6 +4056,22 @@ public virtual void Navigation_properties_can_set_access_mode_using_navigation_n
Assert.Equal(PropertyAccessMode.Field, principal.FindNavigation("Dependent").GetPropertyAccessMode());
Assert.Equal(PropertyAccessMode.Property, dependent.FindNavigation("OneToOnePrincipal").GetPropertyAccessMode());
}

[ConditionalFact]
public virtual void Navigation_to_shared_type()
{
var modelBuilder = CreateModelBuilder();

modelBuilder.Entity<SharedHolderAlpha>()
.HasOne<SharedTypeEntityType>("Shared1", e => e.SharedReference)
.WithOne();

modelBuilder.Entity<SharedHolderBeta>()
.HasOne<SharedTypeEntityType>("Shared2", e => e.SharedReference)
.WithOne();

Assert.Equal(2, modelBuilder.Model.GetEntityTypes().Where(e => e.HasSharedClrType).Count());
}
}
}
}
Loading

0 comments on commit 254c3e7

Please sign in to comment.