public void ResetToBeginning_WhenCalled_ResetsOrderPosition()
        {
            var factory = new StumpResponseFactory(ResponseFactoryBehavior.OrderedInfinite);

            PopulateFactoryWithMultipleResponses(factory, 3);

            Assert.AreEqual(1, factory.CreateResponse(new MockHttpRequest()).StatusCode);
            Assert.AreEqual(2, factory.CreateResponse(new MockHttpRequest()).StatusCode);

            factory.ResetToBeginning();

            Assert.AreEqual(1, factory.CreateResponse(new MockHttpRequest()).StatusCode);
        }
        public void CreateResponse_WithoutResponsesWithOrderedThenDefaultBehavior_ReturnsDefault()
        {
            var factory  = new StumpResponseFactory(ResponseFactoryBehavior.OrderedThenFailure);
            var response = factory.CreateResponse(new MockHttpRequest());

            Assert.NotNull(response);
            Assert.AreEqual(factory.FailureResponse.StatusCode, response.StatusCode);
        }
        public void CreateResponse_WhenFactoryIsDisposed_ThrowsExpcetion()
        {
            var factory = new StumpResponseFactory(ResponseFactoryBehavior.OrderedInfinite);

            factory.Dispose();

            Assert.Throws <ObjectDisposedException>(() => factory.CreateResponse(new MockHttpRequest()));
        }
        public void Clear_WhenCalled_ResetsOrderPosition()
        {
            var factory = new StumpResponseFactory(ResponseFactoryBehavior.OrderedInfinite);

            PopulateFactoryWithMultipleResponses(factory, 3);

            Assert.AreEqual(1, factory.CreateResponse(new MockHttpRequest()).StatusCode);
            Assert.AreEqual(2, factory.CreateResponse(new MockHttpRequest()).StatusCode);

            factory.Clear();

            factory.Add(new BasicHttpResponse
            {
                StatusCode = 4
            });

            Assert.AreEqual(4, factory.CreateResponse(new MockHttpRequest()).StatusCode);
        }
        private List <IStumpsHttpResponse> GetMultipleResponsesFromFactory(StumpResponseFactory factory, int count)
        {
            var request   = new MockHttpRequest();
            var responses = new List <IStumpsHttpResponse>();

            for (var i = 0; i < count; i++)
            {
                responses.Add(factory.CreateResponse(request));
            }

            return(responses);
        }
        public void CreateResponse_WithOrderedInfiniteBehaviorInMultithreadedEnvironment_ReturnsExpectedValues()
        {
            var counts = new int[21];

            var factory = new StumpResponseFactory(ResponseFactoryBehavior.OrderedInfinite);

            PopulateFactoryWithMultipleResponses(factory, 20);

            var mockRequest = new MockHttpRequest();

            Parallel.For(0, 1000, (i) =>
            {
                var response = factory.CreateResponse(mockRequest);
                Interlocked.Increment(ref counts[response.StatusCode]);
            });

            for (var i = 1; i <= 20; i++)
            {
                Assert.AreEqual(50, counts[i]);
            }
        }
        public void CreateResponse_WithOrderedBehavior_CanResetUsingRequestHeader()
        {
            const string UpperCasedStumpsHeader  = "X-STUMPS";
            const string UpperCasedResetSequence = "RESET-SEQUENCE";

            var factory = new StumpResponseFactory(ResponseFactoryBehavior.OrderedInfinite);

            PopulateFactoryWithMultipleResponses(factory, 5);

            GetMultipleResponsesFromFactory(factory, 3);
            var responses = GetMultipleResponsesFromFactory(factory, 10);
            var expectedStatusCodeSequence = new int[] { 1, 2, 3 };

            var request = new MockHttpRequest
            {
                Headers = new HttpHeaders()
            };

            request.Headers[UpperCasedStumpsHeader] = UpperCasedResetSequence;

            var response = factory.CreateResponse(request);

            Assert.AreEqual(1, response.StatusCode);
        }