Exemplo n.º 1
0
        public void EditTest()
        {
            //var identity = new GenericIdentity("admin");
            var controller        = Helpers.CreateSnippetController();
            var controllerContext = new Mock <ControllerContext>();
            var principal         = new Mock <IPrincipal>();

            principal.Setup(p => p.IsInRole("admin")).Returns(true);
            principal.SetupGet(x => x.Identity.Name).Returns("admin");
            controllerContext.SetupGet(x => x.HttpContext.User).Returns(principal.Object);
            controller.ControllerContext = controllerContext.Object;
            ////////////////////////////
            // Call a snippet we own. //
            ////////////////////////////
            Object result = controller.Edit(1);

            // Ensure we can edit it (the type is a view)
            Assert.IsInstanceOfType(result, typeof(ViewResult));
            SnippetCRUDViewModel model = (SnippetCRUDViewModel)((ViewResult)result).Model;

            Assert.AreEqual(1, model.Snippet.SnippetId);
            Assert.AreEqual(1, model.Groups.Count);
            ///////////////////////////////////
            // Call a snippet we do not own. //
            ///////////////////////////////////
            result = controller.Edit(10);
            Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult));
            /////////////////////////////////
            // Call an unexisting snippet. //
            /////////////////////////////////
            result = controller.Edit(10000);
            Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Returns the edit view for a specific snippet.
        /// Only works if the user is logged in and owns the snippet.
        ///
        /// </summary>
        /// <param name="snippetId"></param>
        /// <returns></returns>
        public ActionResult Edit(int snippetId)
        {
            var snippet = _snipRepo.Snippets.FirstOrDefault(s => s.SnippetId == snippetId);

            if (snippet != null && User.Identity.Name == snippet.User.Username)
            {
                // Populate the groups list such that user can add the snippet to a group.
                var groupSL = new List <SelectListItem>();
                groupSL.Add(new SelectListItem
                {
                    Text  = "None",
                    Value = "-1"
                });
                groupSL.AddRange(_groupRepo.GetGroupsForUsername(User.Identity.Name)
                                 .Select(g => new SelectListItem
                {
                    Text  = g.Name,
                    Value = g.Id.ToString()
                })
                                 .ToList());
                // Populate the View model.
                var model = new SnippetCRUDViewModel
                {
                    Languages          = _langRepo.LangOptions,
                    Snippet            = snippet,
                    SelectedLanguageId = snippet.Language.LanguageId,
                    Groups             = groupSL,
                };
                return(View(model));
            }

            return(RedirectToAction("Create"));
        }
Exemplo n.º 3
0
        /// <summary>
        /// Allows creation of a snippet.
        /// Redirects the user to an edit page of a blank snippet.
        /// </summary>
        /// <returns></returns>
        public ViewResult Create()
        {
            var groupSL = new List <SelectListItem>();

            groupSL.Add(new SelectListItem
            {
                Text  = "None",
                Value = "-1"
            });
            groupSL.AddRange(_groupRepo.GetGroupsForUsername(User.Identity.Name)
                             .Select(g => new SelectListItem
            {
                Text  = g.Name,
                Value = g.Id.ToString()
            })
                             .ToList());
            var model = new SnippetCRUDViewModel
            {
                Snippet            = new Snippet(),
                Languages          = _langRepo.LangOptions,
                SelectedLanguageId = 0,
                Groups             = groupSL
            };

            return(View("Edit", model));
        }
Exemplo n.º 4
0
        public void EditPostTest()
        {
            ////////////////////////////////////////
            // Test posting an empty snippet name.//
            ////////////////////////////////////////
            var controller        = Helpers.CreateSnippetController();
            var controllerContext = new Mock <ControllerContext>();
            var principal         = new Mock <IPrincipal>();

            principal.Setup(p => p.IsInRole("admin")).Returns(true);
            principal.SetupGet(x => x.Identity.Name).Returns("admin");
            controllerContext.SetupGet(x => x.HttpContext.User).Returns(principal.Object);
            controller.ControllerContext = controllerContext.Object;


            SnippetCRUDViewModel model = new SnippetCRUDViewModel();

            model.Snippet = new Snippet()
            {
                Name = ""
            };
            var result = controller.Edit(model);

            Assert.IsInstanceOfType(result, typeof(ViewResult));
            var response = ((ViewResult)result);
            // There should be an error in the viewdata
            var viewdata = response.ViewData;
            var errormsg = viewdata.ModelState["Snippet.Name"].Errors.First().ErrorMessage;

            Assert.AreEqual("Name is required!", errormsg);

            /////////////////////////////////////
            // Test posting empty code snippet //
            /////////////////////////////////////
            // The error message from above will still be in the ModelState!
            // -> Create new controller from scratch.
            controller        = Helpers.CreateSnippetController();
            controllerContext = new Mock <ControllerContext>();
            principal         = new Mock <IPrincipal>();

            principal.Setup(p => p.IsInRole("admin")).Returns(true);
            principal.SetupGet(x => x.Identity.Name).Returns("admin");
            controllerContext.SetupGet(x => x.HttpContext.User).Returns(principal.Object);
            controller.ControllerContext = controllerContext.Object;

            model         = new SnippetCRUDViewModel();
            model.Snippet = new Snippet()
            {
                Name = "Unimportant name", Code = ""
            };
            result = controller.Edit(model);
            Assert.IsInstanceOfType(result, typeof(ViewResult));
            response = ((ViewResult)result);
            // There should be an error in the viewdata
            viewdata = response.ViewData;
            errormsg = viewdata.ModelState["Snippet.Code"].Errors.First().ErrorMessage;
            Assert.AreEqual("No empty snippets allowed!", errormsg);

            //////////////////////////////
            // Test modifying a snippet //
            //////////////////////////////
            // The error message from above will still be in the ModelState!
            // -> Create new controller from scratch.
            controller        = Helpers.CreateSnippetController();
            controllerContext = new Mock <ControllerContext>();
            principal         = new Mock <IPrincipal>();

            principal.Setup(p => p.IsInRole("admin")).Returns(true);
            principal.SetupGet(x => x.Identity.Name).Returns("admin");
            controllerContext.SetupGet(x => x.HttpContext.User).Returns(principal.Object);
            controller.ControllerContext = controllerContext.Object;

            model         = new SnippetCRUDViewModel();
            model.Snippet = SampleData.SnippetList.First(); // We own the first snippet in that list (user admin).
            result        = controller.Edit(model);
            // If all went well we should get a redirect.
            Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult));
        }
Exemplo n.º 5
0
        public ActionResult Edit(SnippetCRUDViewModel model)
        {
            if (ModelState.IsValid && !string.IsNullOrEmpty(model.Snippet.Name) && !string.IsNullOrEmpty(model.Snippet.Code))
            {
                //model.Snippet.LanguageId = model.SelectedLanguageId;
                var language = _langRepo.Languages.FirstOrDefault(l => l.LanguageId == model.SelectedLanguageId);
                var user     = _userRepo.Users.FirstOrDefault(u => u.Username == User.Identity.Name);

                if (user != null)
                {
                    model.Snippet.UserId = user.UserId;
                }

                if (language != null)
                {
                    model.Snippet.LanguageId = language.LanguageId;
                }
                model.Snippet.Groups.Clear();
                _snipRepo.SaveSnippet(model.Snippet);

                //Add it to the groups
                if (model.SelectedGroupId != null)
                {
                    _groupRepo.UpdateGroupsWithSnippet(model.SelectedGroupId, model.Snippet);
                }


                TempData["message"] = string.Format("{0} has been saved!", model.Snippet.Name);
                return(RedirectToAction("List"));
            }

            //An error occured, find out what's missing
            if (string.IsNullOrEmpty(model.Snippet.Name))
            {
                ModelState.AddModelError("Snippet.Name", "Name is required!");
            }
            if (string.IsNullOrEmpty(model.Snippet.Code))
            {
                ModelState.AddModelError("Snippet.Code", "No empty snippets allowed!");
            }

            //Add model languages and group options again
            var groupSL = new List <SelectListItem>();

            groupSL.Add(new SelectListItem
            {
                Text  = "None",
                Value = "-1"
            });
            groupSL.AddRange(_groupRepo.GetGroupsForUsername(User.Identity.Name)
                             .Select(g => new SelectListItem
            {
                Text  = g.Name,
                Value = g.Id.ToString()
            })
                             .ToList());
            model.Groups    = groupSL;
            model.Languages = _langRepo.LangOptions;

            return(View(model));
        }