public void Filter_BudgetTypeofWork_Tests()
        {
            //Set Data
            #region Data
            int    typeOfWorkId = 1;
            int    mrmUserId    = 25;
            string networkLogin = "******";
            string FY           = "2015";
            string filter       = "";

            MRM.DANG.Model.TypeOfWork tow = new MRM.DANG.Model.TypeOfWork
            {
                Id                   = 1,
                Name                 = "Test Name",
                FiscalYear           = 2015,
                TypeOfWorkCategoryId = 10,
                TypeOfWorkStatus     = new TypeOfWorkStatus()
            };
            WBSFiscalYear_Channel wBSFiscalYear_Channel = new WBSFiscalYear_Channel
            {
                WBSNumber = "12345.123.234.001"
            };
            //tow.WBSFiscalYear_Channel = wBSFiscalYear_Channel;
            List <Model.BudgetbyCategoryRollup> rollups     = new List <Model.BudgetbyCategoryRollup>();
            Model.BudgetbyCategoryRollup        rollupOnAir = new Model.BudgetbyCategoryRollup
            {
                FiscalYear     = 2015,
                BudgetTypeName = "On Air"
            };
            Model.BudgetbyCategoryRollup rollupOffAir = new Model.BudgetbyCategoryRollup
            {
                FiscalYear     = 2015,
                BudgetTypeName = "Off Air"
            };
            Model.BudgetbyCategoryRollup rollupPaidMedia = new Model.BudgetbyCategoryRollup
            {
                FiscalYear     = 2015,
                BudgetTypeName = "Paid Media"
            };
            rollups.Add(rollupOnAir);
            rollups.Add(rollupOffAir);
            rollups.Add(rollupPaidMedia);
            List <CategoryBudgetRollupViewModel> BudgetRollUps = new List <CategoryBudgetRollupViewModel>();
            CategoryBudgetRollupViewModel        budgetRollup  = new CategoryBudgetRollupViewModel()
            {
                towId = 1
            };
            BudgetRollUps.Add(budgetRollup);
            BudgetTypeOfWorkViewModel model = new BudgetTypeOfWorkViewModel();
            model.BudgetRollups = BudgetRollUps;

            #endregion

            //Mock
            #region  Mock
            //Budget Service Mock
            mockbudgetService.Setup(x => x.BudgetTypeOfWork(It.IsAny <int>())).Returns(new MRM.DANG.Model.TypeOfWork());
            mockbudgetService.Setup(x => x.BudgetsByCategoryRollup(It.IsAny <int>(), It.IsAny <int>())).Returns(rollups);

            //TypeofService Mock
            mocktypeOfWorkRepository.Setup(x => x.GetBudgetTypeOfWorkModel(It.IsAny <int>())).Returns(tow);
            mocktypeOfWorkRepository.Setup(x => x.GetBudgetPreviousFYTypeOfWorkModel(It.IsAny <int>())).Returns(new PreviousFYTOWCustomModel());

            //BudgetByCategoryRollupRepository Service Mock
            mockBudgetByCategoryRollupRepository.Setup(x => x.BudgetByCategoryRollupForTypeOfWork(It.IsAny <int>(), It.IsAny <int>())).Returns(rollups);

            var budgetService = new BudgetServiceMock(unitOfWork: null, budget: null, channel: null, userChannel: null,
                                                      loggerService: null, iTypeOfWork: mocktypeOfWorkRepository.Object, iFamilyProductIssueTowDeliverableRepository: null,
                                                      budgetByChannel: null, iBudgetTypeTOWRepository: null, budgetByCategory: null
                                                      , iBudgetByCategoryRollup: mockBudgetByCategoryRollupRepository.Object, _ITypeOfWork_DeliverableCategory: null,
                                                      _iForecastBudgetTypeCalendarTOWRepository: null, _iCalendarRepository: null,
                                                      iTypeOfWorkCategoryRepository: null, iWBSFiscalYear_ChannelRepository: null, iBudgetTypeRepository: null);

            //Budget Controller Mock
            var BudgetController = new BudgetController(userService: null, loggerService: null, budgetService: budgetService,
                                                        unitOfWork: null, productService: null, deliverableService: null, deliverableServiceV2: null, propertyService: null);


            #endregion

            //Assertions
            #region Assertions
            //Assert BudgetService Method Call
            var towResult = budgetService.BudgetTypeOfWork(typeOfWorkId);

            mockbudgetService.Verify();
            mockBudgetByCategoryRollupRepository.Verify(); //Asserts service calls

            Assert.IsNotNull(tow);                         //Result is not Null
            Assert.AreEqual(tow, towResult);               //Asserting the expected return object with dummy data
            Assert.AreEqual(tow.Id, towResult.Id);         //Assert matching the return data with my input

            //Assert BudgetsByCategoryRollup
            var rollupResult = budgetService.BudgetsByCategoryRollup(tow.Id);
            Assert.IsNotNull(rollupResult);
            Assert.AreEqual(rollups, rollupResult);
            Assert.AreEqual(rollups.Count(), rollupResult.Count());
            //TO Do review Assertions
            //model = BudgetController.BudgetTypeOfWork(typeOfWorkId, FY, filter, mrmUserId, networkLogin);
            //Assert.IsNotNull(model);
            //Assert.AreEqual(model.BudgetRollups.Count(), 4);

            //Assertions After applying filter
            //filter = "On Air" + "|" + "" + "|" + "" + "|" + "false"; //Passing test data to filter for OnAir records
            //model = BudgetController.BudgetTypeOfWork(typeOfWorkId, FY, filter, mrmUserId, networkLogin);
            //Assert.AreEqual(model.BudgetRollups.Count(), 2);
            #endregion
        }
        public void Get_TypeOfWork_ViewModel_Tests()
        {
            #region Data
            int    typeOfWorkId = 1234;
            int    mrmUserId    = 25;
            string networkLogin = "******";
            string Company      = "Company 1";
            string Business     = "Business 1";

            var flashSnapshot = new List <FlashSnapshotModel>();
            flashSnapshot.Add(new FlashSnapshotModel()
            {
                ChannelId    = 0,
                SnapshotType = 0,
                BudgetId     = 0,
                Name         = "Snapshot 1",
                Year         = "2016",
                Quarter      = " "
            });
            var forecasts = new List <TypeOfWorkForecastModel>();
            forecasts.Add(new TypeOfWorkForecastModel()
            {
                Months   = new List <ForecastAmountModel>(),
                Quarters = new List <QuartersAmountModel>()
            });
            var tow = new MRM.DANG.Model.TypeOfWork
            {
                Id                   = typeOfWorkId,
                Name                 = "Test Name",
                FiscalYear           = 2015,
                TypeOfWorkCategoryId = 10
            };
            WBSFiscalYear_Channel wBSFiscalYear_Channel = new WBSFiscalYear_Channel
            {
                WBSNumber = "12345.123.234.001"
            };
            //tow.WBSFiscalYear_Channel = wBSFiscalYear_Channel;

            TypeOfWorkModel tOfVm = new TypeOfWorkModel();
            tOfVm.ExternalWBS         = null;
            tOfVm.Company             = Company;
            tOfVm.Business            = Business;
            tOfVm.Id                  = typeOfWorkId;
            tOfVm.TypeOfWorkForecasts = forecasts;
            #endregion

            #region  Mock
            mockbudgetService.Setup(x => x.BudgetTypeOfWork(It.IsAny <int>())).Returns(new MRM.DANG.Model.TypeOfWork());
            mockbudgetService.Setup(x => x.BudgetsByCategoryRollup(It.IsAny <int>(), It.IsAny <int>())).Returns(new List <BudgetbyCategoryRollup>());
            mockbudgetService.Setup(x => x.GetFiscalYearByIdAndChannel(It.IsAny <int>(), It.IsAny <int>())).Returns("");
            mockbudgetService.Setup(x => x.BudgetTowFlashSnapshot(It.IsAny <int>())).Returns(new List <FlashSnapshotModel>());
            //TypeofService Mock
            mocktypeOfWorkRepository.Setup(x => x.GetBudgetTypeOfWorkModel(It.IsAny <int>())).Returns(tow);
            mocktypeOfWorkRepository.Setup(x => x.GetFiscalYearByIdAndChannel(It.IsAny <int>(), It.IsAny <int>())).Returns(new WBSFiscalYear_Channel()
            {
                FiscalYear = "2015"
            });
            mocktypeOfWorkRepository.Setup(x => x.GetRatingList()).Returns(new List <Rating>());
            mocktypeOfWorkRepository.Setup(x => x.GetTypeOfWorkCategories()).Returns(new List <TypeOfWorkCategory>());
            mocktypeOfWorkRepository.Setup(x => x.GetTypeOfWorkStatusList()).Returns(new List <TypeOfWorkStatus>());
            mocktypeOfWorkRepository.Setup(x => x.GetAllFiscalYearList()).Returns(new List <WBSFiscalYear_Channel>());
            mocktypeOfWorkRepository.Setup(x => x.GetBudgetTowFlashSnapshot(It.IsAny <int>())).Returns(flashSnapshot);

            //BudgetByCategoryRollupRepository Service Mock
            mockBudgetByCategoryRollupRepository.Setup(x => x.BudgetByCategoryRollupForTypeOfWork(It.IsAny <int>(), It.IsAny <int>())).Returns(new List <BudgetbyCategoryRollup>());

            var userChannels = new List <MRMUser_Channel>();
            userChannels.Add(new MRMUser_Channel()
            {
                ChannelId = 1, Channel = new Channel()
                {
                    Name = "Channel 1"
                }
            });
            userChannels.Add(new MRMUser_Channel()
            {
                ChannelId = 2, Channel = new Channel()
                {
                    Name = "Channel 2"
                }
            });

            mocktypeOfWorkRepository.Setup(x => x.GetTypeOfWorkModel(It.IsAny <int>())).Returns(tOfVm);
            mockUserChannelRepository.Setup(x => x.UserChannels(It.IsAny <int>())).Returns(userChannels);

            var budgetService = new BudgetServiceMock(userChannel: mockUserChannelRepository.Object, iTypeOfWork: mocktypeOfWorkRepository.Object,
                                                      iBudgetByCategoryRollup: mockBudgetByCategoryRollupRepository.Object);


            //Product Service Mock
            mockProductFamilyRepository.Setup(x => x.GetAll()).Returns(new List <ProductFamily>().AsQueryable <ProductFamily>());
            mockproductService.Setup(x => x.GetProductFamilies()).Returns(new List <ProductFamily>());

            var productService = new ProductServiceMock(productFamilyRepository: mockProductFamilyRepository.Object);

            //Deliverable Service Mock
            mockdeliverableCategoryRepository.Setup(x => x.GetAll()).Returns(new List <DeliverableCategory>().AsQueryable <DeliverableCategory>());
            mockdeliverableService.Setup(x => x.GetAllDeliverableCategories()).Returns(new List <DeliverableCategory>());

            var deliverableService = new DeliverableServiceMock(deliverableCategoryRepository: mockdeliverableCategoryRepository.Object);

            var BudgetController = new BudgetController(userService: null, loggerService: null, budgetService: budgetService,
                                                        unitOfWork: null, productService: productService, deliverableService: deliverableService, deliverableServiceV2: null, propertyService: null);
            #endregion

            #region Assertions
            mockbudgetService.Verify();
            mockproductService.Verify();
            mockdeliverableService.Verify();

            //Verify TOW ViewModel
            var towModel = budgetService.GetTypeOfWork(typeOfWorkId);
            Assert.IsNotNull(towModel);
            Assert.AreEqual(Company, towModel.Company);
            Assert.AreEqual(Business, towModel.Business);

            var towtOfVm = BudgetController.GetTypeOfWork(typeOfWorkId, mrmUserId, networkLogin);
            Assert.IsNotNull(towtOfVm);
            Assert.AreEqual(Company, towtOfVm.Company);
            Assert.AreEqual(Business, towtOfVm.Business);

            //Check Channels

            Assert.AreEqual(towtOfVm.ChannelList.Count(), 2);

            //Check Channel 1
            var channelListArray = towtOfVm.ChannelList.ToArray <SelectListItem>();
            Assert.AreEqual("1", channelListArray[0].Value);
            Assert.AreEqual("Channel 1", channelListArray[0].Text);

            //Check Channel 2
            Assert.AreEqual("2", channelListArray[1].Value);
            Assert.AreEqual("Channel 2", channelListArray[1].Text);
            // Check FlashSnapshot
            Assert.AreEqual(1, towtOfVm.FlashSnapshot.Count());
            Assert.AreEqual("Snapshot 1", towtOfVm.FlashSnapshot[0].Name);
            Assert.AreEqual("2016", towtOfVm.FlashSnapshot[0].Year);
            Assert.AreEqual(0, towtOfVm.FlashSnapshot[0].SnapshotType);
            #endregion
        }