public void CanEditSnippet()
        {
            Snippet sn = new Snippet
            {
                Id = 1,
                Title = "T1",
                Content = "C1",
                UserId = 1
            };
            Mock<ISnippetRepository> repo = new Mock<ISnippetRepository>();
            repo.Setup(m => m.GetById(It.Is<long>(x => x == 1))).Returns(sn);

            var snippet = new Snippet();
            repo.Setup(m => m.Update(It.Is<Snippet>(x => x.Id == 1))).Callback<Snippet>(x =>
                {
                    sn.Id = x.Id;
                    sn.Title = x.Title;
                    sn.Content = x.Content;
                });

            Mock<IWebSecurity> webSec = new Mock<IWebSecurity>();
            webSec.Setup(x => x.CurrentUserId).Returns(1);

            EditVM vm = new EditVM
            {
                Id = 1,
                Title = "TT1",
                Content = "CC1",
            };

            var controller = new HomeController(repo.Object, webSec.Object);
            var result = controller.Edit(vm) as RedirectResult;

            Assert.AreEqual("TT1", sn.Title);
            Assert.AreEqual("CC1", sn.Content);
        }
        public void UserCannotEditOtherUsersSnippets()
        {
            Snippet sn = new Snippet
            {
                Id = 1,
                Title = "T1",
                Content = "C1",
                UserId = 1
            };
            Mock<ISnippetRepository> repo = new Mock<ISnippetRepository>();
            repo.Setup(m => m.GetById(It.Is<long>(x => x == 1))).Returns(sn);

            var snippet = new Snippet();
            repo.Setup(m => m.Update(It.Is<Snippet>(x => x.Id == 1))).Callback<Snippet>(x =>
            {
                sn.Id = x.Id;
                sn.Title = x.Title;
                sn.Content = x.Content;
            });

            Mock<IWebSecurity> webSec = new Mock<IWebSecurity>();
            webSec.Setup(x => x.CurrentUserId).Returns(2);

            EditVM vm = new EditVM
            {
                Id = 1,
                Title = "TT1",
                Content = "CC1",
            };

            var controller = new HomeController(repo.Object, webSec.Object);
            var result = controller.Edit(vm) as HttpUnauthorizedResult;

            Assert.IsNotNull(result);
            Assert.AreEqual(401, result.StatusCode);
        }