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); }