public HttpResponseMessage Delete(int id, ServiceModel.DeleteTeamViewModel deleteParameters) { if (!ModelState.IsValid) { return(new HttpResponseMessage <JsonValue>(ModelState.ToJson(), HttpStatusCode.BadRequest)); } var team = context.GetAll <DomainModel.Team>() .FirstOrDefault(u => u.Id == id); //rest spec says we should not throw an error in this case ( delete requests should be idempotent) if (team == null) { throw new HttpResponseException("Invalid Team", HttpStatusCode.BadRequest); } var editor = team.TeamMembers .FirstOrDefault(tm => tm.Role == DomainModel.TeamUserRole.Administrator && tm.UserId == deleteParameters.UserId); if (editor == null) { ModelState.AddModelError("", "User does not have permissions to edit team"); return(new HttpResponseMessage <JsonValue>(ModelState.ToJson(), HttpStatusCode.BadRequest)); } context.Delete(team); context.SaveChanges(); return(new HttpResponseMessage(HttpStatusCode.NoContent)); }
private static void TestContext() { Console.WriteLine("Running Tests"); User newUser; User newUser2; Team newTeam; Thing thing; using (var context = new TeamThingContext()) { //add some new data newUser = new User("*****@*****.**"); newUser.FirstName = "Josh"; newUser.LastName = "Holt"; context.Add(newUser); context.SaveChanges(); //add some new data newUser2 = new User("*****@*****.**"); newUser2.FirstName = "Josh2"; newUser2.LastName = "Holt2"; context.Add(newUser2); context.SaveChanges(); newTeam = new Team("Closed Team", newUser, false); newTeam.TeamMembers.Add(new TeamUser(newTeam, newUser2)); context.Add(newTeam); context.SaveChanges(); thing = new Thing(newTeam, newUser); thing.Description = "Test Thing"; thing.AssignedTo.Add(new UserThing(thing, newUser2, newUser)); thing.AssignedTo.Add(new UserThing(thing, newUser, newUser)); context.Add(thing); context.SaveChanges(); } using (var context = new TeamThingContext()) { newUser = context.GetAll<User>().FirstOrDefault(p => p.EmailAddress == newUser.EmailAddress); newUser2 = context.GetAll<User>().FirstOrDefault(p => p.EmailAddress == newUser2.EmailAddress); newTeam = context.GetAll<Team>().FirstOrDefault(p => p.Name == newTeam.Name); thing = context.GetAll<Thing>().FirstOrDefault(p => p.Description == thing.Description); ////recall the saved items //IProduct retrievedProduct = context.Products.FirstOrDefault(p => p.Name == newProduct.Name); //ICategory retrievedCategory = context.Categories.FirstOrDefault(p => p.Name == newCategory.Name); //Debug.Assert(retrievedProduct != null); //Debug.Assert(retrievedCategory!= null); //Debug.Assert(retrievedProduct.Category == retrievedCategory); //Debug.Assert(retrievedCategory.Products.Contains(retrievedProduct)); Debug.Assert(newUser != null); Debug.Assert(newUser2 != null); Debug.Assert(newTeam != null); Debug.Assert(thing != null); Debug.Assert(thing.Owner != null); Debug.Assert(newTeam.Owner != null); Debug.Assert(newUser.Teams.Count > 0); Debug.Assert(newUser2.Teams.Count > 0); Debug.Assert(newUser2.Things.Count > 0); Debug.Assert(newTeam.TeamMembers.Count > 0); //Debug.Assert(newTeam.TeamThings.Count > 0); Debug.Assert(thing.AssignedTo.Count > 0); // //clean up // //Category is marked as dependent, so it will be removed automatically with the product context.Delete(thing); context.Delete(newTeam); context.Delete(newUser); context.Delete(newUser2); context.SaveChanges(); } Console.WriteLine("All Tests Pass!"); }
private static void TestContext() { Console.WriteLine("Running Tests"); User newUser; User newUser2; Team newTeam; Thing thing; using (var context = new TeamThingContext()) { //add some new data newUser = new User("UNIT TEST USER"); newUser.FirstName = "Josh"; newUser.LastName = "Holt"; context.Add(newUser); context.SaveChanges(); //add some new data newUser2 = new User("UNIT TEST USER 2"); newUser2.FirstName = "Josh2"; newUser2.LastName = "Holt2"; context.Add(newUser2); context.SaveChanges(); newTeam = new Team("UNIT TEST TEAM", newUser, false); newTeam.Members.Add(new TeamUser(newTeam, newUser2)); context.Add(newTeam); context.SaveChanges(); thing = new Thing(newTeam, newUser); thing.Description = "UNIT TEST THING"; thing.AssignedTo.Add(new UserThing(thing, newUser2, newUser)); thing.AssignedTo.Add(new UserThing(thing, newUser, newUser)); context.Add(thing); context.SaveChanges(); thing.UpdateStatus(newUser2, ThingStatus.Delayed); thing.Complete(newUser2); context.SaveChanges(); } using (var context = new TeamThingContext()) { newUser = context.GetAll<User>().FirstOrDefault(p => p.EmailAddress == newUser.EmailAddress); newUser2 = context.GetAll<User>().FirstOrDefault(p => p.EmailAddress == newUser2.EmailAddress); newTeam = context.GetAll<Team>().FirstOrDefault(p => p.Name == newTeam.Name); thing = context.GetAll<Thing>().FirstOrDefault(p => p.Description == thing.Description); Debug.Assert(newUser != null); Debug.Assert(newUser2 != null); Debug.Assert(newTeam != null); Debug.Assert(thing != null); Debug.Assert(thing.Owner != null); Debug.Assert(newTeam.Owner != null); Debug.Assert(newUser.Teams.Count > 0); Debug.Assert(newUser2.Teams.Count > 0); Debug.Assert(newUser2.Things.Count > 0); Debug.Assert(newTeam.Members.Count > 0); //Debug.Assert(newTeam.TeamThings.Count > 0); Debug.Assert(thing.AssignedTo.Count > 0); Debug.Assert(thing.History.Count == 2); Debug.Assert(thing.History[0].EditedBy != null); Debug.Assert(thing.History[0].EditedByUserId != 0); Debug.Assert(thing.History[0].Thing == thing); Debug.Assert(thing.History[0].ThingId == thing.Id); // //clean up // //Category is marked as dependent, so it will be removed automatically with the product context.Delete(thing); context.Delete(newTeam); context.Delete(newUser); context.Delete(newUser2); context.SaveChanges(); } Console.WriteLine("All Tests Pass!"); }
public HttpResponseMessage Put(int id, ServiceModel.UpdateThingViewModel viewModel) { var thingEditor = context.GetAll <DomainModel.User>() .FirstOrDefault(u => u.Id == viewModel.EditedById); var thing = context.GetAll <DomainModel.Thing>() .FirstOrDefault(u => u.Id == id); if (thingEditor == null) { ModelState.AddModelError("", "Invalid Editor"); } if (thing == null) { ModelState.AddModelError("", "Invalid Thing"); } if (thing != null && thing.OwnerId != thingEditor.Id) { ModelState.AddModelError("", "A Thing can only be edited by its owner"); } if (!ModelState.IsValid) { return(new HttpResponseMessage <JsonValue>(ModelState.ToJson(), HttpStatusCode.BadRequest)); } foreach (var userId in viewModel.AssignedTo) { //already assigned if (thing.AssignedTo.Any(at => at.AssignedToUserId == userId)) { continue; } var assignedTo = context.GetAll <DomainModel.User>() .FirstOrDefault(u => u.Id == userId); if (assignedTo == null) { throw new HttpResponseException("Invalid User Assigned to Thing", HttpStatusCode.NotFound); } thing.AssignedTo.Add(new DomainModel.UserThing(thing, assignedTo, thingEditor)); } //removed users var removedUserIds = thing.AssignedTo.Select(at => at.AssignedToUserId).Except(viewModel.AssignedTo); var removedUserThings = thing.AssignedTo.Where(at => removedUserIds.Contains(at.AssignedToUserId)).ToList(); context.Delete(removedUserThings); thing.Description = viewModel.Description; context.SaveChanges(); var sThing = thing.MapToServiceModel(); var response = new HttpResponseMessage <ServiceModel.Thing>(sThing, HttpStatusCode.OK); response.Headers.Location = new Uri(Request.RequestUri, "/api/thing/" + thing.Id.ToString()); return(response); }