public void GetCreateReturnsViewModelWithProjectIdAndTemplateId()
        {
            // arrange
            Mock<IBidPackageServiceLayer> service = new Mock<IBidPackageServiceLayer>();
            Mock<IWebSecurityWrapper> security = new Mock<IWebSecurityWrapper>();
            Mock<INotificationSender> notice = new Mock<INotificationSender>();

            BidPackageController controller = new BidPackageController(service.Object, security.Object, notice.Object);

            // act
            var result = controller.Create(1, 1);

            // assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(ViewResult));
            Assert.IsInstanceOfType(((ViewResult)result).ViewData.Model, typeof(EditBidPackageViewModel));
            Assert.AreEqual(1, ((EditBidPackageViewModel)((ViewResult)result).ViewData.Model).ProjectId);
            Assert.AreEqual(1, ((EditBidPackageViewModel)((ViewResult)result).ViewData.Model).TemplateId);
        }
        public void PostCreateBidPackageExceptionReturnsModelStateErrors()
        {
            // arrange
            Mock<IBidPackageServiceLayer> service = new Mock<IBidPackageServiceLayer>();
            service.Setup(s => s.Create(It.IsAny<BidPackage>())).Throws(new Exception("my spoon is too big"));
            service.SetupGet(s => s.ValidationDic).Returns(new Dictionary<string, string> { { "Description", "You already have a bid package with this description" } });

            service.Setup(s => s.GetUser(It.IsAny<int>())).Returns(new UserProfile { CompanyId = 1, UserId = 1 });
            Mock<IWebSecurityWrapper> security = new Mock<IWebSecurityWrapper>();
            security.Setup(s => s.GetUserId("*****@*****.**")).Returns(1);

            Mock<INotificationSender> notice = new Mock<INotificationSender>();

            BidPackageController controller = new BidPackageController(service.Object, security.Object, notice.Object);

            Mock<IPrincipal> principal = new Mock<IPrincipal>();
            principal.Setup(p => p.Identity.Name).Returns("*****@*****.**");

            Mock<ControllerContext> context = new Mock<ControllerContext>();
            context.SetupGet(c => c.HttpContext.User.Identity.Name).Returns("*****@*****.**");
            context.SetupGet(c => c.HttpContext.Request.IsAuthenticated).Returns(true);

            controller.ControllerContext = context.Object;

            EditBidPackageViewModel viewModel = new EditBidPackageViewModel
            {
                ProjectId = 1,
                TemplateId = 1,
                SelectedScope = new int[] { 1, 2, 3 },
                BidDateTime = new DateTime(2014, 2, 2, 17, 0, 0),
                Description = "booga booga"
            };

            // act
            var result = controller.Create(viewModel);

            // assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(ViewResult));
            Assert.IsTrue(((ViewResult)result).ViewData.ModelState.ContainsKey("Exception"));
            Assert.AreEqual("my spoon is too big", ((ViewResult)result).ViewData.ModelState["Exception"].Errors[0].ErrorMessage.ToString());
        }
        public void PostCreateValidBidPackageRedirectsToDetails()
        {
            // arrange
            Mock<IBidPackageServiceLayer> service = new Mock<IBidPackageServiceLayer>();
            service.Setup(s => s.Create(It.IsAny<BidPackage>())).Returns(true);
            service.Setup(s => s.GetUser(It.IsAny<int>())).Returns(new UserProfile { CompanyId = 1, UserId = 1 });
            Mock<IWebSecurityWrapper> security = new Mock<IWebSecurityWrapper>();
            security.Setup(s => s.GetUserId("*****@*****.**")).Returns(1);
            Mock<INotificationSender> notice = new Mock<INotificationSender>();

            BidPackageController controller = new BidPackageController(service.Object, security.Object, notice.Object);

            Mock<IPrincipal> principal = new Mock<IPrincipal>();
            principal.Setup(p => p.Identity.Name).Returns("*****@*****.**");

            Mock<ControllerContext> context = new Mock<ControllerContext>();
            context.SetupGet(c => c.HttpContext.User.Identity.Name).Returns("*****@*****.**");
            context.SetupGet(c => c.HttpContext.Request.IsAuthenticated).Returns(true);

            controller.ControllerContext = context.Object;

            EditBidPackageViewModel viewModel = new EditBidPackageViewModel
            {
                ProjectId = 1,
                TemplateId = 1,
                SelectedScope = new int[] { 1, 2, 3 },
                BidDateTime = new DateTime(2014, 2, 2, 17, 0, 0),
                Description = "booga booga"
            };

            // act
            var result = controller.Create(viewModel);

            // assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult));
            Assert.AreEqual("BidPackage", ((RedirectToRouteResult)result).RouteValues["controller"].ToString());
            Assert.AreEqual("Details", ((RedirectToRouteResult)result).RouteValues["action"].ToString());
        }