Ejemplo n.º 1
0
        //Mock API Call and unit test for the API call with returning mock RecentStatementList.
        public async Task RecentStatementControllerTest_Success()
        {
            // Arrange
            string merchantNbr = "542929801430265";

            MockRecentStatementRepository mockRecentStatementRepository = new MockRecentStatementRepository();
            ApiResult <ICollection <Wp.CIS.LynkSystems.Model.RecentStatement> > expectedResult = mockRecentStatementRepository.GetMockData();

            IDistributedCache          mockCache  = Substitute.For <IDistributedCache>();
            ILoggingFacade             fakeLogger = FakeLogger();
            IRecentStatementRepository mockRepo   = Substitute.For <IRecentStatementRepository>();
            IStringLocalizer <RecentStatementController> localizer
                = Substitute.For <IStringLocalizer <RecentStatementController> >();
            IRecentStatementApi mockRecentStatementApi = Substitute.For <IRecentStatementApi>();

            IOperation fakeOperation = Substitute.For <Operation>(mockCache);

            fakeOperation.WhenForAnyArgs(x => x.RetrieveCache(Arg.Any <string>(), Arg.Any <ICollection <Wp.CIS.LynkSystems.Model.RecentStatement> >())).DoNotCallBase();
            fakeOperation.WhenForAnyArgs(x => x.AddCacheAsync(Arg.Any <string>(), Arg.Any <ICollection <Wp.CIS.LynkSystems.Model.RecentStatement> >())).DoNotCallBase();
            RecentStatementController controller = new RecentStatementController(mockCache, mockRecentStatementApi, localizer, fakeOperation, fakeLogger);

            mockRecentStatementApi.GetRecentStatementAsync(merchantNbr).ReturnsForAnyArgs(expectedResult);
            // Act
            var recentStatementList = await controller.GetRecentStatement(merchantNbr);

            var actualRecord = ((Microsoft.AspNetCore.Mvc.ObjectResult)recentStatementList).Value;

            // Assert
            Assert.Equal(((IList <Wp.CIS.LynkSystems.Model.RecentStatement>)actualRecord).Count, 1);
            Assert.Equal(actualRecord, expectedResult.Result);
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> GetRecentStatement(string merchantNbr)
        {
            await _loggingFacade.LogAsync(new LogEntry(LogLevels.Info, "Starting GetRecentStatement " + merchantNbr, "RecentStatementController.cs", "GetRecentStatement"), CancellationToken.None);

            if (!ModelState.IsValid)
            {
                await _loggingFacade.LogAsync(new LogEntry(LogLevels.Error, ModelState.ToString(), "RecentStatementController.cs", "GetRecentStatement"), CancellationToken.None);

                return(BadRequest(ModelState));
            }
            try
            {
                string key  = "recentStatement_" + merchantNbr;
                var    data = _operation.RetrieveCache(key, new List <Model.RecentStatement>());
                if (data == null)
                {
                    //since no data in cache, now get data from DB
                    var result = await _recentStatementApi.GetRecentStatementAsync(merchantNbr);

                    if (result.Result != null && result.Result.Count > 0)
                    {
                        await _operation.AddCacheAsync(key, result.Result);

                        return(Ok(result.Result));
                    }
                    else
                    {
                        var msg = this._localizer["NoDataFound"]?.Value;
                        await _loggingFacade.LogAsync(new LogEntry(LogLevels.Error, msg + "GetRecentStatement Unsuccessful", "RecentStatementController.cs", "GetRecentStatement"), CancellationToken.None);

                        return(this.StatusCode((int)System.Net.HttpStatusCode.OK, msg));
                    }
                }
                await _loggingFacade.LogAsync(new LogEntry(LogLevels.Info, "GetRecentStatement Successful", "RecentStatementController.cs", "GetRecentStatement"), CancellationToken.None);

                return(Ok(data));
            }
            catch (Exception ex)
            {
                var msg = this._localizer?["GenericError"]?.Value;
                await _loggingFacade.LogExceptionAsync(ex, this.HttpContext?.Request?.Headers["UserName"], LogLevels.Error, "Error in GetRecentStatement()", CancellationToken.None);

                return(this.StatusCode((int)System.Net.HttpStatusCode.InternalServerError, msg));
            }
        }
Ejemplo n.º 3
0
        public async Task RecentStatementControllerTest_NoDataFound()
        {
            // Arrange
            string merchantNbr = "542929801430265";
            MockRecentStatementRepository mockRecentStatementRepository = new MockRecentStatementRepository();
            ApiResult <ICollection <Wp.CIS.LynkSystems.Model.RecentStatement> > expectedResult = mockRecentStatementRepository.GetMockData();

            IDistributedCache mockCache = Substitute.For <IDistributedCache>();

            IStringLocalizer <RecentStatementController> localizer
                = Substitute.For <IStringLocalizer <RecentStatementController> >();
            string key             = "NoDataFound";
            string value           = "No data found for provided lid.";
            var    localizedString = new LocalizedString(key, value);

            localizer[Arg.Any <string>()].ReturnsForAnyArgs(localizedString);

            IRecentStatementApi mockRecentStatementApi = Substitute.For <IRecentStatementApi>();
            IOperation          fakeOperation          = Substitute.For <Operation>(mockCache);

            fakeOperation.WhenForAnyArgs(x => x.RetrieveCache(Arg.Any <string>(), Arg.Any <ICollection <Wp.CIS.LynkSystems.Model.RecentStatement> >())).DoNotCallBase();
            RecentStatementController controller = new RecentStatementController(mockCache, mockRecentStatementApi, localizer, fakeOperation, FakeLogger());
            ApiResult <ICollection <Wp.CIS.LynkSystems.Model.RecentStatement> > result = new ApiResult <ICollection <Wp.CIS.LynkSystems.Model.RecentStatement> >();

            mockRecentStatementApi.GetRecentStatementAsync(merchantNbr).ReturnsForAnyArgs(result);

            // Act
            var recentStatementList = await controller.GetRecentStatement(merchantNbr);

            var actualRecord = ((Microsoft.AspNetCore.Mvc.ObjectResult)recentStatementList);

            // Assert

            Assert.Equal(actualRecord.StatusCode, 200);

            Assert.Equal(actualRecord.Value, "No data found for provided lid.");
        }