using System.Collections.Generic; using System.Linq; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; namespace Pinwheel { [TestClass] public class AwardsEngineTests { [TestMethod] public void Create_with_RulesProvider_should_populat_ruleset() { var someRule = new Mock().Object; var provider = new Mock(); provider .Expect(p => p.GetRules()) .Returns(new List { someRule }); var engine = new AwardsEngine(provider.Object); Assert.IsTrue(engine.Rules.Contains(someRule)); } [TestMethod] public void Create_with_rules_should_populate_ruleset() { var someRule = new Mock().Object; var engine = new AwardsEngine(new [] { someRule }); Assert.IsTrue(engine.Rules.Contains(someRule)); } [TestMethod] public void Register_should_add_rule_to_rules_collection() { var someRule = new Mock(); var engine = new AwardsEngine(); engine.Register(someRule.Object); Assert.IsTrue(engine.Rules.Contains(someRule.Object)); } [TestMethod] public void Execute_should_execute_registered_rules() { var someRule = new Mock(); var awardContext = new Mock().Object; someRule.Expect(r => r.Execute(awardContext)).Verifiable(); var engine = new AwardsEngine(new [] {someRule.Object}); engine.Execute(awardContext); someRule.VerifyAll(); } } }