public void MergeWithLeftMultipleEntriesReturnsCorrectEntries()
        {
            var stat  = Mock.Of <IStatBuilder>();
            var form1 = Mock.Of <IFormBuilder>();
            var leftAndRightCondition = Mock.Of <IConditionBuilder>();
            var rightCondition        = Mock.Of <IConditionBuilder>();
            var leftCondition         = Mock.Of <IConditionBuilder>(
                c => c.And(rightCondition) == leftAndRightCondition);
            var rightEntry = EmptyEntry
                             .WithStat(stat)
                             .WithCondition(rightCondition);
            var left = CreateResult(
                EmptyEntry.WithCondition(leftCondition),
                EmptyEntry.WithForm(form1),
                EmptyEntry);
            var right    = CreateResult(rightEntry);
            var expected = new[]
            {
                EmptyEntry.WithStat(stat).WithCondition(leftAndRightCondition),
                EmptyEntry.WithForm(form1).WithStat(stat).WithCondition(rightCondition),
                EmptyEntry.WithStat(stat).WithCondition(rightCondition)
            };

            var result = left.MergeWith(right);

            CollectionAssert.AreEqual(expected, result.Entries);
        }
        public void MergeWithBothSingleEntryAndConditionInBothAndsConditions()
        {
            var expected       = Mock.Of <IConditionBuilder>();
            var rightCondition = Mock.Of <IConditionBuilder>();
            var leftCondition  = Mock.Of <IConditionBuilder>(c => c.And(rightCondition) == expected);
            var entryLeft      = EmptyEntry
                                 .WithCondition(leftCondition);
            var entryRight = CreateFilledEntry(condition: rightCondition);
            var left       = CreateResult(entryLeft);
            var right      = CreateResult(entryRight);

            var result = left.MergeWith(right);

            Assert.AreEqual(expected, result.Entries.Single().Condition);
        }
        public void MergeWithDoesNotSwapLeftAndRight()
        {
            var expected       = Mock.Of <IConditionBuilder>();
            var rightCondition = Mock.Of <IConditionBuilder>();
            var leftCondition  = Mock.Of <IConditionBuilder>(
                c => c.And(rightCondition) == expected);
            var leftEntry  = EmptyEntry.WithCondition(leftCondition);
            var left       = CreateResult(leftEntry, leftEntry);
            var rightEntry = EmptyEntry.WithCondition(rightCondition);
            var right      = CreateResult(rightEntry);

            var result = left.MergeWith(right);
            var actual = result.Entries[0].Condition;

            Assert.AreEqual(expected, actual);
        }