public void WasabiRulesEngine_CreateManyWithAnd_ScaleUp()
        {
            // arrange - tom is 5 and bob is 9
            var rule1 = new WasabiWebRule("tom", 4, 2);
            var rule2 = new WasabiWebRule("bob", 8, 2);
            var engine = new WasabiWebRulesEngine("mysite", 3);
            engine.AddRule(rule1);
            engine.AddRule(rule2);

            // act
            var response = engine.Scale(WasabiWebLogicalOperation.And, AddSecondMetric());
            // assert
            response.Should().Be(WasabiWebState.ScaleUp);
        }
        public void WasabiRulesEngine_CreateSingle_ScaleDown()
        {
            // arrange
            var rule   = new WasabiWebRule("tom", 9, 6);
            var engine = new WasabiWebRulesEngine("mysite", 3);

            engine.AddRule(rule);

            // act
            var response = engine.Scale(WasabiWebLogicalOperation.And, GetInitialMetric());

            // assert
            response.Should().Be(WasabiWebState.ScaleDown);
        }
        public void WasabiRulesEngine_CreateManyWithAnd_ScaleDown3()
        {
            // arrange - tom is 5 and bob is 9 bill is 11
            var rule1 = new WasabiWebRule("tom", 14, 6); // scale down
            var rule2 = new WasabiWebRule("bob", 8, 6); // scale up
            var rule3 = new WasabiWebRule("bill", 17, 12); // scale down
            var engine = new WasabiWebRulesEngine("mysite", 3);
            engine.AddRule(rule1);
            engine.AddRule(rule2);
            engine.AddRule(rule3);

            // act
            var response = engine.Scale(WasabiWebLogicalOperation.And, AddThirdMetric());
            // assert
            response.Should().Be(WasabiWebState.LeaveUnchanged);
        }
        public void WasabiRulesEngine_CreateManyWithOr_Unchanged()
        {
            // arrange - tom is 5 and bob is 9 bill is
            var rule1  = new WasabiWebRule("tom", 14, 6);
            var rule2  = new WasabiWebRule("bob", 8, 6);
            var engine = new WasabiWebRulesEngine("mysite", 3);

            engine.AddRule(rule1);
            engine.AddRule(rule2);

            // act
            var response = engine.Scale(WasabiWebLogicalOperation.Or, AddSecondMetric());

            // assert
            response.Should().Be(WasabiWebState.LeaveUnchanged);
        }
        public void WasabiRulesEngine_CreateManyWithAnd_ScaleDown()
        {
            // arrange - tom is 5 and bob is 9
            var rule1  = new WasabiWebRule("tom", 14, 6);
            var rule2  = new WasabiWebRule("bob", 18, 10);
            var engine = new WasabiWebRulesEngine("mysite", 3);

            engine.AddRule(rule1);
            engine.AddRule(rule2);

            // act
            var response = engine.Scale(WasabiWebLogicalOperation.And, AddSecondMetric());

            // assert
            response.Should().Be(WasabiWebState.ScaleDown);
        }
        public void WasabiRulesEngine_CreateManyWithAnd_ScaleDown3()
        {
            // arrange - tom is 5 and bob is 9 bill is 11
            var rule1  = new WasabiWebRule("tom", 14, 6);   // scale down
            var rule2  = new WasabiWebRule("bob", 8, 6);    // scale up
            var rule3  = new WasabiWebRule("bill", 17, 12); // scale down
            var engine = new WasabiWebRulesEngine("mysite", 3);

            engine.AddRule(rule1);
            engine.AddRule(rule2);
            engine.AddRule(rule3);

            // act
            var response = engine.Scale(WasabiWebLogicalOperation.And, AddThirdMetric());

            // assert
            response.Should().Be(WasabiWebState.LeaveUnchanged);
        }
        public void WasabiRulesEngine_CreateSingle_Unchanged()
        {
            // arrange
            var rule = new WasabiWebRule("tom", 9, 6);
            var engine = new WasabiWebRulesEngine("mysite", 3);
            engine.AddRule(rule);

            // act
            var response = engine.Scale(WasabiWebLogicalOperation.And, GetInitialMetric());
            // assert
            response.Should().Be(WasabiWebState.ScaleDown);
        }
        public void WasabiRulesEngine_CreateManyWithOr_Unchanged()
        {
            // arrange - tom is 5 and bob is 9 bill is
            var rule1 = new WasabiWebRule("tom", 14, 6);
            var rule2 = new WasabiWebRule("bob", 8, 6);
            var engine = new WasabiWebRulesEngine("mysite", 3);
            engine.AddRule(rule1);
            engine.AddRule(rule2);

            // act
            var response = engine.Scale(WasabiWebLogicalOperation.Or, AddSecondMetric());
            // assert
            response.Should().Be(WasabiWebState.LeaveUnchanged);
        }