/// <summary>
        /// Check if page has place for news/advertisement
        /// </summary>
        /// <param name="page"></param>
        /// <returns></returns>
        private bool IsPageHasPlaceForNews(NewsPaperPage page)
        {
            int newsCount = page.NewsArticle.Count;
            int advCount  = page.Advertisement.Count;

            if (newsCount + advCount > 4)
            {
                return(false);
            }
            return(true);
        }
        /// <summary>
        /// Create news paper pages with news items
        /// </summary>
        /// <param name="paper"></param>
        /// <param name="page"></param>
        public void AddPagesToNewsPaper(NewsPaper paper, NewsPaperPage page)
        {
            try
            {
                int pageCounter = 1;
                if (this.lstNews == null || this.lstNews.Count() == 0)
                {
                    throw new Exception("No content for news papaer");
                }

                foreach (var objNews in lstNews)
                {
                    page.PageNumber = pageCounter;
                    if (!IsPageHasPlaceForNews(page))
                    {
                        pageCounter++;
                        page            = new NewsPaperPage();
                        page.PageNumber = pageCounter;
                        paper.NewsPaperPages.Add(page);
                    }
                    if (page.NewsArticle.Count >= MAX_NEWS_PER_PAGE)   // Check if all news items are placed
                    {
                        if (objNews.NewsPriority == NewsPriority.High) // Check if any High priority news is still present to be added
                        {
                            page.NewsArticle.Add(objNews);
                        }
                        else
                        {
                            pageCounter++;
                            page            = new NewsPaperPage();
                            page.PageNumber = pageCounter;
                            paper.NewsPaperPages.Add(page);
                            page.NewsArticle.Add(objNews);
                        }
                    }
                    else if (page.NewsArticle.Count < MAX_NEWS_PER_PAGE)
                    {
                        page.NewsArticle.Add(objNews);
                    }
                }
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        public void Test_checkNewsPaperPagesCompiled()
        {
            helper       = new PaperGeneraterHelper();
            objNewsPaper = new NewsPaper(DateTime.Now);

            NewsPaperPage objPage = new NewsPaperPage();

            objNewsPaper.NewsPaperPages.Add(objPage);

            helper.lstNews      = GetNews();
            helper.lstAdvertise = GetAdvertisements();

            helper.AddPagesToNewsPaper(objNewsPaper, objPage);
            helper.AddAddvertisementToNewsPaper(objNewsPaper);

            Assert.IsNotNull(objNewsPaper);
            Assert.IsNotNull(objNewsPaper.NewsPaperPages);
        }
        public void Test_checkNewsPaperHasMaximumHighPiorityNews()
        {
            helper       = new PaperGeneraterHelper();
            objNewsPaper = new NewsPaper(DateTime.Now);

            NewsPaperPage objPage = new NewsPaperPage();

            objNewsPaper.NewsPaperPages.Add(objPage);

            helper.lstNews      = GetNewsAllHighPriority();
            helper.lstAdvertise = GetAdvertisements();

            helper.AddPagesToNewsPaper(objNewsPaper, objPage);
            helper.AddAddvertisementToNewsPaper(objNewsPaper);

            Assert.IsNotNull(objNewsPaper);
            Assert.IsNotNull(objNewsPaper.NewsPaperPages);
            Assert.IsTrue(objNewsPaper.NewsPaperPages[0].Advertisement.Count == 0);
        }
        public NewsPaper GenerateNewsPaper()
        {
            try
            {
                NewsPaper objPaper = NewsPaper.GetInstance(DateTime.Now);

                NewsPaperPage objPage = new NewsPaperPage();
                objPaper.NewsPaperPages.Add(objPage);

                helper = new PaperGeneraterHelper();
                helper.AddPagesToNewsPaper(objPaper, objPage);
                helper.AddAddvertisementToNewsPaper(objPaper);

                return(objPaper);
            }
            catch (Exception ex)
            {
                throw;
            }
        }