public async Task HandleRateLimitTest()
        {
            // Test no delay.
            await MtgApiController.HandleRateLimit();

            // Test with delay.
            var privateController = new PrivateType(typeof(MtgApiController));

            privateController.SetStaticFieldOrProperty("RatelimitLimit", 2000);

            var limit        = new RateLimit();
            var privateLimit = new PrivateObject(limit);

            privateLimit.SetFieldOrProperty("_webServiceCalls", new List <DateTime>()
            {
                DateTime.Now.AddSeconds(-1),
                DateTime.Now.AddSeconds(-2),
                DateTime.Now.AddSeconds(-3),
                DateTime.Now.AddSeconds(-4),
                DateTime.Now.AddSeconds(-5),
                DateTime.Now.AddSeconds(-8),
            });

            privateController.SetStaticFieldOrProperty("_apiRateLimit", limit);

            await MtgApiController.HandleRateLimit();
        }
示例#2
0
        /// <summary>
        /// Makes a GET call to the web service.
        /// </summary>
        /// <typeparam name="T">The type of object to serialize the response into.</typeparam>
        /// <param name="requestUri">The URL to call.</param>
        /// <returns>The response of the GET serialized into the specified object.</returns>
        protected async Task <T> CallWebServiceGet <T>(Uri requestUri)
            where T : Dto.MtgResponseBase
        {
            if (requestUri == null)
            {
                throw new ArgumentNullException("requestUri");
            }

            // Makes sure that th rate limit is not reached.
            await MtgApiController.HandleRateLimit();

            return(await this._adapter.WebGetAsync <T>(requestUri).ConfigureAwait(false));
        }