public void GetImplicationRules_ReturnsCorrectListOfRules()
        {
            // Arrange

            var firstImplicationRuleString  = "IF(A>10)THEN(X=5)";
            var secondImplicationRuleString = "IF(B!=1&C!=2)THEN(X=10)";
            var implicationRulesInDatabase  = new List <string>
            {
                firstImplicationRuleString, secondImplicationRuleString
            };
            var profileName = "profile_name";
            var profile     = new InferenceProfile
            {
                ProfileName = profileName,
                Rules       = implicationRulesInDatabase
            };

            _profileRepositoryMock.Stub(x => x.GetProfileByName(profileName)).Return(Optional <InferenceProfile> .For(profile));

            // IF (A > 10) THEN (X = 5)
            var firstImplicationRule = new ImplicationRule(
                new List <StatementCombination>
            {
                new StatementCombination(new List <UnaryStatement>
                {
                    new UnaryStatement("A", ComparisonOperation.Greater, "10")
                })
            },
                new StatementCombination(new List <UnaryStatement>
            {
                new UnaryStatement("X", ComparisonOperation.Equal, "5")
            }));

            _implicationRuleCreatorMock.Stub(x => x.CreateImplicationRuleEntity(firstImplicationRuleString)).Return(firstImplicationRule);

            // IF (B != 1 & C != 2) THEN (X = 10)
            var secondImplicationRule = new ImplicationRule(
                new List <StatementCombination>
            {
                new StatementCombination(new List <UnaryStatement>
                {
                    new UnaryStatement("B", ComparisonOperation.NotEqual, "1"),
                    new UnaryStatement("C", ComparisonOperation.NotEqual, "2")
                })
            },
                new StatementCombination(new List <UnaryStatement>
            {
                new UnaryStatement("X", ComparisonOperation.Equal, "10")
            }));

            _implicationRuleCreatorMock.Stub(x => x.CreateImplicationRuleEntity(secondImplicationRuleString)).Return(secondImplicationRule);

            var expectedImplicationRules = new List <ImplicationRule>
            {
                firstImplicationRule, secondImplicationRule
            };
            var expectedOptional = Optional <List <ImplicationRule> > .For(expectedImplicationRules);

            // Act
            var actualOptional = _databaseImplicationRuleProvider.GetImplicationRules(profileName);

            // Assert
            Assert.IsTrue(actualOptional.IsPresent);
            Assert.AreEqual(expectedOptional.Value, actualOptional.Value);
        }