public void CanGenerateDeleteIncomePage()
        {
            var controller = new IncomesController(incomeService, productService, sizeService);

            IncomeMVCModel result = (IncomeMVCModel)((ViewResult)controller.Delete(2)).Model;

            Assert.IsNotNull(result);
            Assert.AreEqual(2, result.Id);
        }
        public void CanDeleteIncome()
        {
            var mock = MockEFServices.GetMockForIncomeDocumentService();
            var incomeService = mock.Object;
            var deletingIncome = incomeService.GetById(2);

            var controller = new IncomesController(incomeService, productService, sizeService);

            RedirectToRouteResult result = controller.DeleteConfirmed(deletingIncome.ToViewModel()) as RedirectToRouteResult;

            mock.Verify(m => m.Delete(deletingIncome));

            Assert.AreEqual("Index", result.RouteValues["action"]);
            Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult));
        }
        public void CanDeleteProduct()
        {
            var mock = MockEFServices.GetMockForIncomeDocumentService();
            var incomeService = mock.Object;

            var controller = new IncomesController(incomeService, productService, sizeService);

            var income = incomeService.GetById(2);
            var incomeViewModel = income.ToViewModel();
            var guidToDelete = incomeViewModel.Products[0].Guid;

            int productCountBeforeDelete = incomeViewModel.Products.Count;

            ViewResult result = controller.Edit(incomeViewModel, null, guidToDelete, null) as ViewResult;

            mock.Verify(m => m.Add(It.IsAny<IncomeEFModel>()), Times.Never);
            mock.Verify(m => m.Save(), Times.Never);

            Assert.AreEqual(productCountBeforeDelete - 1, incomeViewModel.Products.Count);
            Assert.IsFalse(incomeViewModel.Products.Exists(p => p.Guid == guidToDelete));

            Assert.IsInstanceOfType(result, typeof(ViewResult));
        }
        public void CanGenerateEditPage()
        {
            var controller = new IncomesController(incomeService, productService, sizeService);

            IncomeMVCModel result = (IncomeMVCModel)((ViewResult)controller.Edit(2)).Model;

            Assert.IsNotNull(result);
            Assert.AreEqual(2, result.Id);
            Assert.AreEqual("Partner2", result.BusinessPartner);
        }
        public void CannotSubmitInvalidChanges()
        {
            var mock = MockEFServices.GetMockForIncomeDocumentService();
            var incomeService = mock.Object;

            var controller = new IncomesController(incomeService, productService, sizeService);

            var income = incomeService.GetById(2);
            var incomeViewModel = income.ToViewModel();

            int productCountBeforeDelete = incomeViewModel.Products.Count;

            ViewResult result = controller.Edit(incomeViewModel, null, null, null) as ViewResult;

            mock.Verify(m => m.Add(It.IsAny<IncomeEFModel>()), Times.Never);
            mock.Verify(m => m.Save(), Times.Never);

            Assert.AreEqual(productCountBeforeDelete, incomeViewModel.Products.Count);
            Assert.IsInstanceOfType(result, typeof(ViewResult));
        }
        public void CanSaveValidChanges()
        {
            var mock = MockEFServices.GetMockForIncomeDocumentService();
            var incomeService = mock.Object;

            var controller = new IncomesController(incomeService, productService, sizeService);

            var income = incomeService.GetById(2);
            var incomeViewModel = income.ToViewModel();

            int productCountBeforeDelete = incomeViewModel.Products.Count;

            RedirectToRouteResult result = controller.Edit(incomeViewModel, "Any string", null, null) as RedirectToRouteResult;

            mock.Verify(m => m.Update(income), Times.Once);
            mock.Verify(m => m.Save(), Times.Once);

            Assert.AreEqual("Index", result.RouteValues["action"]);
            Assert.AreEqual(productCountBeforeDelete, incomeViewModel.Products.Count);
            Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult));
        }
        public void CannotEditNonexistingIncome()
        {
            var controller = new IncomesController(incomeService, productService, sizeService);

            ActionResult result = controller.Edit(20) as ActionResult;

            Assert.IsInstanceOfType(result, typeof(HttpNotFoundResult));
        }
        public void CannotDeleteNullIncome()
        {
            var mock = MockEFServices.GetMockForIncomeDocumentService();
            var incomeService = mock.Object;

            var controller = new IncomesController(incomeService, productService, sizeService);

            HttpStatusCodeResult result = controller.DeleteConfirmed(null) as HttpStatusCodeResult;

            mock.Verify(m => m.Delete(It.IsAny<IncomeEFModel>()), Times.Never);
            Assert.AreEqual(400, result.StatusCode);
        }
        public void CannotDeleteNotExistingProduct()
        {
            var mock = MockEFServices.GetMockForIncomeDocumentService();
            var incomeService = mock.Object;

            var controller = new IncomesController(incomeService, productService, sizeService);

            var income = incomeService.GetById(2);
            var incomeViewModel = income.ToViewModel();

            int productCountBeforeDelete = incomeViewModel.Products.Count;

            HttpStatusCodeResult result = controller.Edit(incomeViewModel, null, new Guid(), null) as HttpStatusCodeResult;

            mock.Verify(m => m.Add(It.IsAny<IncomeEFModel>()), Times.Never);
            mock.Verify(m => m.Save(), Times.Never);

            Assert.AreEqual(productCountBeforeDelete, incomeViewModel.Products.Count);
            Assert.AreEqual(400, result.StatusCode);
        }
        public void CannotDeleteIncomeWithUnknownId()
        {
            var mock = MockEFServices.GetMockForIncomeDocumentService();
            var incomeService = mock.Object;

            var controller = new IncomesController(incomeService, productService, sizeService);

            HttpNotFoundResult result = controller.Delete(-45) as HttpNotFoundResult;

            mock.Verify(m => m.Delete(It.IsAny<IncomeEFModel>()), Times.Never);
            Assert.IsInstanceOfType(result, typeof(HttpNotFoundResult));
        }
        public void CanGenerateIndexPage()
        {
            var controller = new IncomesController(incomeService, productService, sizeService);

            IEnumerable<IncomeMVCModel> result = (IEnumerable<IncomeMVCModel>)controller.Index().Model;

            var incomes = result.ToArray();

            Assert.IsTrue(incomes.Length == 3);
            Assert.IsTrue(incomes[0].Number == 1);
            Assert.IsTrue(incomes[1].Number == 2);
            Assert.IsTrue(incomes[2].Number == 3);
        }