Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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!");
        }
Exemplo n.º 3
0
        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!");
        }
Exemplo n.º 4
0
        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);
        }