public void Ctor_SetsLimitAndRate_IfRatePeriod()
        {
            var attribute = new LimitRateAttribute(1, RatePeriod.PerSecond);

            attribute.Limit.Should().Be(1);
            attribute.Seconds.Should().Be((int)RatePeriod.PerSecond);
        }
        public void Ctor_SetsLimitAndRate_IfOnlyType()
        {
            var attribute = new LimitRateAttribute(LimitType.PerUser);

            attribute.Limit.Should().Be(LimitProviderConstants.DefaultPerMinute);
            attribute.Seconds.Should().Be((int)RatePeriod.PerMinute);
            attribute.Type.Should().Be(LimitType.PerUser);
        }
        public void Execute_AddsNextUserLimit_IfBothLimits()
        {
            var request = A.Fake <IRequest>();

            request.Items.Add(LimitRateAttribute.RequestItemName, new Limits
            {
                Request = new LimitGroup
                {
                    Limits = new List <LimitPerSecond>
                    {
                        new LimitPerSecond {
                            Seconds = 1, Limit = 1
                        }
                    }
                },
                User = new LimitGroup
                {
                    Limits = new List <LimitPerSecond>
                    {
                        new LimitPerSecond {
                            Seconds = 1, Limit = 1
                        }
                    }
                }
            });
            var response  = A.Fake <IResponse>();
            var attribute = new LimitRateAttribute(LimitType.PerUser, 6, 45);

            attribute.Execute(request, response, null);

            request.Items[LimitRateAttribute.RequestItemName].Should().BeEquivalentTo(new Limits
            {
                Request = new LimitGroup
                {
                    Limits = new List <LimitPerSecond>
                    {
                        new LimitPerSecond {
                            Seconds = 1, Limit = 1
                        }
                    }
                },
                User = new LimitGroup
                {
                    Limits = new List <LimitPerSecond>
                    {
                        new LimitPerSecond {
                            Seconds = 1, Limit = 1
                        },
                        new LimitPerSecond {
                            Seconds = 45, Limit = 6
                        }
                    }
                }
            });
        }