From cd261a55568e2d073689f09f302baeaab118f7ff Mon Sep 17 00:00:00 2001 From: Reginald Cherenfant Jasmin Date: Thu, 31 Aug 2023 01:57:14 -0400 Subject: [PATCH] Test project for location service updated --- .../LocationsServiceTest.cs | 247 +++++++++--------- .../MockData.cs | 41 ++- 2 files changed, 167 insertions(+), 121 deletions(-) diff --git a/DamageAssesmentApi/DamageAssesment.Api.Locations.Test/LocationsServiceTest.cs b/DamageAssesmentApi/DamageAssesment.Api.Locations.Test/LocationsServiceTest.cs index 2d15662..8be1910 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Locations.Test/LocationsServiceTest.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Locations.Test/LocationsServiceTest.cs @@ -13,131 +13,144 @@ namespace DamageAssesment.Api.Locations.Test { public class LocationsServiceTest { - - [Fact(DisplayName = "Get Location using Location ID")] - public async Task GetLocationsUsingLocationID() + //Test for locations + [Fact(DisplayName = "Get Locations - Ok case")] + public async Task GetLocationsAsync_ShouldReturnStatusCode200() { - var options = new DbContextOptionsBuilder() - .UseInMemoryDatabase(nameof(GetLocationsUsingLocationID)) - .Options; + var mockLocationService = new Mock(); + var mockResponse = await MockData.getOkResponseLocation(); + mockLocationService.Setup(service => service.GetLocationsAsync()).ReturnsAsync(mockResponse); - var dbContext = new LocationDbContext(options); - CreateLocations(dbContext); - //Mapping - var LocationsProfile = new LocationProfile(); - var configuration = new MapperConfiguration(cfg => cfg.AddProfile(LocationsProfile)); - var mapper = new Mapper(configuration); + var locationProvider = new LocationsController(mockLocationService.Object); + var result = (OkObjectResult)await locationProvider.GetLocationsAsync(); - var LocationsProvider = new LocationsProvider(dbContext, null, mapper); - //Testmethode - var Location = await LocationsProvider.GetLocationByIdAsync("Loc3"); - - Assert.True(Location.IsSuccess); - Assert.Null(Location.ErrorMessage); - } - [Fact(DisplayName = "Get Locations")] - public async Task GetAllLocationsTest() - { - var options = new DbContextOptionsBuilder() - .UseInMemoryDatabase(nameof(GetLocationsUsingLocationID)) - .Options; - - var dbContext = new LocationDbContext(options); - CreateLocations(dbContext); - //Mapping - var LocationsProfile = new LocationProfile(); - var configuration = new MapperConfiguration(cfg => cfg.AddProfile(LocationsProfile)); - var mapper = new Mapper(configuration); - - var LocationsProvider = new LocationsProvider(dbContext, null, mapper); - //Testmethode - var Location = await LocationsProvider.GetLocationsAsync(); - - Assert.True(Location.IsSuccess); - Assert.Null(Location.ErrorMessage); + Assert.Equal(200, result.StatusCode); } - [Fact(DisplayName = "Delete Location by Id")] - public async Task DeleteLocationTest() + + [Fact(DisplayName = "Get Locations - NoContent Case")] + public async Task GetLocationsAsync_ShouldReturnStatusCode204() { - var options = new DbContextOptionsBuilder() - .UseInMemoryDatabase(nameof(GetLocationsUsingLocationID)) - .Options; + var mockLocationService = new Mock(); + var mockResponse = await MockData.getNotFoundResponseLocation(); + mockLocationService.Setup(service => service.GetLocationsAsync()).ReturnsAsync(mockResponse); - var dbContext = new LocationDbContext(options); - CreateLocations(dbContext); - //Mapping - var LocationsProfile = new LocationProfile(); - var configuration = new MapperConfiguration(cfg => cfg.AddProfile(LocationsProfile)); - var mapper = new Mapper(configuration); + var locationProvider = new LocationsController(mockLocationService.Object); + var result = (NoContentResult)await locationProvider.GetLocationsAsync(); - var LocationsProvider = new LocationsProvider(dbContext, null, mapper); - //Testmethode - var Location = await LocationsProvider.DeleteLocationAsync("Loc2"); - - Assert.True(Location.IsSuccess); - Assert.NotNull(Location.ErrorMessage); + Assert.Equal(204, result.StatusCode); } - [Fact(DisplayName = "Add Location")] - public async Task AddLocationTest() + + [Fact(DisplayName = "Get Locations by Id- Ok case")] + public async Task GetLocationsByIdAsync_ShouldReturnStatusCode200() { - var options = new DbContextOptionsBuilder() - .UseInMemoryDatabase(nameof(GetLocationsUsingLocationID)) - .Options; + var mockLocationService = new Mock(); + var mockResponse = await MockData.getOkResponseLocation("Loc1"); + mockLocationService.Setup(service => service.GetLocationByIdAsync("Loc1")).ReturnsAsync(mockResponse); - var dbContext = new LocationDbContext(options); - CreateLocations(dbContext); - //Mapping - var LocationsProfile = new LocationProfile(); - var configuration = new MapperConfiguration(cfg => cfg.AddProfile(LocationsProfile)); - var mapper = new Mapper(configuration); - var LocationsProvider = new LocationsProvider(dbContext, null, mapper); - //Testmethode - Models.Location newLocation = new Models.Location() { Id = "Loc9", RegionId = "1", Name = "Test 1", MaintenanceCenter = "1", SchoolType = "US" }; - var Location = await LocationsProvider.PostLocationAsync(newLocation); + var locationProvider = new LocationsController(mockLocationService.Object); + var result = (OkObjectResult)await locationProvider.GetLocationByIdAsync("Loc1"); - Assert.True(Location.IsSuccess); - Assert.Null(Location.ErrorMessage); + Assert.Equal(200, result.StatusCode); } - [Fact(DisplayName = "Update Location")] - public async Task UpdateLocationTest() - { - var options = new DbContextOptionsBuilder() - .UseInMemoryDatabase(nameof(GetLocationsUsingLocationID)) - .Options; - var dbContext = new LocationDbContext(options); - CreateLocations(dbContext); - //Mapping - var LocationsProfile = new LocationProfile(); - var configuration = new MapperConfiguration(cfg => cfg.AddProfile(LocationsProfile)); - var mapper = new Mapper(configuration); - var LocationsProvider = new LocationsProvider(dbContext, null, mapper); - //Testmethode - Models.Location updateLocation = new Models.Location() { Id = "Loc1", RegionId = "1", Name = "Tampa", MaintenanceCenter = "1", SchoolType = "NA" }; - var Location = await LocationsProvider.UpdateLocationAsync(updateLocation); - var modified = dbContext.Locations.FirstOrDefault(a => a.Id == updateLocation.Id); - Assert.True(Location.IsSuccess); - Assert.NotNull(Location.ErrorMessage); - } - private static void CreateLocations(LocationDbContext dbContext) - { - //Create sample data for testing - if (dbContext.Locations.Count() == 0) - { - for (int i = 1; i < 6; i++) - { - dbContext.Locations.Add(new Db.Location() - { - Id = "Loc"+i.ToString(), - RegionId = i.ToString(), - Name = "Test Location" + Guid.NewGuid().ToString(), - MaintenanceCenter = i.ToString(), - SchoolType = "US" - }); - } - dbContext.SaveChanges(); - } + + [Fact(DisplayName = "Get Locations By Id - NoFound Case")] + public async Task GetLocationsByIdAsync_ShouldReturnStatusCode404() + { + var mockLocationService = new Mock(); + var mockResponse = await MockData.getLocationNotFoundResponse(); + mockLocationService.Setup(service => service.GetLocationByIdAsync("Loc1")).ReturnsAsync(mockResponse); + + var locationProvider = new LocationsController(mockLocationService.Object); + var result = (NotFoundResult)await locationProvider.GetLocationByIdAsync("Loc1"); + + Assert.Equal(404, result.StatusCode); + } + + + [Fact(DisplayName = "Post Location - Ok case")] + public async Task PostLocationAsync_ShouldReturnStatusCode200() + { + var mockLocationService = new Mock(); + var mockResponse = await MockData.getOkResponseLocation("Loc1"); + var mockInputLocation = new Models.Location { Id = "Loc1", RegionId = "R1", Name = "Location 1", SchoolType = "US", MaintenanceCenter = "1" }; + mockLocationService.Setup(service => service.PostLocationAsync(mockInputLocation)).ReturnsAsync(mockResponse); + + var locationProvider = new LocationsController(mockLocationService.Object); + var result = (OkObjectResult)await locationProvider.CreateLocation(mockInputLocation); + + Assert.Equal(200, result.StatusCode); + } + + [Fact(DisplayName = "Post Location - BadRequest case")] + public async Task PostLocationAsync_ShouldReturnStatusCode400() + { + var mockLocationService = new Mock(); + var mockResponse = await MockData.getLocationNotFoundResponse(); + var mockInputLocation = new Models.Location { Id = "Loc1", RegionId = "R1", Name = "Location 1", SchoolType = "US", MaintenanceCenter = "1" }; + mockLocationService.Setup(service => service.PostLocationAsync(mockInputLocation)).ReturnsAsync(mockResponse); + + var locationProvider = new LocationsController(mockLocationService.Object); + var result = (BadRequestResult)await locationProvider.CreateLocation(mockInputLocation); + + Assert.Equal(400, result.StatusCode); + } + + + [Fact(DisplayName = "Put Location - Ok case")] + public async Task PutLocationAsync_ShouldReturnStatusCode200() + { + var mockLocationService = new Mock(); + var mockResponse = await MockData.getLocation(true, "update success"); + var mockInputLocation = new Models.Location { Id = "Loc1", RegionId = "R1", Name = "Location 1", SchoolType = "US", MaintenanceCenter = "1" }; + mockLocationService.Setup(service => service.UpdateLocationAsync(mockInputLocation)).ReturnsAsync(mockResponse); + + var locationProvider = new LocationsController(mockLocationService.Object); + var result = (OkObjectResult)await locationProvider.UpdateLocation(mockInputLocation); + + Assert.Equal(200, result.StatusCode); + } + + [Fact(DisplayName = "Put Location - NotFound case")] + public async Task PutLocationAsync_ShouldReturnStatusCode404() + { + var mockLocationService = new Mock(); + var mockResponse = await MockData.getLocation(false, null); + var mockInputLocation = new Models.Location { Id = "Loc1", RegionId = "R1", Name = "Location 1", SchoolType = "US", MaintenanceCenter = "1" }; + mockLocationService.Setup(service => service.UpdateLocationAsync(mockInputLocation)).ReturnsAsync(mockResponse); + + var locationProvider = new LocationsController(mockLocationService.Object); + var result = (NotFoundResult)await locationProvider.UpdateLocation(mockInputLocation); + + Assert.Equal(404, result.StatusCode); + } + + + [Fact(DisplayName = "Delete Location - Ok case")] + public async Task DeleteLocationAsync_ShouldReturnStatusCode200() + { + var mockLocationService = new Mock(); + var mockResponse = await MockData.getLocation(true, "delete success"); + mockLocationService.Setup(service => service.DeleteLocationAsync("Loc1")).ReturnsAsync(mockResponse); + + var locationProvider = new LocationsController(mockLocationService.Object); + var result = (OkObjectResult)await locationProvider.DeleteLocation("Loc1"); + + Assert.Equal(200, result.StatusCode); + } + + [Fact(DisplayName = "Delete Location - NotFound case")] + public async Task DeleteLocationAsync_ShouldReturnStatusCode404() + { + var mockLocationService = new Mock(); + var mockResponse = await MockData.getLocation(false, null); + mockLocationService.Setup(service => service.DeleteLocationAsync("Loc1")).ReturnsAsync(mockResponse); + + var locationProvider = new LocationsController(mockLocationService.Object); + var result = (NotFoundResult)await locationProvider.DeleteLocation("Loc1"); + + Assert.Equal(404, result.StatusCode); } //Tests for regions @@ -194,7 +207,7 @@ namespace DamageAssesment.Api.Locations.Test } [Fact(DisplayName = "Post Region - Ok case")] - public async Task PostSurveyAsync_ShouldReturnStatusCode200() + public async Task PostRegionAsync_ShouldReturnStatusCode200() { var mockRegionService = new Mock(); var mockResponse = await MockData.getOkResponse("1"); @@ -208,7 +221,7 @@ namespace DamageAssesment.Api.Locations.Test } [Fact(DisplayName = "Post Region - BadRequest case")] - public async Task PostSurveyAsync_ShouldReturnStatusCode400() + public async Task PostRegionAsync_ShouldReturnStatusCode400() { var mockRegionService = new Mock(); var mockResponse = await MockData.getBadRequestResponse(); @@ -236,7 +249,7 @@ namespace DamageAssesment.Api.Locations.Test } [Fact(DisplayName = "Put Region - NotFound case")] - public async Task PutSurveyAsync_ShouldReturnStatusCode404() + public async Task PutRegionAsync_ShouldReturnStatusCode404() { var mockRegionService = new Mock(); var mockResponse = await MockData.getNotFoundResponse(); @@ -250,7 +263,7 @@ namespace DamageAssesment.Api.Locations.Test } [Fact(DisplayName = "Put Region - BadRequest case")] - public async Task PutSurveyAsync_ShouldReturnStatusCode400() + public async Task PutRegionyAsync_ShouldReturnStatusCode400() { var mockRegionService = new Mock(); var mockResponse = await MockData.getBadRequestResponse(); @@ -264,7 +277,7 @@ namespace DamageAssesment.Api.Locations.Test } [Fact(DisplayName = "Delete Region - Ok case")] - public async Task DeleteSurveyAsync_ShouldReturnStatusCode200() + public async Task DeleteRegionAsync_ShouldReturnStatusCode200() { var mockRegionService = new Mock(); var mockResponse = await MockData.getOkResponse("1"); @@ -278,7 +291,7 @@ namespace DamageAssesment.Api.Locations.Test } [Fact(DisplayName = "Delete Region - NotFound case")] - public async Task DeleteSurveyAsync_ShouldReturnStatusCode404() + public async Task DeleteRegionAsync_ShouldReturnStatusCode404() { var mockRegionService = new Mock(); var mockResponse = await MockData.getNotFoundResponse(); diff --git a/DamageAssesmentApi/DamageAssesment.Api.Locations.Test/MockData.cs b/DamageAssesmentApi/DamageAssesment.Api.Locations.Test/MockData.cs index cd6b85e..dec67b8 100644 --- a/DamageAssesmentApi/DamageAssesment.Api.Locations.Test/MockData.cs +++ b/DamageAssesmentApi/DamageAssesment.Api.Locations.Test/MockData.cs @@ -17,9 +17,43 @@ namespace DamageAssesment.Api.Locations.Test public static async Task<(bool, Locations.Models.Region, string)> getOkResponse(string Id) { - var surveys = await getOkResponse(); - var survey = surveys.Item2.FirstOrDefault(s => s.Id == Id); - return (true, survey, null); + var regions = await getOkResponse(); + var region = regions.Item2.FirstOrDefault(s => s.Id == Id); + return (true, region, null); + } + + + public static async Task<(bool, IEnumerable, string)> getOkResponseLocation() + { + IEnumerable list = new List(); + + for (int i = 0; i < 10; i++) + { + list.Append(new Locations.Models.Location { Id = "Loc"+ i, RegionId = "R"+i, Name ="Location"}); + } + return (true, list, null); + } + + public static async Task<(bool, IEnumerable, string)> getNotFoundResponseLocation() + { + return (false, null, null); + } + + public static async Task<(bool, Models.Location, string)> getOkResponseLocation(string Id) + { + var locations = await getOkResponseLocation(); + var location = locations.Item2.FirstOrDefault(s => s.Id == Id); + return (true, location, null); + } + + public static async Task<(bool, string)> getLocation(bool value,string message) + { + return (value,message); + } + + public static async Task<(bool, Locations.Models.Location, string)> getLocationNotFoundResponse() + { + return (false, null, "Not Found"); } public static async Task<(bool, Locations.Models.Region, string)> getBadRequestResponse() @@ -41,6 +75,5 @@ namespace DamageAssesment.Api.Locations.Test { return new Locations.Models.Region { Id = "R99", Name = "Region 99", Abbreviation = "A99" }; } - } }