public async Task Get_ShouldReturnDataFromBinListAPI_WhenNoDataInCacheForPassedKey() { //setup cache var baseUrl = AppConfigMock.GetBaseUrls().BinListAPI; var cacheKey = TestCards.ValidCardIIN.ToString().Substring(2); var binListAPIResp = (object)ResponseMock.GetCardIINResp().Content; _httpCacheMock.Setup(x => x.LoadFromCache <object>(cacheKey)) .Returns(string.Empty); //setup restclient _restResponseMock.Setup(x => x.StatusCode) .Returns(HttpStatusCode.OK); _restResponseMock.Setup(x => x.Content) .Returns(binListAPIResp.ToString()); //setup logger _loggerMock.Setup(x => x.LogInfo(It.IsAny <string>())); //test service method var response = await _sut.Get($"{baseUrl}/{TestCards.ValidCardIIN}", It.IsAny <string>(), cacheKey); //Verify http response was logged _loggerMock.Verify(x => x.LogInfo(It.IsAny <string>()), Times.Once); //Verify response is returned from BinlistAPI response.StatusCode.Should().Be(200); response.Content.As <object>().Should().Be(binListAPIResp); }
public void ExecuteSubFunction_GoesToExecutingSubFunction() { using (MockRepository.Ordered()) { ResponseMock.Expect(mock => mock.Redirect("~/destination.wxe")).WhenCalled(invocation => Thread.CurrentThread.Abort()); ExecutionStateContextMock.Expect(mock => mock.SetExecutionState(Arg <ExecutingSubFunctionWithPermaUrlState> .Is.NotNull)) .WhenCalled( invocation => { var nextState = CheckExecutionState((ExecutingSubFunctionWithPermaUrlState)invocation.Arguments[0]); Assert.That(nextState.Parameters.ResumeUrl, Is.EqualTo("~/resume.wxe")); }); } MockRepository.ReplayAll(); try { _executionState.ExecuteSubFunction(WxeContext); Assert.Fail(); } catch (ThreadAbortException) { Thread.ResetAbort(); } MockRepository.VerifyAll(); }
public async Task GetCardDetailsWithBIN_ShouldReturnNotFound_WhenCardIINDoesNotExist() { var testCardIIN = TestCards.RandomCardIIN; _responseHandlerMock.Setup(x => x.CommitResponse(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <object>())) .Returns(ResponseMock.GetAppResponse(ResponseCodes.NOT_FOUND)); //setup File logging _loggerMock.Setup(x => x.LogInfo(It.IsAny <string>())); //setup httpClient _httpClientMock.Setup(x => x.Get($"{_baseUrlMock.Value.BinListAPI}/{testCardIIN}", It.IsAny <string>(), testCardIIN.ToString())) .ReturnsAsync(ResponseMock.GetCardIINResp(404)); //sevice method test var response = await _sut.GetCardDetailsWithBIN(testCardIIN); //Verify response was logged to file _loggerMock.Verify(x => x.LogInfo(It.IsAny <string>()), Times.AtLeastOnce); response.Code.Should().Be(ResponseCodes.NOT_FOUND); }
public void GetHitCount_ShouldReturnNotFound_WhenCardInquiryRecordDoesNotExist() { //setup response int count = 0; var hitCounts = ResponseMock.GetHitCountDTO(count); _responseHandlerMock.Setup(x => x.CommitResponse(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <GetHitCountDTO>())) .Returns(ResponseMock.GetAppResponse(ResponseCodes.NOT_FOUND, null, hitCounts)); //setup File logging _loggerMock.Setup(x => x.LogError(It.IsAny <string>())); //setup repository _unitOfWorkMock.Setup(x => x.CardInquiries.GetNoOfHits()) .Returns(ResponseMock.GetListofCardInquiries(true)); //test service method var response = _sut.GetHitCount(); response.Code.Should().Be(ResponseCodes.NOT_FOUND); response.Data.As <GetHitCountDTO>().Should().Be(hitCounts); hitCounts.Success.Should().BeFalse(); hitCounts.Size.Should().Be(count); }
public void ApplyPost200InvalidJson() { var connector = new BasicConnector(HttpTransportMock.Object, Digest, Secret); ResourceMock.SetupProperty(r => r.Location, Url); ResourceMock.SetupGet(r => r.ContentType).Returns(ContentType); var resourceData = new Dictionary <string, object>() { { "Year", 2012 } }; ResourceMock.Setup(r => r.Marshal()).Returns(resourceData); var request = (HttpWebRequest)WebRequest.Create(Url); HttpTransportMock.Setup(t => t.CreateRequest(Url)).Returns(request); ResponseMock.SetupGet(r => r.Data).Returns("{{{{"); PayLoad = "{\"Year\":2012}"; HttpTransportMock.Setup(t => t.Send(request, PayLoad)).Returns(ResponseMock.Object); var ex = Assert.Throws <ConnectorException>( () => connector.Apply(HttpMethod.Post, ResourceMock.Object, null)); Assert.That(ex.Message, Is.EqualTo("Bad format on response content.")); }
public async Task LogHitCountToDb_ShouldReturnNoOfRowsAffected_WhenInquiryRecordIsSaved() { //setup response int rowsAffected = 1; var testCardIIN = TestCards.ValidCardIIN; var binListAPiResp = ResponseMock.GetCardIINResp(200); var cardDetails = JsonConvert.DeserializeObject <GetCardDetailsDTO>(binListAPiResp?.Content); var newCardInquiry = new CardInquiryLog() { IIN = testCardIIN.ToString(), InquiryDate = DateTime.Now, NoOfHit = 1, Status = "success" }; //setup File logging _loggerMock.Setup(x => x.LogError(It.IsAny <string>())); //setup repository _unitOfWorkMock.Setup(x => x.CardInquiries.AddCardInquiry(newCardInquiry)); _unitOfWorkMock.Setup(x => x.SaveChanges()) .Returns(rowsAffected); //test service method var rowCount = await _sut.LogHitCountToDb(It.IsAny <string>(), testCardIIN.ToString(), cardDetails); rowCount.Should().Be(rowsAffected); }
public async Task GetCardDetailsWithBIN_ShouldReturnResourceUnavailable_WhenBinListApiIsNotReachable() { var testCardIIN = TestCards.RandomCardIIN; _responseHandlerMock.Setup(x => x.CommitResponse(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <object>())) .Returns(ResponseMock.GetAppResponse(ResponseCodes.RESOURCE_UNAVAILABLE)); //setup File logging _loggerMock.Setup(x => x.LogInfo(It.IsAny <string>())); //setup httpClient _httpClientMock.Setup(x => x.Get($"{_baseUrlMock.Value.BinListAPI}/{testCardIIN}", It.IsAny <string>(), testCardIIN.ToString())) .ReturnsAsync(ResponseMock.GetCardIINResp(500)); //sevice method test var response = await _sut.GetCardDetailsWithBIN(testCardIIN); //Verify response was logged to file _loggerMock.Verify(x => x.LogInfo(It.IsAny <string>()), Times.AtLeastOnce); response.Code.Should().Be(ResponseCodes.RESOURCE_UNAVAILABLE); }
public void ApplyGet200() { var connector = new BasicConnector(HttpTransportMock.Object, Digest, Secret); ResourceMock.SetupProperty(r => r.Location, Url); ResourceMock.SetupGet(r => r.ContentType).Returns(ContentType); var request = (HttpWebRequest)WebRequest.Create(Url); HttpTransportMock.Setup(t => t.CreateRequest(Url)).Returns(request); ResponseMock.SetupGet(r => r.Data).Returns(PayLoad); HttpTransportMock.Setup(t => t.Send(request, PayLoad)).Returns(ResponseMock.Object); connector.Apply(HttpMethod.Get, ResourceMock.Object, null); HttpTransportMock.Verify(t => t.CreateRequest(Url), Times.Once()); HttpTransportMock.Verify(t => t.Send(request, PayLoad), Times.Once()); Assert.That(request.Method, Is.EqualTo(HttpMethod.Get.ToString().ToUpper())); Assert.That(request.UserAgent, Is.EqualTo(connector.UserAgent.ToString())); var authorization = string.Format("Klarna {0}", Digest.Create(string.Concat(PayLoad, Secret))); Assert.That(request.Headers["Authorization"], Is.EqualTo(authorization)); Assert.That(request.Accept, Is.EqualTo(ContentType)); Assert.That(request.ContentType, Is.Null); }
public void ApplyPostError(HttpStatusCode statusCode, int expectedCode) { var connector = new BasicConnector(HttpTransportMock.Object, Digest, Secret); ResourceMock.SetupProperty(r => r.Location, Url); ResourceMock.SetupGet(r => r.ContentType).Returns(ContentType); var resourceData = new Dictionary <string, object>() { { "Year", 2012 } }; ResourceMock.Setup(r => r.Marshal()).Returns(resourceData); var request = (HttpWebRequest)WebRequest.Create(Url); HttpTransportMock.Setup(t => t.CreateRequest(Url)).Returns(request); ResponseMock.SetupGet(r => r.StatusCode).Returns(statusCode); PayLoad = "{\"Year\":2012}"; HttpTransportMock.Setup(t => t.Send(request, PayLoad)).Returns(ResponseMock.Object); var ex = Assert.Throws <ConnectorException>( () => connector.Apply(HttpMethod.Post, ResourceMock.Object, null)); var code = (HttpStatusCode)ex.Data["HttpStatusCode"]; Assert.That(code, Is.Not.Null); Assert.That((int)code, Is.EqualTo(expectedCode)); HttpTransportMock.Verify(t => t.CreateRequest(Url), Times.Once()); HttpTransportMock.Verify(t => t.Send(request, PayLoad), Times.Once()); }
public void ApplyDataInOptions() { var connector = new BasicConnector(HttpTransportMock.Object, Digest, Secret); ResourceMock.SetupProperty(r => r.Location, Url); var request = (HttpWebRequest)WebRequest.Create(Url); HttpTransportMock.Setup(t => t.CreateRequest(Url)).Returns(request); PayLoad = "{\"Year\":2012}"; ResponseMock.SetupGet(r => r.Data).Returns(PayLoad); HttpTransportMock.Setup(t => t.Send(request, PayLoad)).Returns(ResponseMock.Object); ResourceMock.Setup(r => r.Marshal()).Returns(new Dictionary <string, object>()); var resourceData = new Dictionary <string, object>() { { "Year", 2012 } }; var options = new Dictionary <string, object>() { { "data", resourceData } }; connector.Apply(HttpMethod.Post, ResourceMock.Object, options); HttpTransportMock.Verify(t => t.CreateRequest(Url), Times.Once()); HttpTransportMock.Verify(t => t.Send(request, PayLoad), Times.Once()); }
public void ExecuteSubFunction_WithFailedRedirect() { ResponseMock.Expect(mock => mock.Redirect("~/destination.wxe")); MockRepository.ReplayAll(); _executionState.ExecuteSubFunction(WxeContext); }
public void ExecuteSubFunction_WithFailedRedirect() { using (MockRepository.Ordered()) { ResponseMock.Expect(mock => mock.Redirect("/resumeUrl.wxe")); } MockRepository.ReplayAll(); _executionState.ExecuteSubFunction(WxeContext); }
public async Task GetCardDetailsWithBIN_ShouldReturnCardDetails_WhenCardIINIsValid() { var testCardIIN = TestCards.ValidCardIIN; //setup response handler var binListAPIResp = ResponseMock.GetCardIINResp(); var cardDetails = JsonConvert.DeserializeObject <GetCardDetailsDTO>(binListAPIResp.Content); _responseHandlerMock.Setup(x => x.CommitResponse(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <GetCardDetailsDTO>())) .Returns(ResponseMock.GetAppResponse(ResponseCodes.SUCCESS, null, cardDetails)); //setup File logging _loggerMock.Setup(x => x.LogInfo(It.IsAny <string>())); //setup httpClient _httpClientMock.Setup(x => x.Get($"{_baseUrlMock.Value.BinListAPI}/{testCardIIN}", It.IsAny <string>(), testCardIIN.ToString())) .ReturnsAsync(binListAPIResp); //setup queue var queueMessage = ResponseMock.GetQueueMessage(testCardIIN.ToString()); var eventId = "client.notify"; _eventPublisherMock.Setup(x => x.PublishPayload(queueMessage, eventId)); //setup database logging _inquiryCountSvcMock.Setup(x => x.LogHitCountToDb(It.IsAny <string>(), testCardIIN.ToString(), It.IsAny <GetCardDetailsDTO>())) .ReturnsAsync(1); //sevice method test var response = await _sut.GetCardDetailsWithBIN(testCardIIN); //verify event was published to the queue once _eventPublisherMock.Verify(x => x.PublishPayload(queueMessage, eventId), Times.Once); //Verify database log was made _inquiryCountSvcMock.Verify(x => x.LogHitCountToDb(It.IsAny <string>(), testCardIIN.ToString(), It.IsAny <GetCardDetailsDTO>()), Times.Once); //Verify response was logged to file _loggerMock.Verify(x => x.LogInfo(It.IsAny <string>()), Times.AtLeastOnce); response.Code.Should().Be(ResponseCodes.SUCCESS); response.Data.As <GetCardDetailsDTO>().Should().Be(cardDetails); }
public void WritenMessageWithApiExceptionContainsDetailedApiInfo() { var response = new ResponseMock { ResponseUri = new Uri("http://localhost"), StatusCode = HttpStatusCode.NotFound, ContentType = "application/json", Body = "X-GitHub-Request-Id: 111" }; var apiException = new ApiException(response); _log.Write(LogLevel.Info, "Test message", apiException); Assert.That(_log.LastMessageWritten, Does.Contain("ApiException")); Assert.That(_log.LastMessageWritten, Does.Contain("Status: NotFound")); }
public void ApplyUrlInResource() { var connector = new BasicConnector(HttpTransportMock.Object, Digest, Secret); ResourceMock.SetupProperty(r => r.Location, Url); var request = (HttpWebRequest)WebRequest.Create(Url); HttpTransportMock.Setup(t => t.CreateRequest(Url)).Returns(request); ResponseMock.SetupGet(r => r.Data).Returns(PayLoad); HttpTransportMock.Setup(t => t.Send(request, PayLoad)).Returns(ResponseMock.Object); connector.Apply(HttpMethod.Get, ResourceMock.Object, null); HttpTransportMock.Verify(t => t.CreateRequest(Url), Times.Once()); }
public void ApplyUrlInOptions() { var connector = new BasicConnector(HttpTransportMock.Object, Digest, Secret); var request = (HttpWebRequest)WebRequest.Create(Url); HttpTransportMock.Setup(t => t.CreateRequest(Url)).Returns(request); ResponseMock.SetupGet(r => r.Data).Returns(PayLoad); HttpTransportMock.Setup(t => t.Send(request, PayLoad)).Returns(ResponseMock.Object); connector.Apply(HttpMethod.Get, ResourceMock.Object, new Dictionary <string, object> { { "url", Url } }); HttpTransportMock.Verify(t => t.CreateRequest(Url), Times.Once()); }
public override void SetUp () { base.SetUp(); UrlMappingConfiguration.Current.Mappings.Add (new UrlMappingEntry (RootFunction.GetType(), "~/root.wxe")); UrlMappingConfiguration.Current.Mappings.Add (new UrlMappingEntry (SubFunction.GetType(), "~/sub.wxe")); Uri uri = new Uri ("http://localhost/root.wxe"); ResponseMock.Stub (stub => stub.ApplyAppPathModifier ("~/sub.wxe")).Return ("/session/sub.wxe").Repeat.Any(); ResponseMock.Stub (stub => stub.ApplyAppPathModifier ("/session/sub.wxe")).Return ("/session/sub.wxe").Repeat.Any (); ResponseMock.Stub (stub => stub.ApplyAppPathModifier ("~/root.wxe")).Return ("/session/root.wxe").Repeat.Any (); ResponseMock.Stub (stub => stub.ApplyAppPathModifier ("/root.wxe")).Return ("/session/root.wxe").Repeat.Any(); ResponseMock.Stub (stub => stub.ApplyAppPathModifier ("/session/root.wxe")).Return ("/session/root.wxe").Repeat.Any(); ResponseMock.Stub (stub => stub.ContentEncoding).Return (Encoding.Default).Repeat.Any(); RequestMock.Stub (stub => stub.Url).Return (uri).Repeat.Any(); RequestMock.Stub (stub => stub.ContentEncoding).Return (Encoding.Default).Repeat.Any(); }
public void ApplyPost201UpdatedLocation() { var connector = new BasicConnector(HttpTransportMock.Object, Digest, Secret); ResourceMock.SetupProperty(r => r.Location, Url); ResourceMock.SetupGet(r => r.ContentType).Returns(ContentType); var resourceData = new Dictionary <string, object>() { { "Year", 2012 } }; ResourceMock.Setup(r => r.Marshal()).Returns(resourceData); var request = (HttpWebRequest)WebRequest.Create(Url); HttpTransportMock.Setup(t => t.CreateRequest(Url)).Returns(request); PayLoad = "{\"Year\":2012}"; ResponseMock.SetupGet(r => r.Data).Returns(PayLoad); ResponseMock.SetupGet(r => r.StatusCode).Returns(HttpStatusCode.Created); const string UpdatedLocation = "http://NewLocation.com"; ResponseMock.Setup(r => r.Header("Location")).Returns(UpdatedLocation); HttpTransportMock.Setup(t => t.Send(request, PayLoad)).Returns(ResponseMock.Object); connector.Apply(HttpMethod.Post, ResourceMock.Object, null); HttpTransportMock.Verify(t => t.CreateRequest(Url), Times.Once()); HttpTransportMock.Verify(t => t.Send(request, PayLoad), Times.Once()); Assert.That(request.Method, Is.EqualTo(HttpMethod.Post.ToString().ToUpper())); Assert.That(request.UserAgent, Is.EqualTo(connector.UserAgent.ToString())); var authorization = string.Format("Klarna {0}", Digest.Create(string.Concat(PayLoad, Secret))); Assert.That(request.Headers["Authorization"], Is.EqualTo(authorization)); Assert.That(request.Accept, Is.EqualTo(ContentType)); Assert.That(request.ContentType, Is.EqualTo(ContentType)); Assert.That(ResourceMock.Object.Location.OriginalString, Is.EqualTo(UpdatedLocation)); }
public async Task GetCardDetailsWithBIN_ShouldReturnInvalidParam_WhenCardIINIsNotValid() { var testCardIIN = TestCards.InvalidCardIIN; _responseHandlerMock.Setup(x => x.CommitResponse(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <object>())) .Returns(ResponseMock.GetAppResponse(ResponseCodes.INVALID_PARAM)); //setup File logging _loggerMock.Setup(x => x.LogInfo(It.IsAny <string>())); //sevice method test var response = await _sut.GetCardDetailsWithBIN(testCardIIN); //Verify response was logged to file _loggerMock.Verify(x => x.LogInfo(It.IsAny <string>()), Times.AtLeastOnce); response.Code.Should().Be(ResponseCodes.INVALID_PARAM); }
public void ExecuteSubFunction() { using (MockRepository.Ordered()) { ResponseMock.Expect(mock => mock.Redirect("/resumeUrl.wxe")).WhenCalled(invocation => Thread.CurrentThread.Abort()); ExecutionStateContextMock.Expect(mock => mock.SetExecutionState(Arg <PostProcessingSubFunctionState> .Is.NotNull)) .WhenCalled(invocation => CheckExecutionState((PostProcessingSubFunctionState)invocation.Arguments[0])); } MockRepository.ReplayAll(); try { _executionState.ExecuteSubFunction(WxeContext); Assert.Fail(); } catch (ThreadAbortException) { Thread.ResetAbort(); } MockRepository.VerifyAll(); }
public void ApplyGet301InfiniteLoop() { var connector = new BasicConnector(HttpTransportMock.Object, Digest, Secret); ResourceMock.SetupProperty(r => r.Location, Url); ResourceMock.SetupGet(r => r.ContentType).Returns(ContentType); // First request and response var request = (HttpWebRequest)WebRequest.Create(Url); HttpTransportMock.Setup(t => t.CreateRequest(Url)).Returns(request); ResponseMock.SetupGet(r => r.StatusCode).Returns(HttpStatusCode.MovedPermanently); ResponseMock.Setup(r => r.Header("Location")).Returns(Url.OriginalString); ResponseMock.SetupGet(r => r.Data).Returns(PayLoad); HttpTransportMock.Setup(t => t.Send(request, PayLoad)).Returns(ResponseMock.Object); var ex = Assert.Throws <ConnectorException>(() => connector.Apply(HttpMethod.Get, ResourceMock.Object, null)); Assert.That(ex.Message, Is.EqualTo("Infinite redirect loop detected.")); HttpTransportMock.Verify(t => t.CreateRequest(Url), Times.Exactly(2)); HttpTransportMock.Verify(t => t.Send(request, PayLoad), Times.Exactly(2)); }
public void SetUp() { responseMock = new ResponseMock(); requestMock = new RequestMock(responseMock); requestFactoryMock = new RequestFactoryMock(requestMock); }
public void WritenMessageWithApiExceptionContainsDetailedApiInfo() { var response = new ResponseMock { ResponseUri = new Uri("http://localhost"), StatusCode = HttpStatusCode.NotFound, ContentType = "application/json", Body = "X-GitHub-Request-Id: 111" }; var apiException = new ApiException(response); _log.Write(LogLevel.Info, "Test message", apiException); Assert.That(_log.LastMessageWritten, Does.Contain("ApiException")); Assert.That(_log.LastMessageWritten, Does.Contain("Status: NotFound")); }
public RequestMock(ResponseMock responseMock) { this.responseMock = responseMock; }
public void SetUp() { responseMock = new ResponseMock(); requestMock = new RequestMock(responseMock); requestFactoryMock = new RequestFactoryMock(requestMock); }
public RequestMock(ResponseMock responseMock) { this.responseMock = responseMock; }