public void WhenIApplyTheRules()
        {
            MarketRulesManager manager = ScenarioContext.Current["MARKETRULEMANAGER"] as MarketRulesManager;

            manager.Should().NotBeNull();

            Fixture fixture = ScenarioContext.Current["FIXTURE"] as Fixture;

            manager.ApplyRules(fixture);
        }
        public void WhenMarketFiltersAreInitiated()
        {
            _marketsCache = null;
            _fixture.Markets.Clear();
            _fixture.Markets.AddRange(_markets);
            var objectProviderMock = new Mock <IStoredObjectProvider>();

            objectProviderMock.Setup(x => x.GetObject(It.IsAny <string>())).Returns(() => _marketsCache);
            objectProviderMock.Setup(x => x.SetObject(It.IsAny <string>(), It.IsAny <IUpdatableMarketStateCollection>()))
            .Callback <string, IUpdatableMarketStateCollection>((s, newState) => _marketsCache = newState);

            List <IMarketRule> rules = new List <IMarketRule> {
                InactiveMarketsFilteringRule.Instance, DeletedMarketsRule.Instance, VoidUnSettledMarket.Instance
            };

            _marketFilters = new MarketRulesManager(_fixture.Id, objectProviderMock.Object, rules);
        }
Exemple #3
0
        public IMarketRulesManager CreateNewMarketRuleManager(string fixtureId)
        {
            if (string.IsNullOrEmpty(fixtureId))
            {
                throw new ArgumentNullException("fixtureId", "fixtureId cannot be null or empty");
            }

            if (_rulesManagers.ContainsKey(fixtureId))
            {
                return(_rulesManagers[fixtureId]);
            }

            var rule_manager = new MarketRulesManager(fixtureId, this, _Rules);

            _rulesManagers[fixtureId] = rule_manager;

            return(rule_manager);
        }
        public void GivenAMarketRuleWithTheHaveTheFollowingRules(Table table)
        {
            Fixture fixture = ScenarioContext.Current["FIXTURE"] as Fixture;

            fixture.Should().NotBeNull();

            Mock <IStoredObjectProvider> provider = new Mock <IStoredObjectProvider>();

            List <IMarketRule> rules = new List <IMarketRule>();

            foreach (var row in table.Rows)
            {
                Mock <IMarketRule> rule = new Mock <IMarketRule>();
                rule.Setup(x => x.Name).Returns(row["Rule"]);
                rules.Add(rule.Object);
                ScenarioContext.Current.Add("RULE-" + row["Rule"], rule);
            }

            MarketRulesManager manager = new MarketRulesManager(fixture.Id, provider.Object, rules);

            ScenarioContext.Current.Add("MARKETRULEMANAGER", manager);
        }
        public void GivenTheMarketRulesReturnTheFollowingIntents(Table table)
        {
            MarketRulesManager manager = ScenarioContext.Current["MARKETRULEMANAGER"] as MarketRulesManager;

            manager.Should().NotBeNull();

            Fixture fixture = ScenarioContext.Current["FIXTURE"] as Fixture;

            fixture.Should().NotBeNull();

            foreach (var row in table.Rows)
            {
                var name = row["Rule"];
                Mock <IMarketRule> rule = ScenarioContext.Current["RULE-" + name] as Mock <IMarketRule>;
                rule.Should().NotBeNull();

                var mkt_name = row["Market"];
                var result   = row["Result"];
                var mkt      = fixture.Markets.FirstOrDefault(x => x.Id == mkt_name);
                mkt.Should().NotBeNull();


                if (!ScenarioContext.Current.ContainsKey("INTENT-RULE-" + name))
                {
                    MarketRuleResultIntent rule_intent = new MarketRuleResultIntent();
                    ScenarioContext.Current.Add("INTENT-RULE-" + name, rule_intent);
                    rule.Setup(x => x.Apply(It.IsAny <Fixture>(), It.IsAny <IMarketStateCollection>(), It.IsAny <IMarketStateCollection>())).Returns(rule_intent);
                }

                MarketRuleResultIntent intent = ScenarioContext.Current["INTENT-RULE-" + name] as MarketRuleResultIntent;
                intent.Should().NotBeNull();

                switch (result)
                {
                case "E":
                    Action <Market>      action      = x => x.AddOrUpdateTagValue("name", x.Name + " - E: " + name);
                    MarketRuleEditIntent edit_intent = new MarketRuleEditIntent(action, MarketRuleEditIntent.OperationType.CHANGE_DATA);
                    intent.EditMarket(mkt, edit_intent);
                    break;

                case "!E":
                    intent.MarkAsUnEditable(mkt);
                    break;

                case "R":
                    intent.MarkAsRemovable(mkt);
                    break;

                case "!R":
                    intent.MarkAsUnRemovable(mkt);
                    break;

                case "CS":
                    Action <Market>      edit_seln_action        = x => x.Selections.ForEach(y => y.Name = y.Name + name);
                    MarketRuleEditIntent change_seln_edit_intent = new MarketRuleEditIntent(edit_seln_action, MarketRuleEditIntent.OperationType.CHANGE_SELECTIONS);
                    intent.EditMarket(mkt, change_seln_edit_intent);
                    break;

                case "CD":
                    Action <Market>      change_data_action      = x => x.AddOrUpdateTagValue("name", x.Name + name);
                    MarketRuleEditIntent change_data_edit_intent = new MarketRuleEditIntent(change_data_action, MarketRuleEditIntent.OperationType.CHANGE_DATA);
                    intent.EditMarket(mkt, change_data_edit_intent);
                    break;

                case "AS":
                    Action <Market> add_seln_action = x => x.Selections.Add(new Selection {
                        Name = mkt.Name + (x.Selections.Count() + 1) + name, Id = mkt.Name + x.Selections.Count() + name
                    });
                    MarketRuleEditIntent add_seln_intent = new MarketRuleEditIntent(add_seln_action, MarketRuleEditIntent.OperationType.ADD_SELECTIONS);
                    intent.EditMarket(mkt, add_seln_intent);
                    break;

                case "RS":
                    Action <Market>      remove_seln_action = x => x.Selections.Clear();
                    MarketRuleEditIntent remove_seln_intent = new MarketRuleEditIntent(remove_seln_action, MarketRuleEditIntent.OperationType.REMOVE_SELECTIONS);
                    intent.EditMarket(mkt, remove_seln_intent);
                    break;

                default:
                    throw new Exception("Unknow status");
                }
            }
        }