public void OnBaseEntityTypeSet_calls_apply_on_conventions_in_order(bool useBuilder)
        {
            var conventions = new ConventionSet();

            InternalEntityTypeBuilder entityTypeBuilder = null;
            var convention = new Mock <IBaseTypeConvention>();

            convention.Setup(c => c.Apply(It.IsAny <InternalEntityTypeBuilder>(), It.IsAny <EntityType>()))
            .Returns <InternalEntityTypeBuilder, EntityType>((b, t) =>
            {
                Assert.NotNull(b);
                Assert.Null(t);
                entityTypeBuilder = b;
                return(true);
            });
            conventions.BaseEntityTypeSetConventions.Add(convention.Object);

            var nullConvention = new Mock <IBaseTypeConvention>();

            nullConvention.Setup(c => c.Apply(It.IsAny <InternalEntityTypeBuilder>(), It.IsAny <EntityType>()))
            .Returns <InternalEntityTypeBuilder, EntityType>((b, t) =>
            {
                Assert.Null(t);
                Assert.Same(entityTypeBuilder, b);
                return(false);
            });
            conventions.BaseEntityTypeSetConventions.Add(nullConvention.Object);

            var extraConvention = new Mock <IBaseTypeConvention>();

            extraConvention.Setup(c => c.Apply(It.IsAny <InternalEntityTypeBuilder>(), It.IsAny <EntityType>()))
            .Returns <InternalEntityTypeBuilder, EntityType>((b, t) =>
            {
                Assert.False(true);
                return(false);
            });
            conventions.BaseEntityTypeSetConventions.Add(extraConvention.Object);

            var builder = new InternalModelBuilder(new Model(conventions))
                          .Entity(typeof(SpecialOrder), ConfigurationSource.Convention);

            if (useBuilder)
            {
                Assert.NotNull(builder.HasBaseType(typeof(Order), ConfigurationSource.Convention));
            }
            else
            {
                builder.Metadata.HasBaseType(builder.Metadata.Model.AddEntityType(typeof(Order)), ConfigurationSource.Convention);
            }

            Assert.NotNull(entityTypeBuilder);
        }
        public void OnBaseEntityTypeSet_calls_apply_on_conventions_in_order(bool useBuilder)
        {
            var conventions = new ConventionSet();

            InternalEntityTypeBuilder entityTypeBuilder = null;
            var convention = new Mock<IBaseTypeConvention>();
            convention.Setup(c => c.Apply(It.IsAny<InternalEntityTypeBuilder>(), It.IsAny<EntityType>()))
                .Returns<InternalEntityTypeBuilder, EntityType>((b, t) =>
                    {
                        Assert.NotNull(b);
                        Assert.Null(t);
                        entityTypeBuilder = b;
                        return true;
                    });
            conventions.BaseEntityTypeSetConventions.Add(convention.Object);

            var nullConvention = new Mock<IBaseTypeConvention>();
            nullConvention.Setup(c => c.Apply(It.IsAny<InternalEntityTypeBuilder>(), It.IsAny<EntityType>()))
                .Returns<InternalEntityTypeBuilder, EntityType>((b, t) =>
                    {
                        Assert.Null(t);
                        Assert.Same(entityTypeBuilder, b);
                        return false;
                    });
            conventions.BaseEntityTypeSetConventions.Add(nullConvention.Object);

            var extraConvention = new Mock<IBaseTypeConvention>();
            extraConvention.Setup(c => c.Apply(It.IsAny<InternalEntityTypeBuilder>(), It.IsAny<EntityType>()))
                .Returns<InternalEntityTypeBuilder, EntityType>((b, t) =>
                    {
                        Assert.False(true);
                        return false;
                    });
            conventions.BaseEntityTypeSetConventions.Add(extraConvention.Object);

            var builder = new InternalModelBuilder(new Model(conventions))
                .Entity(typeof(SpecialOrder), ConfigurationSource.Convention);

            if (useBuilder)
            {
                Assert.NotNull(builder.HasBaseType(typeof(Order), ConfigurationSource.Convention));
            }
            else
            {
                builder.Metadata.HasBaseType(builder.Metadata.Model.AddEntityType(typeof(Order)), ConfigurationSource.Convention);
            }

            Assert.NotNull(entityTypeBuilder);
        }