예제 #1
0
        private IHttpResponseModel MockSend(HttpRequestModel request)
        {
            if (MockResponseQueue.Count > 0)
            {
                var sentAtUtc = DateTimeOffset.UtcNow - TimeSpan.FromSeconds(-1);

                var mockResponse = MockResponseQueue.Dequeue();
                mockResponse
                .Setup(mr => mr.SentAtUtc)
                .Returns(sentAtUtc);
                mockResponse
                .Setup(mr => mr.CompletedAtUtc)
                .Returns(DateTimeOffset.UtcNow);

                return(mockResponse.Object);
            }

            foreach (var lookupResponse in MockResponseLookup)
            {
                if (lookupResponse.MatchesRequest(request))
                {
                    return(lookupResponse.Process(request));
                }
            }

            throw new NotImplementedException("There are no mocked responses queued or added to pattern match");
        }
        public void Request_Is_Retried()
        {
            // arrange
            var userWriter = new Mock<IUserWriter>();
            var requestQueue = new MockRequestQueue();
            var responseQueue = new MockResponseQueue();
            var controller = new CrawlerController(userWriter.Object, requestQueue, responseQueue, new RecentFriendRegistry());
            var retryRequest = new GetFriendsRequest("test");
            var errorResponse = new ErrorResponse(retryRequest, "fail whale");

            // act
            controller.ProcessResponse(errorResponse);

            // assert
            Assert.That(requestQueue.QueuedMessages, Has.Count(1));
            Assert.That(requestQueue.QueuedMessages.Single(), Is.SameAs(retryRequest));
        }
        public void ErrorResponse_Is_Queued()
        {
            // arrange
            var requestQueue = new MockRequestQueue();
            var responseQueue = new MockResponseQueue();
            var statusService = new Mock<IStatusService>();

            statusService.Setup(ss => ss.GetFriendsOf("test")).Throws(new XmlException("Twitter is full of FAIL!"));
            var crawler = new TwitterCrawler(requestQueue, responseQueue, statusService.Object);

            // act
            var friendRequest = new GetFriendsRequest("test");
            crawler.ProcessRequest(friendRequest);

            // assert
            Assert.That(responseQueue.QueuedMessages, Has.Count(1));
            Assert.That(responseQueue.QueuedMessages.Single(), Is.TypeOf(typeof(ErrorResponse)));
            var response = (ErrorResponse)responseQueue.QueuedMessages.Single();
            Assert.That(response.Request, Is.SameAs(friendRequest));
        }