public void WhenForceClassRelationToIncompatibleTypeThenThrows()
        {
            var mapping = new HbmManyToMany();
            var mapper = new ManyToManyMapper(typeof(MyClass), mapping, null);

            Executing.This(() => mapper.Class(typeof(Whatever))).Should().Throw<ArgumentOutOfRangeException>();
        }
 public void CanAssignEntityName()
 {
     var mapping = new HbmManyToMany();
     var mapper = new ManyToManyMapper(typeof(MyClass), mapping, null);
     mapper.EntityName("myname");
     mapping.EntityName.Should().Be("myname");
 }
 public void CanAssignNotFoundMode()
 {
     var mapping = new HbmManyToMany();
     var mapper = new ManyToManyMapper(typeof(MyClass), mapping, null);
     mapper.NotFound(NotFoundMode.Ignore);
     mapping.NotFoundMode.Should().Be(HbmNotFoundMode.Ignore);
 }
 public void SettingColumnOverridesFormula()
 {
     var mapping = new HbmManyToMany();
     var mapper = new ManyToManyMapper(typeof(MyClass), mapping, null);
     mapper.Formula("formula");
     mapper.Column(cm => cm.Unique(true));
     mapping.formula.Should().Be.Null();
 }
        public void AfterSetMultiColumnsCantSetSimpleColumn()
        {
            var mapping = new HbmManyToMany();
            var mapper = new ManyToManyMapper(typeof(MyClass), mapping, null);
            mapper.Columns(cm => cm.Length(50), cm => cm.SqlType("VARCHAR(10)"));

            mapper.Executing(x => x.Column(cm => cm.Length(50))).Throws<ConfOrm.MappingException>();
        }
        public void CanSetFormula()
        {
            var mapping = new HbmManyToMany();
            var mapper = new ManyToManyMapper(typeof(MyClass), mapping, null);

            mapper.Formula("SomeFormula");
            mapping.formula.Should().Be("SomeFormula");
        }
 public void SettingColumnPlainValuesOverridesFormula()
 {
     var mapping = new HbmManyToMany();
     var mapper = new ManyToManyMapper(typeof(MyClass), mapping, null);
     mapper.Formula("formula");
     mapper.Column("colName");
     mapping.formula.Should().Be.Null();
     mapping.column.Should().Be("colName");
 }
        public void CanForceClassRelation()
        {
            var mapping = new HbmManyToMany();
            var mapper = new ManyToManyMapper(typeof(MyClass), mapping, null);

            mapper.Class(typeof(MyClass));

            mapping.Class.Should().Contain("MyClass").And.Not.Contain("IMyInterface");
        }
 public void Should_get_the_correct_value_from_column_if_not_null()
 {
     const string expected = "FirstName";
     HbmManyToMany property = new HbmManyToMany
         {
             column = expected
         };
     string result = property.GetColumnName();
     result.ShouldBeEqualTo(expected);
 }
 public void SettingFormulaOverridesColumnNodes()
 {
     var mapping = new HbmManyToMany();
     var mapper = new ManyToManyMapper(typeof(MyClass), mapping, null);
     mapper.Column(cm => cm.SqlType("VARCHAR(80)"));
     mapper.Formula("formula");
     mapping.formula.Should().Be("formula");
     mapping.column.Should().Be(null);
     mapping.Items.Should().Be.Null();
 }
 public void WhenSetFormulaThenResetColumn()
 {
     var mapping = new HbmManyToMany();
     var mapper = new ManyToManyMapper(typeof(MyClass), mapping, null);
     mapper.Column("MyColumn");
     mapper.Formula("SomeFormula");
     mapping.formula.Should().Be("SomeFormula");
     mapping.column.Should().Be.Null();
     mapping.Items.Should().Be.Null();
 }
 public void Should_get_the_correct_value()
 {
     const string expected = "System.String";
     HbmManyToMany component = new HbmManyToMany
         {
             @class = expected + ", mscorlib"
         };
     string result = component.GetReturnType();
     result.ShouldBeEqualTo(expected);
 }
        public void CanSetLazyness()
        {
            var mapping = new HbmManyToMany();
            var mapper = new ManyToManyMapper(typeof(MyClass), mapping, null);

            mapper.Lazy(LazyRelation.NoProxy);
            mapping.lazy.Should().Be(HbmRestrictedLaziness.False);

            mapper.Lazy(LazyRelation.NoLazy);
            mapping.lazy.Should().Be(HbmRestrictedLaziness.False);

            mapper.Lazy(LazyRelation.Proxy);
            mapping.lazy.Should().Be(HbmRestrictedLaziness.Proxy);
        }
		public ManyToManyMapper(System.Type elementType, HbmManyToMany manyToMany, HbmMapping mapDoc)
		{
			if (elementType == null)
			{
				throw new ArgumentNullException("elementType");
			}
			if (manyToMany == null)
			{
				throw new ArgumentNullException("manyToMany");
			}
			this.elementType = elementType;
			this.manyToMany = manyToMany;
			this.mapDoc = mapDoc;
		}
		private void BindManyToManySubelements(HbmManyToMany manyToManyMapping, Mapping.Collection collection)
		{
			// Bind the where
			string whereCondition = string.IsNullOrEmpty(manyToManyMapping.where) ? null : manyToManyMapping.where;
			collection.ManyToManyWhere = whereCondition;

			// Bind the order-by
			string orderFragment = string.IsNullOrEmpty(manyToManyMapping.orderby) ? null : manyToManyMapping.orderby;
			collection.ManyToManyOrdering = orderFragment;

			// Bind the filters
			var filters = manyToManyMapping.filter;
			var hasFilters = filters != null && filters.Length > 0;

			if ((hasFilters || whereCondition != null) && collection.FetchMode == FetchMode.Join
				&& collection.Element.FetchMode != FetchMode.Join)
			{
				throw new MappingException(
					string.Format(
						"many-to-many defining filter or where without join fetching not valid within collection using join fetching [{0}]",
						collection.Role));

			}

			new FiltersBinder(collection, Mappings).Bind(filters, collection.AddManyToManyFilter);
		}
 public void WhenSetFormulaWithMultipleLinesThenSetFormulaNode()
 {
     var mapping = new HbmManyToMany();
     var mapper = new ManyToManyMapper(typeof(MyClass), mapping, null);
     var formula = @"Line1
     Line2";
     mapper.Formula(formula);
     mapping.formula.Should().Be.Null();
     mapping.Items.FirstOrDefault().Should().Not.Be.Null().And.Be.OfType<HbmFormula>();
     var hbmFormula = (HbmFormula)(mapping.Items.First());
     hbmFormula.Text.Length.Should().Be(2);
     hbmFormula.Text[0].Should().Be("Line1");
     hbmFormula.Text[1].Should().Be("Line2");
 }
		private void BindManyToMany(HbmManyToMany manyToManyMapping, Mapping.Collection model)
		{
			var manyToMany = new ManyToOne(model.CollectionTable);
			model.Element = manyToMany;
			new ValuePropertyBinder(manyToMany, Mappings).BindSimpleValue(manyToManyMapping,
																	   Mapping.Collection.DefaultElementColumnName, false);
			InitOuterJoinFetchSetting(manyToManyMapping, manyToMany);
			var restrictedLaziness = manyToManyMapping.lazySpecified ? manyToManyMapping.lazy : (HbmRestrictedLaziness?) null;
			InitLaziness(restrictedLaziness, manyToMany, true);

			if(!string.IsNullOrEmpty(manyToManyMapping.propertyref))
			{
				manyToMany.ReferencedPropertyName = manyToManyMapping.propertyref;
			}

			manyToMany.ReferencedEntityName = GetEntityName(manyToManyMapping, mappings);

			manyToMany.IsIgnoreNotFound = manyToManyMapping.NotFoundMode == HbmNotFoundMode.Ignore;

			if(!string.IsNullOrEmpty(manyToManyMapping.foreignkey))
			{
				manyToMany.ForeignKeyName = manyToManyMapping.foreignkey;
			}
			BindManyToManySubelements(manyToManyMapping, model);
		}
 public void WhenSetMultiColumnsValuesThenAutoassignColumnNames()
 {
     var mapping = new HbmManyToMany();
     var mapper = new ManyToManyMapper(typeof(MyClass), mapping, null);
     mapper.Columns(cm => cm.Length(50), cm => cm.SqlType("VARCHAR(10)"));
     mapping.Columns.Should().Have.Count.EqualTo(2);
     mapping.Columns.All(cm => cm.name.Satisfy(n => !string.IsNullOrEmpty(n)));
 }
 public void WhenSetMultiColumnsValuesThenAddColumns()
 {
     var mapping = new HbmManyToMany();
     var mapper = new ManyToManyMapper(typeof(MyClass), mapping, null);
     mapper.Columns(cm =>
     {
         cm.Name("column1");
         cm.Length(50);
     }, cm =>
     {
         cm.Name("column2");
         cm.SqlType("VARCHAR(10)");
     });
     mapping.Columns.Should().Have.Count.EqualTo(2);
 }
 public void WhenSetColumnValuesThenAddColumnTag()
 {
     var mapping = new HbmManyToMany();
     var mapper = new ManyToManyMapper(typeof(MyClass), mapping, null);
     mapper.Column(cm =>
     {
         cm.SqlType("VARCHAR(3)");
         cm.NotNullable(true);
     });
     mapping.Columns.Should().Not.Be.Null();
     mapping.Columns.Should().Have.Count.EqualTo(1);
 }
		protected void InitOuterJoinFetchSetting(HbmManyToMany manyToMany, IFetchable model)
		{
			FetchMode fetchStyle;
			bool lazy = true;

			if (!manyToMany.fetchSpecified)
			{
				if (!manyToMany.outerjoinSpecified)
				{
					//NOTE SPECIAL CASE:
					// default to join and non-lazy for the "second join"
					// of the many-to-many
					lazy = false;
					fetchStyle = FetchMode.Join;
				}
				else
				{
					fetchStyle = GetFetchStyle(manyToMany.outerjoin);
				}
			}
			else
			{
				fetchStyle = GetFetchStyle(manyToMany.fetch);
			}

			model.FetchMode = fetchStyle;
			model.IsLazy = lazy;
		}
        public void WhenSetDifferentColumnNameThenSetTheName()
        {
            var mapping = new HbmManyToMany();
            var mapper = new ManyToManyMapper(typeof(MyClass), mapping, null);
            mapper.Column(cm => cm.Name("pepe"));

            mapping.Columns.Should().Have.Count.EqualTo(1);
            mapping.Columns.Single().name.Should().Be("pepe");
        }
 public void WhenSetFormulaWithNullThenDoNothing()
 {
     var mapping = new HbmManyToMany();
     var mapper = new ManyToManyMapper(typeof(MyClass), mapping, null);
     mapper.Column("MyColumn");
     mapper.Formula(null);
     mapping.formula.Should().Be.Null();
     mapping.column.Should().Not.Be.Null();
 }
		public void ManyToMany(Action<IManyToManyMapper> mapping)
		{
			var hbm = new HbmManyToMany {@class = collectionElementType.GetShortClassName(mapDoc)};
			mapping(new ManyToManyMapper(collectionElementType, hbm, mapDoc));
			elementRelationshipAssing(hbm);
		}
		public void BindSimpleValue(HbmManyToMany manyToManyMapping, string propertyPath, bool isNullable)
		{
			var formulas = manyToManyMapping.Formulas.ToArray();
			if (formulas.Length > 0)
			{
				BindFormulas(formulas);
			}
			else
			{
				new ColumnsBinder(value, Mappings).Bind(manyToManyMapping.Columns, isNullable,
																								() =>
																								new HbmColumn
																								{
																									name = mappings.NamingStrategy.PropertyToColumnName(propertyPath),
																									unique = manyToManyMapping.unique,
																									uniqueSpecified = true
																								});
			}
		}
 public void WhenSetDefaultColumnNameThenDoesNotSetTheName()
 {
     var mapping = new HbmManyToMany();
     var mapper = new ManyToManyMapper(typeof(MyClass), mapping, null);
     mapper.Column(cm => cm.Name("MyClass"));
     mapping.column.Should().Be.Null();
     mapping.Columns.Should().Be.Empty();
 }