public void RefUpdateFields_ShouldNotAffectSpecificFields()
        {
            #region Assert

            const string RefSystemName = "Cr1";

            var fieldDefinition = new ReferenceFieldDefinition { SystemName = RefSystemName };
            fieldDefinition.DisplayFields.Add(new ReferenceDisplayFieldDefinition() { Alias = Field1Name, SystemName = Field1Name });

            var queryGenerator = new SearchQueryGeneratorTest { RootTable = new TableDefinition("Test") };

            AddReferencedFields(queryGenerator);
            AddNonReferencedFields(queryGenerator);

            #endregion Assert

            // Act
            queryGenerator.RefUpdateFields(fieldDefinition);

            // Assert
            var fields = queryGenerator.RootTable.GetFields();
            Assert.IsTrue(fields.First(f => f.SystemName.Equals(Constants.IdColumnName)).IncludeInResult);
            Assert.IsTrue(fields.First(f => f.SystemName.Equals(Constants.DerivedProcessColumnName)).IncludeInResult);
        }
        public void RefUpdateFields_ShouldIncludeInResultAllFieldsFromDisplayFieldsCollection()
        {
            //Arrange
            var queryGenerator = new SearchQueryGeneratorTest { RootTable = new TableDefinition("Test") };

            var crField = new ReferenceFieldDefinition { SystemName = CrField1Name, Alias = CrField1Name, IncludeInResult = false };
            var mcrField = new ReferenceFieldDefinition { SystemName = McrField1Name, Alias = McrField1Name, IncludeInResult = false };
            var rcrField = new ReferenceFieldDefinition { SystemName = RcrField1Name, Alias = RcrField1Name, IncludeInResult = false };

            queryGenerator.RootTable.AddField(Field1Name, ColumnTypes.String, includeInResult: false);
            queryGenerator.SingleCrossReferences.Add(crField);
            queryGenerator.MultiCrossReferences.Add(mcrField);
            queryGenerator.ReverseCrossReferences.Add(rcrField);

            var fieldDefinition = new ReferenceFieldDefinition();
            fieldDefinition.DisplayFields.Add(new ReferenceDisplayFieldDefinition { Alias = Field1Name, SystemName = Field1Name });
            fieldDefinition.DisplayFields.Add(new ReferenceDisplayFieldDefinition { Alias = CrField1Name, SystemName = CrField1Name });
            fieldDefinition.DisplayFields.Add(new ReferenceDisplayFieldDefinition { Alias = McrField1Name, SystemName = McrField1Name });
            fieldDefinition.DisplayFields.Add(new ReferenceDisplayFieldDefinition { Alias = RcrField1Name, SystemName = RcrField1Name });

            //Act
            queryGenerator.RefUpdateFields(fieldDefinition);

            //Assert
            Assert.IsTrue(queryGenerator.RootTable.GetFields()[0].IncludeInResult);
            Assert.IsTrue(crField.IncludeInResult);
            Assert.IsTrue(mcrField.IncludeInResult);
            Assert.IsTrue(rcrField.IncludeInResult);
        }
        public void RefUpdateFields_ShouldUpdateNonReferencedFields()
        {
            #region Arrange

            const string RefSystemName = "Cr1";

            var fieldDefinition = new ReferenceFieldDefinition { SystemName = RefSystemName };
            fieldDefinition.DisplayFields.Add(new ReferenceDisplayFieldDefinition() { Alias = Field1Name, SystemName = Field1Name });
            fieldDefinition.DisplayFields.Add(new ReferenceDisplayFieldDefinition() { Alias = CrField1Name, SystemName = CrField1Name });
            fieldDefinition.DisplayFields.Add(new ReferenceDisplayFieldDefinition() { Alias = McrField1Name, SystemName = McrField1Name });
            fieldDefinition.DisplayFields.Add(new ReferenceDisplayFieldDefinition() { Alias = RcrField1Name, SystemName = RcrField1Name });

            var queryGenerator = new SearchQueryGeneratorTest { RootTable = new TableDefinition("Test") };

            AddReferencedFields(queryGenerator);
            AddNonReferencedFields(queryGenerator);
            AddReferencedCrossReferences(queryGenerator);
            AddNonReferencedCrossReferences(queryGenerator);

            #endregion Arrange

            // Act
            queryGenerator.RefUpdateFields(fieldDefinition);

            // Assert
            var fields = queryGenerator.RootTable.GetFields();
            Assert.IsTrue(fields.First(f => f.SystemName.Equals(Field1Name)).IncludeInResult);
            Assert.IsFalse(fields.First(f => f.SystemName.Equals(Field2Name)).IncludeInResult);

            Assert.IsTrue(queryGenerator.SingleCrossReferences.First(cr => cr.SystemName.Equals(CrField1Name)).IncludeInResult);
            Assert.IsTrue(queryGenerator.MultiCrossReferences.First(mcr => mcr.SystemName.Equals(McrField1Name)).IncludeInResult);
            Assert.IsTrue(queryGenerator.ReverseCrossReferences.First(rcr => rcr.SystemName.Equals(RcrField1Name)).IncludeInResult);

            Assert.IsFalse(queryGenerator.SingleCrossReferences.First(cr => cr.SystemName.Equals(CrField2Name)).IncludeInResult);
            Assert.IsFalse(queryGenerator.MultiCrossReferences.First(mcr => mcr.SystemName.Equals(McrField2Name)).IncludeInResult);
            Assert.IsFalse(queryGenerator.ReverseCrossReferences.First(rcr => rcr.SystemName.Equals(RcrField2Name)).IncludeInResult);
        }