public void FetchByUserForPollsThatAreNotActive()
		{
			var now = DateTime.UtcNow;

			var category1 = new MVCategory { CategoryID = 1, CategoryName = "1" };
			var category2 = new MVCategory { CategoryID = 2, CategoryName = "2" };

			var poll1 = EntityCreator.Create<MVPoll>(_ =>
			{
				_.PollDeletedFlag = false;
				_.PollStartDate = now.AddDays(-4);
				_.PollEndDate = DateTime.UtcNow.AddDays(-2);
				_.PollCategoryID = 1;
				_.UserID = 1;
			});
			var poll2 = EntityCreator.Create<MVPoll>(_ =>
			{
				_.PollDeletedFlag = false;
				_.PollStartDate = now.AddDays(-2);
				_.PollEndDate = DateTime.UtcNow.AddDays(2);
				_.UserID = 1;
			});
			var poll3 = EntityCreator.Create<MVPoll>(_ =>
			{
				_.PollDeletedFlag = false;
				_.PollStartDate = now.AddDays(-4);
				_.PollEndDate = DateTime.UtcNow.AddDays(-2);
				_.PollCategoryID = 2;
				_.UserID = 1;
			});
			var poll4 = EntityCreator.Create<MVPoll>(_ =>
			{
				_.PollDeletedFlag = true;
				_.PollStartDate = now.AddDays(-4);
				_.PollEndDate = DateTime.UtcNow.AddDays(-2);
				_.PollCategoryID = 2;
				_.UserID = 1;
			});

			var entities = new Mock<IEntities>(MockBehavior.Strict);
			entities.Setup(_ => _.MVCategories).Returns(new InMemoryDbSet<MVCategory> { category1, category2 });
			entities.Setup(_ => _.MVPolls).Returns(new InMemoryDbSet<MVPoll> { poll1, poll2, poll3, poll4 });
			entities.Setup(_ => _.MVPollSubmissions).Returns(new InMemoryDbSet<MVPollSubmission>());
			entities.Setup(_ => _.Dispose());

			var builder = new ContainerBuilder();
			builder.Register<IEntities>(_ => entities.Object);
			builder.Register<ISearchWhereClause>(_ => Mock.Of<ISearchWhereClause>());

			using (new ObjectActivator(builder.Build()).Bind(() => ApplicationContext.DataPortalActivator))
			{
				var result = DataPortal.Fetch<PollSearchResults>(
					new PollSearchResultsByUserCriteria(1, false));
				Assert.AreEqual(2, result.SearchResultsByCategory.Count,
					result.GetPropertyName(_ => _.SearchResultsByCategory));
			}

			entities.VerifyAll();
		}
		public void FetchByNewest()
		{
			var now = DateTime.UtcNow;
			var category1 = new MVCategory { CategoryID = 1, CategoryName = "b" };
			var category2 = new MVCategory { CategoryID = 2, CategoryName = "a" };

			var poll1 = EntityCreator.Create<MVPoll>(_ =>
			{
				_.PollDeletedFlag = false;
				_.PollEndDate = now.AddDays(2);
				_.PollStartDate = now.AddDays(-2);
				_.PollCategoryID = 1;
			});
			var poll2 = EntityCreator.Create<MVPoll>(_ =>
			{
				_.PollDeletedFlag = false;
				_.PollEndDate = now.AddDays(2);
				_.PollStartDate = now.AddDays(-2);
				_.PollCategoryID = 2;
			});
			var poll3 = EntityCreator.Create<MVPoll>(_ =>
			{
				_.PollDeletedFlag = false;
				_.PollEndDate = now.AddDays(2);
				_.PollStartDate = now.AddDays(-4);
				_.PollCategoryID = 1;
			});
			var poll4 = EntityCreator.Create<MVPoll>(_ =>
			{
				_.PollDeletedFlag = false;
				_.PollEndDate = now.AddDays(2);
				_.PollStartDate = now.AddDays(-4);
				_.PollCategoryID = 2;
			});
			var poll5 = EntityCreator.Create<MVPoll>(_ =>
			{
				_.PollDeletedFlag = false;
				_.PollEndDate = now.AddDays(2);
				_.PollStartDate = now.AddDays(-1);
				_.PollCategoryID = 1;
			});
			var poll6 = EntityCreator.Create<MVPoll>(_ =>
			{
				_.PollDeletedFlag = false;
				_.PollEndDate = now.AddDays(2);
				_.PollStartDate = now.AddDays(-1);
				_.PollCategoryID = 2;
			});
			var poll7 = EntityCreator.Create<MVPoll>(_ =>
			{
				_.PollDeletedFlag = true;
				_.PollEndDate = now.AddDays(2);
				_.PollStartDate = now.AddDays(-1);
				_.PollCategoryID = 2;
			});

			var entities = new Mock<IEntities>(MockBehavior.Strict);
			entities.Setup(_ => _.MVCategories).Returns(new InMemoryDbSet<MVCategory> { category1, category2 });
			entities.Setup(_ => _.MVPolls).Returns(new InMemoryDbSet<MVPoll> { poll1, poll2, poll3, poll4, poll5, poll6, poll7 });
			entities.Setup(_ => _.MVPollSubmissions).Returns(new InMemoryDbSet<MVPollSubmission>());
			entities.Setup(_ => _.Dispose());

			var builder = new ContainerBuilder();
			builder.Register<IEntities>(_ => entities.Object);
			builder.Register<ISearchWhereClause>(_ => Mock.Of<ISearchWhereClause>());

			using (new ObjectActivator(builder.Build()).Bind(() => ApplicationContext.DataPortalActivator))
			{
				var result = DataPortal.Fetch<PollSearchResults>(PollSearchResultsQueryType.Newest);
				Assert.AreEqual(2, result.SearchResultsByCategory.Count,
					result.GetPropertyName(_ => _.SearchResultsByCategory));

				var firstCategory = result.SearchResultsByCategory[0];
				Assert.AreEqual("a", firstCategory.Category,
					firstCategory.GetPropertyName(_ => _.Category) + " a");
				Assert.AreEqual(3, firstCategory.SearchResults.Count,
					firstCategory.GetPropertyName(_ => _.SearchResults) + " a");
				Assert.AreEqual(poll6.PollQuestion, firstCategory.SearchResults[0].Question,
					firstCategory.GetPropertyName(_ => _.SearchResults[0].Question) + " a 0");
				Assert.AreEqual(poll2.PollQuestion, firstCategory.SearchResults[1].Question,
					firstCategory.GetPropertyName(_ => _.SearchResults[1].Question) + " a 1");
				Assert.AreEqual(poll4.PollQuestion, firstCategory.SearchResults[2].Question,
					firstCategory.GetPropertyName(_ => _.SearchResults[2].Question) + " a 2");

				var secondCategory = result.SearchResultsByCategory[1];
				Assert.AreEqual("b", secondCategory.Category,
					secondCategory.GetPropertyName(_ => _.Category) + " b");
				Assert.AreEqual(3, secondCategory.SearchResults.Count,
					secondCategory.GetPropertyName(_ => _.SearchResults) + " b");
				Assert.AreEqual(poll5.PollQuestion, secondCategory.SearchResults[0].Question,
					secondCategory.GetPropertyName(_ => _.SearchResults[0].Question) + " b 0");
				Assert.AreEqual(poll1.PollQuestion, secondCategory.SearchResults[1].Question,
					secondCategory.GetPropertyName(_ => _.SearchResults[1].Question) + " b 1");
				Assert.AreEqual(poll3.PollQuestion, secondCategory.SearchResults[2].Question,
					secondCategory.GetPropertyName(_ => _.SearchResults[2].Question) + " b 2");
			}

			entities.VerifyAll();
		}
		public void FetchByPollQuestion()
		{
			var now = DateTime.UtcNow;
			var category1 = new MVCategory { CategoryID = 1, CategoryName = "1" };

			var poll1 = EntityCreator.Create<MVPoll>(_ =>
			{
				_.PollDeletedFlag = false;
				_.PollCategoryID = category1.CategoryID;
				_.PollQuestion = "12345";
				_.PollEndDate = now.AddDays(2);
				_.PollStartDate = now.AddDays(-2);
			});
			var poll2 = EntityCreator.Create<MVPoll>(_ =>
			{
				_.PollDeletedFlag = false;
				_.PollCategoryID = category1.CategoryID;
				_.PollQuestion = "AbCdE";
				_.PollEndDate = now.AddDays(2);
				_.PollStartDate = now.AddDays(-2);
			});
			var poll3 = EntityCreator.Create<MVPoll>(_ =>
			{
				_.PollDeletedFlag = true;
				_.PollCategoryID = category1.CategoryID;
				_.PollQuestion = "DeFgH";
				_.PollEndDate = now.AddDays(2);
				_.PollStartDate = now.AddDays(-2);
			});

			var submission1 = EntityCreator.Create<MVPollSubmission>(_ =>
			{
				_.PollID = poll2.PollID;
			});
			var submission2 = EntityCreator.Create<MVPollSubmission>(_ =>
			{
				_.PollID = poll2.PollID;
			});
			var submission3 = EntityCreator.Create<MVPollSubmission>(_ =>
			{
				_.PollID = poll1.PollID;
			});
			var submission4 = EntityCreator.Create<MVPollSubmission>(_ =>
			{
				_.PollID = poll2.PollID;
			});

			var entities = new Mock<IEntities>(MockBehavior.Strict);
			entities.Setup(_ => _.MVCategories).Returns(new InMemoryDbSet<MVCategory> { category1 });
			entities.Setup(_ => _.MVPolls).Returns(new InMemoryDbSet<MVPoll> { poll1, poll2, poll3 });
			entities.Setup(_ => _.MVPollSubmissions).Returns(new InMemoryDbSet<MVPollSubmission> { submission1, submission2, submission3, submission4 });
			entities.Setup(_ => _.Dispose());

			var searchWhereClause = new Mock<ISearchWhereClause>(MockBehavior.Strict);
			searchWhereClause.Setup(_ => _.WhereClause(It.IsAny<DateTime>(), "%bcd%")).Returns(_ => _.PollQuestion == "AbCdE");

			var builder = new ContainerBuilder();
			builder.Register<IEntities>(_ => entities.Object);
			builder.Register<ISearchWhereClause>(_ => searchWhereClause.Object);

			using (new ObjectActivator(builder.Build()).Bind(() => ApplicationContext.DataPortalActivator))
			{
				var result = DataPortal.Fetch<PollSearchResults>("bCd");
				Assert.AreEqual(1, result.SearchResultsByCategory.Count,
					result.GetPropertyName(_ => _.SearchResultsByCategory));
				Assert.AreEqual(1, result.SearchResultsByCategory[0].SearchResults.Count,
					result.GetPropertyName(_ => _.SearchResultsByCategory[0].SearchResults.Count));
				Assert.AreEqual(poll2.PollQuestion, result.SearchResultsByCategory[0].SearchResults[0].Question,
					result.GetPropertyName(_ => _.SearchResultsByCategory[0].SearchResults[0].Question));
			}

			searchWhereClause.VerifyAll();
			entities.VerifyAll();
		}