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();
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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."));
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }
示例#8
0
        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);
        }
示例#9
0
        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());
        }
示例#10
0
        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);
        }
示例#13
0
        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"));
        }
示例#15
0
        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());
        }
示例#16
0
        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();
    }
示例#18
0
        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));
        }
示例#19
0
        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();
        }
示例#21
0
        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;
 }