public void isRouteNameInvalid_InvalidRouteName_ErrorReturnedRouteNotCreated(string routeName) { DateTime regionNextDate = dateCalculation.GetOneDate(rOne); Route routeOne = new Route() { routeName = routeName, regionID = rOne.regionID, region = rOne, completed = false, routeDate = regionNextDate }; List <ValidationResult> results = ClassValidator <Route> .Validate(routeOne); Assert.Single(results); switch (routeOne.routeName.Length) { case 0: Assert.Equal("Route Name cannot be empty", results[0].ToString()); break; case int n when n > 0 && n < 2: Assert.Equal("Route Name must be at least 2 characters", results[0].ToString()); break; case int n when n > 40: Assert.Equal("Route Name cannot be greater than 40 characters", results[0].ToString()); break; } }
public async void IsRouteCreatedAfterRouteCompletion_RouteSetToComplete_RouteIsCreated() { _webApp.Load(_webApp.DBContext); Route updateRoute = _webApp.DBContext.Route.FirstOrDefault(r => !r.completed); //Getting the first Incomplete Route Assert.NotNull(updateRoute); //Region region = _webApp.DBContext.Region.Where(reg => reg.regionID == updateRoute.regionID).First(); //Get the Region the previous Route corresponds to Region region = updateRoute.region; updateRoute.completed = true; //Set the Route to Completed //convert the Route to a string for posting to the database var StringContent = new StringContent(JsonConvert.SerializeObject(updateRoute), Encoding.UTF8, "application/json"); //send a PUT request to API to update the Route to completed HttpResponseMessage response = await _client.PutAsync("api/Routes/" + updateRoute.routeID, StringContent); List <Route> newRoute = _webApp.DBContext.Route.Where(r => r.regionID == region.regionID && !r.completed).ToList(); DateCalculation dateCalculation = new DateCalculation(); Assert.Single(newRoute); Assert.Equal(updateRoute.routeName, newRoute[0].routeName); Assert.Equal(updateRoute.regionID, newRoute[0].regionID); Assert.False(newRoute[0].completed); Assert.False(newRoute[0].inactive); Assert.Equal(dateCalculation.GetOneDate(region), newRoute[0].routeDate); }
public async Task <IActionResult> DeleteRoute([FromRoute] int id) { //If we failed the Authorize claims check, the response code will be set to 401 if (this.Response.StatusCode == 401) { return(Unauthorized()); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } Route result = (Route)await _context.Route.FindAsync(id); if (result == null) { return(BadRequest("Archiving Failed - Route ID was not found")); } if (!result.inactive) { result.inactive = true; _context.Route.Update(result); await _context.SaveChangesAsync(); } if (_context.Route.AsNoTracking().Where(r => r.routeID == id).Single().inactive) { //Get Region associated with archived Route Region region = _context.Region.AsNoTracking().Where(re => re.regionID == result.regionID).Single(); //If the Region is ACTIVE and there are no INCOMPLETE Routes associated with the Region if (!region.inactive && _context.Route.AsNoTracking().Where(r => r.regionID == region.regionID && !r.inactive && !r.completed).Count() == 0) { DateCalculation calc = new DateCalculation(); Route newRoute = new Route { //routeID = default(int), routeName = result.routeName, regionID = region.regionID, completed = false, inactive = false, routeDate = calc.GetOneDate(region) }; await _context.Route.AddAsync(newRoute); } await _context.SaveChangesAsync(); return(Ok("Route " + result.routeName + " was archived")); } else { return(BadRequest()); } }
public async void IsRouteCreatedForRegion_RegionIsCreated_RouteIsCreated() { _webApp.Load(_webApp.DBContext); DateTime today = DateTime.Now; //Get Today's date //New Region object to add to DB Region newRegion = new Region { regionName = "Candyland", frequency = 10, firstDate = today.AddDays(1.0), inactive = false }; //convert the Region to a string for posting to the database var StringContent = new StringContent(JsonConvert.SerializeObject(newRegion), Encoding.UTF8, "application/json"); //send a post request to the api with the Subscriber object in JSON form HttpResponseMessage response = await _client.PostAsync("api/Regions", StringContent); //get the response from the api and read it into a string string responseString = await response.Content.ReadAsStringAsync(); //deserialize the response into a Region object Region postRegion = JsonConvert.DeserializeObject <Region>(responseString); //created status code is 201 Assert.Equal(HttpStatusCode.Created, response.StatusCode); int regionID = postRegion.regionID; //Get returned region's ID string dateString = dateCalculation.GetOneDate(postRegion).ToString("MMMM dd, yyyy"); //Get returned region's next pickup date in format MMMM dd, yyyy string expectedRouteName = postRegion.regionName + " - " + dateString; //Concatenate region name and date string togethe "RegionName - NextPickupDate" Route newRoute = _webApp.DBContext.Route.Where(r => r.regionID == regionID && r.completed == false).Single(); Assert.Equal(expectedRouteName, newRoute.routeName); //Check Route Name is as expected "RegionName - NextPickupDate" Assert.Equal(regionID, newRoute.regionID); //Check Route's Region ID matches the added Region's Assert.False(newRoute.completed); //Check Route's completed status is false Assert.False(newRoute.inactive); //Check Route's inactive status is false }
public IActionResult GetSubscriberDates([FromRoute] int regionID) { //If we failed the Authorize claims check, the response code will be set to 401 if (this.Response.StatusCode == 401) { return(Unauthorized()); } //Declare The Util method so we can call it later DateCalculation dc = new DateCalculation(); //Get all the Regions From the DB Region region = _context.Region.FirstOrDefault(r => r.regionID == regionID); //Return the results of the Helper method along with OK as an indication of success return(Ok(dc.GetOneDate(region))); }
/// <summary> /// Helper Method for loading Routes into context /// </summary> /// <param name="context"></param> private List <Route> loadRoutes(List <Region> regions) { //DateTime date = DateTime.Today; //Gets todays date. Later used to ensure dates are in the future //List<Region> regions = context.Region.AsNoTracking().ToList<Region>(); //Gets Regions from context. Needed to assign required regionID and region properties List <Route> routes = new List <Route>() //Creating route objects. Dates are generated based on region's first pickup date. Set it up to generate the next three upcoming sets of route dates { //Week 1 Routes new Route() { routeName = "S90 A Past Route", regionID = regions[8].regionID, region = regions[8], completed = false, routeDate = regions[8].firstDate, optoutLocationRouteList = new List <LocationRoute>() }, new Route() { routeName = "Logan's Loop", regionID = regions[0].regionID, region = regions[0], completed = false, routeDate = regions[8].firstDate.AddDays(1.0), optoutLocationRouteList = new List <LocationRoute>() }, new Route() { routeName = "Nathan's Circuit", regionID = regions[1].regionID, region = regions[1], completed = false, routeDate = regions[8].firstDate.AddDays(2.0), optoutLocationRouteList = new List <LocationRoute>() }, new Route() { routeName = "Original Name 3", regionID = regions[2].regionID, region = regions[2], completed = false, routeDate = regions[8].firstDate.AddDays(3.0), optoutLocationRouteList = new List <LocationRoute>() }, new Route() { routeName = "S90 Active Route", regionID = regions[6].regionID, region = regions[6], completed = false, routeDate = regions[8].firstDate.AddDays(4.0), optoutLocationRouteList = new List <LocationRoute>() }, new Route() { routeName = "S90 Inactive Route One", regionID = regions[7].regionID, region = regions[7], completed = false, routeDate = regions[8].firstDate.AddDays(5.0), optoutLocationRouteList = new List <LocationRoute>() }, new Route() { routeName = "S90 Inactive Route Two", regionID = regions[9].regionID, region = regions[9], completed = false, routeDate = regions[8].firstDate.AddDays(5.0), optoutLocationRouteList = new List <LocationRoute>() }, new Route() { routeName = "Way to the New World", regionID = regions[10].regionID, region = regions[10], completed = false, routeDate = regions[8].firstDate, optoutLocationRouteList = new List <LocationRoute>() }, //Week 2 Routes new Route() { routeName = "Logan's Loop", regionID = regions[0].regionID, region = regions[0], completed = true, routeDate = dateCalculation.GetOneDate(regions[0]).AddDays(7.0 * regions[0].frequency), optoutLocationRouteList = new List <LocationRoute>() }, new Route() { routeName = "Nathan's Circuit", regionID = regions[1].regionID, region = regions[1], completed = true, routeDate = dateCalculation.GetOneDate(regions[1]).AddDays(7.0 * regions[1].frequency), optoutLocationRouteList = new List <LocationRoute>() }, new Route() { routeName = "Original Name 3", regionID = regions[2].regionID, region = regions[2], completed = true, routeDate = dateCalculation.GetOneDate(regions[2]).AddDays(7.0 * regions[2].frequency), optoutLocationRouteList = new List <LocationRoute>() }, //Week 3 Routes new Route() { routeName = "Logan's Loop", regionID = regions[0].regionID, region = regions[0], completed = true, routeDate = dateCalculation.GetOneDate(regions[0]).AddDays(7.0 * 2.0 * regions[0].frequency), optoutLocationRouteList = new List <LocationRoute>() }, new Route() { routeName = "Nathan's Circuit", regionID = regions[1].regionID, region = regions[1], completed = true, routeDate = dateCalculation.GetOneDate(regions[1]).AddDays(7.0 * 2.0 * regions[1].frequency), optoutLocationRouteList = new List <LocationRoute>() }, new Route() { routeName = "Original Name 3", regionID = regions[2].regionID, region = regions[2], completed = true, routeDate = dateCalculation.GetOneDate(regions[2]).AddDays(7.0 * 2.0 * regions[2].frequency), optoutLocationRouteList = new List <LocationRoute>() }, //Story 87 routes new Route() { routeName = "Route Z", regionID = regions[3].regionID, region = regions[3], completed = true, routeDate = new DateTime(2020, 2, 20), optoutLocationRouteList = new List <LocationRoute>() }, new Route() { routeName = "Route Z", regionID = regions[3].regionID, region = regions[3], completed = true, routeDate = new DateTime(2020, 2, 3), optoutLocationRouteList = new List <LocationRoute>() }, new Route() { routeName = "Route Z", regionID = regions[3].regionID, region = regions[3], completed = true, routeDate = new DateTime(2020, 1, 25), optoutLocationRouteList = new List <LocationRoute>() }, new Route() { routeName = "Route Z", regionID = regions[3].regionID, region = regions[3], completed = true, routeDate = new DateTime(2020, 1, 15), optoutLocationRouteList = new List <LocationRoute>() }, new Route() { routeName = "Route Z", regionID = regions[3].regionID, region = regions[3], completed = true, routeDate = new DateTime(2020, 1, 5), optoutLocationRouteList = new List <LocationRoute>() } }; return(routes); }
public async Task <IActionResult> PutRoute([FromRoute] int id, [FromBody] Route route) { //If we failed the Authorize claims check, the response code will be set to 401 if (this.Response.StatusCode == 401) { return(Unauthorized()); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (id != route.routeID) { return(BadRequest()); } //Get the date of the corresponding Route in the DB. Using "AsNoTracking" to prevent the entity from being tracked as information is being read, not edited DateTime dbRouteDate = _context.Route.AsNoTracking().Where(r => r.routeID == id).Single().routeDate; //If the incoming Route's date is in the past, and the date has been changed, return an error if (route.routeDate.Date < DateTime.Now.Date && !route.routeDate.ToShortDateString().Equals(dbRouteDate.ToShortDateString())) { //Return a Bad Request is the incoming Route's date was chnaged to a date in the past return(BadRequest(new ValidationResult("Invalid Date", new[] { "routeDate" }))); } else { _context.Route.Update(route); } try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!RouteExists(id)) { return(NotFound("Route was not found")); } else { throw; } } CompareModels cmpRoutes = new CompareModels(); //Route dbRoute = (Route) await _context.Route.FindAsync(id); Route dbRoute = _context.Route.AsNoTracking().Where(r => r.routeID == id).Single(); dbRoute.region = _context.Region.AsNoTracking().Single(reg => reg.regionID == dbRoute.regionID); //Route dbRoute = (Route)await _context.Route.FindAsync(id); if (cmpRoutes.CompareRoutes(dbRoute, route) == 0) { //If original route was incomplete and updated Route is complete, //no incomplete Routes exist for the Region //and the Region is Active, Create a new Route if (dbRoute.completed && _context.Route.AsNoTracking().Where(r => r.regionID == route.regionID && !r.inactive && !r.completed).Count() == 0 && _context.Region.AsNoTracking().Where(r => r.regionID == route.regionID).FirstOrDefault().inactive == false) { Region dbRegion = _context.Region.AsNoTracking().Where(r => r.regionID == route.regionID).FirstOrDefault(); //Get the associated Region for the Route DateCalculation calc = new DateCalculation(); //Create a new Route object with values taken from old Route Route newRoute = new Route { routeName = route.routeName, regionID = dbRegion.regionID, region = dbRegion, completed = false, inactive = false, routeDate = calc.GetOneDate(dbRegion) }; //Add the new Route to DB and save it await _context.Route.AddAsync(newRoute); } await _context.SaveChangesAsync(); //Return resulting updated Route return(Ok(dbRoute)); } else { return(BadRequest()); } }