public void PostSendInvalidModelReturnsViewWithModelStatErros()
        {
            // arrange
            Mock<IInvitationServiceLayer> service = new Mock<IInvitationServiceLayer>();
            service.Setup(s => s.CreateRange(It.IsAny<IEnumerable<Invitation>>())).Returns(false);
            service.SetupGet(s => s.ValidationDic).Returns(new Dictionary<string, string> { { "Duplicate", "There is already an invitation sent to this company" } });
            service.Setup(s => s.GetBidPackage(1)).Returns(new BidPackage { Id = 1, ProjectId = 1 });

            Mock<IWebSecurityWrapper> security = new Mock<IWebSecurityWrapper>();
            Mock<INotificationSender> notify = new Mock<INotificationSender>();

            InvitationController controller = new InvitationController(service.Object, security.Object, notify.Object);

            BidPackageInvitationViewModel viewModel = new BidPackageInvitationViewModel();
            viewModel.BidPackageId = 1;
            viewModel.CompanyId = new int[] { 1, 2, 3, 4, 5, 6 };

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

            // assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(ViewResult));
            Assert.IsInstanceOfType(((ViewResult)result).ViewData.Model, typeof(BidPackageInvitationViewModel));
            Assert.AreEqual(1, ((BidPackageInvitationViewModel)((ViewResult)result).ViewData.Model).BidPackageId);
            Assert.AreEqual("There is already an invitation sent to this company", ((ViewResult)result).ViewData.ModelState["Duplicate"].Errors[0].ErrorMessage);
        }
        public void GetSendReturnsViewModelWithBidPackageId()
        {
            // arrange
            Mock<IInvitationServiceLayer> service = new Mock<IInvitationServiceLayer>();
            Mock<IWebSecurityWrapper> security = new Mock<IWebSecurityWrapper>();
            Mock<INotificationSender> notify = new Mock<INotificationSender>();

            InvitationController controller = new InvitationController(service.Object, security.Object, notify.Object);

            // act
            var result = controller.SendForBidPackage(1);

            // assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(ViewResult));
            Assert.IsInstanceOfType(((ViewResult)result).ViewData.Model, typeof(BidPackageInvitationViewModel));
            Assert.AreEqual(1, ((BidPackageInvitationViewModel)((ViewResult)result).ViewData.Model).BidPackageId);
        }
        public void PostSendValidModelRedirectsToProjectDetails()
        {
            // arrange
            Mock<IInvitationServiceLayer> service = new Mock<IInvitationServiceLayer>();
            service.Setup(s => s.CreateRange(It.IsAny<IEnumerable<Invitation>>())).Returns(true);
            service.Setup(s => s.GetBidPackage(1)).Returns(new BidPackage { Id = 1, ProjectId = 1 });

            Mock<IWebSecurityWrapper> security = new Mock<IWebSecurityWrapper>();
            Mock<INotificationSender> notify = new Mock<INotificationSender>();

            InvitationController controller = new InvitationController(service.Object, security.Object, notify.Object);

            BidPackageInvitationViewModel viewModel = new BidPackageInvitationViewModel();
            viewModel.BidPackageId = 1;
            viewModel.CompanyId = new int[] { 1, 2, 3, 4, 5, 6 };

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

            // assert
            Assert.IsNotNull(result);
            Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult));
            Assert.AreEqual("Project", ((RedirectToRouteResult)result).RouteValues["Controller"]);
            Assert.AreEqual("Details", ((RedirectToRouteResult)result).RouteValues["Action"]);
            Assert.AreEqual(1, ((RedirectToRouteResult)result).RouteValues["id"]);
        }