//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); }
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)); } }
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."); }