Example #1
0
        public void TestFraudCheckerCanLoadRepository()
        {
            var mockRepo = Mock.Of<IFraudRepository>();
            var mockOrder = new Mock<IDummyOrderObject>();
            var checker = new FraudChecker(mockOrder.Object, mockRepo);

            Assert.IsTrue(checker.IsRepositoryLoaded);
            Assert.IsFalse(checker.IsRulesLoaded);
        }
Example #2
0
 public FraudCheckActor(ICollectionStore <Customer> customeStore,
                        ICollectionStore <Order> ordeStore,
                        ICollectionStore <Payment> paymentStore,
                        FraudChecker fraudChecker)
 {
     _fraudChecker = fraudChecker;
     _paymentStore = paymentStore;
     _ordeStore    = ordeStore;
     _customeStore = customeStore;
 }
Example #3
0
        public void TestFraudCheckerCanFailRule()
        {
            var mockRepo = new Mock<IFraudRepository>();
            var mockOrder = new Mock<IDummyOrderObject>();
            var mockRule = RuleGenerators.FetchMockedRule(true);

            mockRepo.Setup(m => m.FetchAllRules()).Returns(new List<IFraudRule> { mockRule.Object });

            var checker = new FraudChecker(mockOrder.Object, mockRepo.Object);
            checker.RunRules();

            Assert.AreEqual(1, checker.CountOfRulesFailed);
            Assert.AreEqual(0, checker.CountOfRulesPassed);
        }
Example #4
0
        public void TestFraudCheckerCanPassAndFailRuleViaReport()
        {
            var mockRepo = new Mock<IFraudRepository>();
            var mockOrder = new Mock<IDummyOrderObject>();
            var mockRuleInError = RuleGenerators.FetchMockedRule(true);
            var mockRulePassing = RuleGenerators.FetchMockedRule(false);

            mockRepo.Setup(m => m.FetchAllRules()).Returns(new List<IFraudRule> { mockRuleInError.Object, mockRulePassing.Object });

            var checker = new FraudChecker(mockOrder.Object, mockRepo.Object);
            var report = checker.RunRules();

            Assert.AreEqual(1, report.RulesFailed);
            Assert.AreEqual(1, report.RulesPassed);
            Assert.AreEqual(report.RulesFailed, checker.CountOfRulesFailed);
            Assert.AreEqual(report.RulesPassed, checker.CountOfRulesPassed);
        }
Example #5
0
        public void TestReusability()
        {
            var mockRepo = new Mock<IFraudRepository>();
            var mockOrder = new Mock<IDummyOrderObject>();
            var mockRuleFailing = RuleGenerators.FetchMockedRule(true);

            mockRepo.Setup(m => m.FetchAllRules()).Returns(new List<IFraudRule> { mockRuleFailing.Object });

            var checker = new FraudChecker(mockOrder.Object, mockRepo.Object);
            checker.RunRules();

            var mockOrder2 = new Mock<IDummyOrderObject>();
            checker.LoadOrder(mockOrder2.Object);
            Assert.AreEqual(0, checker.CountOfRulesFailed);
            Assert.AreEqual(0, checker.CountOfRulesPassed);
            Assert.AreEqual(0, checker.CountOfRulesRan);
            Assert.AreEqual(0, checker.ReportOfFailingRules.Count);
            Assert.AreEqual(0, checker.ReportOfPassingRules.Count);
        }
Example #6
0
        public void TestOrdersInSequence()
        {
            var mockRepo = new Mock<IFraudRepository>();
            var orders = new List<IDummyOrderObject>();
            for (var i = 0; i < 6; i++)
            {
                orders.Add(new Mock<IDummyOrderObject>().Object);
            }

            var mockRuleFailing = RuleGenerators.FetchMockedRule(true);
            var mockRulePassing = RuleGenerators.FetchMockedRule(false);
            mockRepo
                .SetupSequence(m => m.FetchAllRules())
                .Returns(new List<IFraudRule> { mockRuleFailing.Object })
                .Returns(new List<IFraudRule> { mockRulePassing.Object })
                .Returns(new List<IFraudRule> { mockRuleFailing.Object })
                .Returns(new List<IFraudRule> { mockRulePassing.Object })
                .Returns(new List<IFraudRule> { mockRuleFailing.Object })
                .Returns(new List<IFraudRule> { mockRulePassing.Object });

            var passed = 0;
            var failed = 0;
            foreach (var order in orders)
            {
                var checker = new FraudChecker(order, mockRepo.Object);
                var report = checker.RunRules();
                if (report.OverallResult)
                {
                    passed++;
                }
                else
                {
                    failed++;
                }
            }

            Assert.AreEqual(3, passed);
            Assert.AreEqual(3, failed);
        }
Example #7
0
        public void TestFraudCheckerUsesChannelKey()
        {
            var channelKey = "abc";
            var mockRepo = new Mock<IFraudRepository>();
            var mockOrder = new Mock<IDummyOrderObject>();

            mockRepo.Setup(m => m.FetchRulesByChannel(channelKey)).Returns(new List<IFraudRule>());
            mockRepo.Setup(m => m.FetchAllRules()).Throws(new NotImplementedException());

            var checker = new FraudChecker(mockOrder.Object, mockRepo.Object, channelKey);
            checker.LoadRules();

            Assert.IsTrue(checker.IsRulesLoaded);
        }
Example #8
0
        public void TestFraudCheckerStoresPassingRuleNamesViaReport()
        {
            var name = "ruleName";
            var mockRepo = new Mock<IFraudRepository>();
            var mockOrder = new Mock<IDummyOrderObject>();
            var mockRule = RuleGenerators.FetchMockedRule(false, name);

            mockRepo.Setup(m => m.FetchAllRules()).Returns(new List<IFraudRule> { mockRule.Object });

            var checker = new FraudChecker(mockOrder.Object, mockRepo.Object);
            var report = checker.RunRules();

            Assert.IsTrue(report.ReportOfPassingRules.Contains(name));
        }
Example #9
0
        public void TestFraudCheckerStoresFailingRuleMessagesViaReport()
        {
            var name = "ruleName";
            var message = "rule failed";
            var mockRepo = new Mock<IFraudRepository>();
            var mockOrder = new Mock<IDummyOrderObject>();
            var mockRule = RuleGenerators.FetchMockedRule(true, name, message);

            mockRepo.Setup(m => m.FetchAllRules()).Returns(new List<IFraudRule> { mockRule.Object });

            var checker = new FraudChecker(mockOrder.Object, mockRepo.Object);
            var report = checker.RunRules();

            Assert.AreEqual(message, report.ReportOfFailingRules[name]);
        }
Example #10
0
        public void TestFraudCheckerReturnsPassResult()
        {
            var mockRepo = new Mock<IFraudRepository>();
            var mockOrder = new Mock<IDummyOrderObject>();
            var mockRulePassing = RuleGenerators.FetchMockedRule(false);

            mockRepo.Setup(m => m.FetchAllRules()).Returns(new List<IFraudRule> { mockRulePassing.Object });

            var checker = new FraudChecker(mockOrder.Object, mockRepo.Object);
            var report = checker.RunRules();
            Assert.IsTrue(report.OverallResult);
        }
Example #11
0
 public void TestFraudCheckerLoadState()
 {
     var mockOrder = new Mock<IDummyOrderObject>();
     var checker = new FraudChecker(mockOrder.Object);
     Assert.IsFalse(checker.IsRulesLoaded);
 }
Example #12
0
        public void TestFraudCheckerCanRunRuleViaReport()
        {
            var mockRepo = new Mock<IFraudRepository>();
            var mockOrder = new Mock<IDummyOrderObject>();
            var mockRule = RuleGenerators.FetchMockedRule();
            mockRepo.Setup(m => m.FetchAllRules()).Returns(new List<IFraudRule> { mockRule.Object });

            var checker = new FraudChecker(mockOrder.Object, mockRepo.Object);
            var report = checker.RunRules();

            Assert.AreEqual(1, report.RulesRan);
        }
Example #13
0
        public void TestFraudCheckerCanRunRules()
        {
            var mockRepo = new Mock<IFraudRepository>();
            var mockOrder = new Mock<IDummyOrderObject>();
            var mockRule1 = RuleGenerators.FetchMockedRule("rule 1");
            var mockRule2 = RuleGenerators.FetchMockedRule("rule 2");
            mockRepo.Setup(m => m.FetchAllRules()).Returns(new List<IFraudRule> { mockRule1.Object, mockRule2.Object });

            var checker = new FraudChecker(mockOrder.Object, mockRepo.Object);
            checker.RunRules();

            Assert.AreEqual(2, checker.CountOfRulesRan);
        }