public void TestMaximum() { var member = new Member { Id = Guid.NewGuid() }; var jobAds = CreateJobAds(member, 127); for (var max = 0; max < 200; max += 10) { var criteria = new JobAdSearchSortCriteria { SortOrder = JobAdSortOrder.CreatedTime }; var execution = Sort(member, criteria, new Range(0, max)); Assert.AreEqual(jobAds.Count, execution.Results.TotalMatches); Assert.IsTrue(jobAds.Take(max).SequenceEqual(execution.Results.JobAdIds)); criteria = new JobAdSearchSortCriteria { SortOrder = JobAdSortOrder.CreatedTime, ReverseSortOrder = true }; execution = Sort(member, criteria, new Range(0, max)); Assert.AreEqual(jobAds.Count, execution.Results.TotalMatches); Assert.IsTrue(jobAds.Reverse().Take(max).SequenceEqual(execution.Results.JobAdIds)); } }
public void TestPaging() { var member = new Member { Id = Guid.NewGuid() }; var jobAds = CreateJobAds(member, 127); const int page = 25; for (var index = 0; index *page < 200; ++index) { var criteria = new JobAdSearchSortCriteria { SortOrder = JobAdSortOrder.CreatedTime }; var execution = Sort(member, criteria, new Range(index * page, page)); Assert.AreEqual(jobAds.Count, execution.Results.TotalMatches); Assert.IsTrue(jobAds.Skip(index * page).Take(page).SequenceEqual(execution.Results.JobAdIds)); criteria = new JobAdSearchSortCriteria { SortOrder = JobAdSortOrder.CreatedTime, ReverseSortOrder = true }; execution = Sort(member, criteria, new Range(index * page, page)); Assert.AreEqual(jobAds.Count, execution.Results.TotalMatches); Assert.IsTrue(jobAds.Reverse().Skip(index * page).Take(page).SequenceEqual(execution.Results.JobAdIds)); } }
protected TListModel Sort <TListModel>(IMember member, JobAdSearchSortCriteria criteria, JobAdsPresentationModel presentation, JobAdListType listType, Func <IMember, JobAdSearchSortCriteria, Range, JobAdSortExecution> sort) where TListModel : JobAdSortListModel, new() { presentation = PreparePresentationModel(presentation); // Search. var execution = sort(member, criteria, presentation.Pagination.ToRange()); var model = new TListModel { ListType = listType, Criteria = execution.Criteria, Presentation = presentation, Results = new JobAdListResultsModel { TotalJobAds = execution.Results.TotalMatches, JobAdIds = execution.Results.JobAdIds, JobAds = GetMemberJobAdViews(member, execution.Results.JobAdIds), }, Industries = _industriesQuery.GetIndustries(), }; return(model); }
private JobAdSortExecution Sort(IHasId <Guid> member, JobAdSearchSortCriteria sortCriteria, Range range, Func <IJobAdSortService, Guid?, JobAdSortQuery, JobAdSearchResults> sort) { var criteria = new JobAdSortCriteria { SortCriteria = sortCriteria }; JobAdSearchResults results; var service = _serviceManager.Create(); try { results = sort(service, member == null ? (Guid?)null : member.Id, criteria.GetSortQuery(range)); } catch (Exception) { _serviceManager.Abort(service); throw; } _serviceManager.Close(service); return(new JobAdSortExecution { Criteria = criteria, Results = results, }); }
private FolderListModel Sort(IMember member, Guid folderId, JobAdSearchSortCriteria criteria, JobAdsPresentationModel presentation) { return(Sort <FolderListModel>( member, criteria ?? new JobAdSearchSortCriteria { SortOrder = DefaultSortOrder }, presentation, JobAdListType.Folder, (m, c, r) => _executeJobAdSortCommand.SortFolder(m, folderId, c, r))); }
public void TestSimpleSort() { _australia = _locationQuery.GetCountry("Australia"); var employer = _employerAccountsCommand.CreateTestEmployer(0, _organisationsCommand.CreateTestOrganisation(0)); var one = employer.CreateTestJobAd("Title one", "The content for the first ad"); one.CreatedTime = DateTime.Now.AddDays(-1); // Just to make sure it's before "two"; we only index days. one.Description.Salary = new Salary { LowerBound = 50000, UpperBound = 60000, Rate = SalaryRate.Year, Currency = Currency.AUD }; _jobAdsCommand.CreateJobAd(one); _jobAdsCommand.OpenJobAd(one); var two = employer.CreateTestJobAd("Title two", "Different content for the second ad"); _locationQuery.ResolvePostalSuburb(two.Description.Location, _australia, "2000"); two.Description.CompanyName = "Really Bad Employers"; two.Description.JobTypes = JobTypes.Contract; two.Description.Industries = new List <Industry> { _industriesQuery.GetIndustry("Other") }; _jobAdsCommand.CreateJobAd(two); _jobAdsCommand.OpenJobAd(two); var member = new Member { Id = Guid.NewGuid() }; var flagList = _jobAdFlagListsQuery.GetFlagList(member); _memberJobAdListsCommand.AddJobAdToFlagList(member, flagList, one.Id); _memberJobAdListsCommand.AddJobAdToFlagList(member, flagList, two.Id); // Title only var criteria = new JobAdSearchSortCriteria { SortOrder = JobAdSortOrder.JobType }; TestSort(member, criteria, one, two); // Title and content criteria = new JobAdSearchSortCriteria { SortOrder = JobAdSortOrder.CreatedTime }; TestSort(member, criteria, two, one); // No results //criteria = new JobAdSortCriteria { AdTitle = "one", Keywords = "second" }; //TestSort(criteria); }
private void TestSort(IMember member, JobAdSearchSortCriteria criteria, params JobAd[] expectedResults) { var execution = _executeJobAdSortCommand.SortFlagged(member, criteria, new Range(0, expectedResults.Length + 1)); Assert.AreEqual(expectedResults.Length, execution.Results.TotalMatches); Assert.AreEqual(expectedResults.Length, execution.Results.JobAdIds.Count); for (var index = 0; index < expectedResults.Length; index++) { Assert.AreEqual(expectedResults[index].Id, execution.Results.JobAdIds[index], string.Format("Result {0} did not match", index)); } }
public ActionResult BlockList(JobAdSearchSortCriteria sortCriteria, JobAdsPresentationModel presentation) { var model = BlockListResults(sortCriteria, presentation); if (model == null) { return(NotFound("blocklist")); } MemberContext.CurrentJobAds = new BlockListNavigation(presentation); return(View("BlockList", model)); }
public ActionResult PartialFlagList(JobAdSearchSortCriteria sortCriteria, JobAdsPresentationModel presentation) { var model = FlagListResults(sortCriteria, presentation); if (model == null) { return(NotFound("flaglist")); } MemberContext.CurrentJobAds = new FlagListNavigation(presentation); return(PartialView("JobAdList", model)); }
public ActionResult PartialFolder(Guid folderId, JobAdSearchSortCriteria sortCriteria, JobAdsPresentationModel presentation) { var model = FolderResults(folderId, sortCriteria, presentation); if (model == null) { return(NotFound("folder", "id", folderId)); } MemberContext.CurrentJobAds = new FolderNavigation(folderId, presentation); return(PartialView("JobAdList", model)); }
public ActionResult PartialMobileFolder(JobAdSearchSortCriteria sortCriteria, JobAdsPresentationModel presentation) { var member = CurrentMember; var folder = _jobAdFoldersQuery.GetMobileFolder(member); if (folder == null) return NotFound("folder"); var model = FolderResults(folder.Id, sortCriteria, presentation); if (model == null) return NotFound("folder", "id", folder.Id); MemberContext.CurrentJobAds = new FolderNavigation(folder.Id, presentation); return PartialView("JobAdList", model); }
protected void AssertSortOrder(JobAdSearchSortCriteria criteria) { Assert.AreEqual(criteria.SortOrder.ToString(), _sortOrderDropDownList.SelectedItem.Value); if (criteria.ReverseSortOrder) { Assert.IsNotNull(Browser.CurrentHtml.DocumentNode.SelectSingleNode("//div[@class='ascending active']")); Assert.IsNull(Browser.CurrentHtml.DocumentNode.SelectSingleNode("//div[@class='ascending ']")); Assert.IsNull(Browser.CurrentHtml.DocumentNode.SelectSingleNode("//div[@class='descending active']")); Assert.IsNotNull(Browser.CurrentHtml.DocumentNode.SelectSingleNode("//div[@class='descending ']")); } else { Assert.IsNull(Browser.CurrentHtml.DocumentNode.SelectSingleNode("//div[@class='ascending active']")); Assert.IsNotNull(Browser.CurrentHtml.DocumentNode.SelectSingleNode("//div[@class='ascending ']")); Assert.IsNotNull(Browser.CurrentHtml.DocumentNode.SelectSingleNode("//div[@class='descending active']")); Assert.IsNull(Browser.CurrentHtml.DocumentNode.SelectSingleNode("//div[@class='descending ']")); } }
protected static ReadOnlyUrl GetUrl(Url url, JobAdSearchSortCriteria criteria, int?page, int?items) { if (criteria != null) { url.QueryString["SortOrder"] = criteria.SortOrder.ToString(); url.QueryString["SortOrderDirection"] = criteria.ReverseSortOrder ? "SortOrderIsAscending" : "SortOrderIsDescending"; } if (page != null) { url.QueryString["Page"] = page.Value.ToString(CultureInfo.InvariantCulture); } if (items != null) { url.QueryString["Items"] = items.Value.ToString(CultureInfo.InvariantCulture); } return(url); }
protected FolderListModel FolderResults(Guid folderId, JobAdSearchSortCriteria sortCriteria, JobAdsPresentationModel presentation) { var member = CurrentMember; var folder = _jobAdFoldersQuery.GetFolder(member, folderId); if (folder == null) { return(null); } // Do a search to get the jobads in this folder. var model = Sort(member, folderId, sortCriteria, presentation); model.Folder = folder; model.Folders = GetFoldersModel(); model.BlockLists = GetBlockListsModel(); model.SortOrders = SortOrders; model.Communities = _communitiesQuery.GetCommunities().ToDictionary(c => c.Id, c => c); model.Verticals = _verticalsQuery.GetVerticals().ToDictionary(v => v.Id, v => v); return(model); }
private FlagListListModel FlagListResults(JobAdSearchSortCriteria sortCriteria, JobAdsPresentationModel presentation) { var member = CurrentMember; var flagList = _jobAdFlagListsQuery.GetFlagList(member); if (flagList == null) { return(null); } // Do a search to get the jobads in this flagList. var model = Sort(member, sortCriteria, presentation); model.FlagList = flagList; model.Folders = GetFoldersModel(); model.BlockLists = GetBlockListsModel(); model.SortOrders = SortOrders; model.Communities = _communitiesQuery.GetCommunities().ToDictionary(c => c.Id, c => c); model.Verticals = _verticalsQuery.GetVerticals().ToDictionary(v => v.Id, v => v); return(model); }
public void TestClosedAds() { var employer = CreateEmployer(0); var member = new Member { Id = Guid.NewGuid() }; var jobAd = CreateJobAd(member, employer.Id, JobAdStatus.Closed); IndexJobAd(jobAd); // Search without filter. var jobQuery = new JobAdSearchSortCriteria(); var results = Sort(member, jobQuery); Assert.AreEqual(1, results.Count); //Now add an open one jobAd = CreateJobAd(member, employer.Id, JobAdStatus.Open); IndexJobAd(jobAd); // Search without filter. results = Sort(member, jobQuery); Assert.AreEqual(2, results.Count); //Now add another closed one jobAd = CreateJobAd(member, employer.Id, JobAdStatus.Closed); IndexJobAd(jobAd); // Search without filter. results = Sort(member, jobQuery); Assert.AreEqual(3, results.Count); }
public void TestNoRange() { var member = new Member { Id = Guid.NewGuid() }; var jobAds = CreateJobAds(member, 127); var criteria = new JobAdSearchSortCriteria { SortOrder = JobAdSortOrder.CreatedTime }; var execution = Sort(member, criteria, null); Assert.AreEqual(jobAds.Count, execution.Results.TotalMatches); Assert.IsTrue(jobAds.SequenceEqual(execution.Results.JobAdIds)); criteria = new JobAdSearchSortCriteria { SortOrder = JobAdSortOrder.CreatedTime, ReverseSortOrder = true }; execution = Sort(member, criteria, null); Assert.AreEqual(jobAds.Count, execution.Results.TotalMatches); Assert.IsTrue(jobAds.Reverse().SequenceEqual(execution.Results.JobAdIds)); }
private FlagListListModel Sort(IMember member, JobAdSearchSortCriteria criteria, JobAdsPresentationModel presentation) { return(Sort <FlagListListModel>(member, criteria ?? new JobAdSearchSortCriteria { SortOrder = DefaultSortOrder }, presentation, JobAdListType.FlagList, (m, c, r) => _executeJobAdSortCommand.SortFlagged(m, c, r))); }
protected override JobAdSortExecution Sort(IMember member, JobAdSearchSortCriteria criteria, Range range) { return(_executeJobAdSortCommand.SortFolder(member, _jobAdFoldersQuery.GetFolders(member).OrderBy(f => f.Name).ToList()[0].Id, criteria, range)); }
protected override JobAdSortExecution Sort(IMember member, JobAdSearchSortCriteria criteria, Range range) { return(_executeJobAdSortCommand.SortBlocked(member, criteria, range)); }
public void TestSortFlagged() { var employer = CreateEmployer(); // Create 25 flagged and 25 not. const int count = 50; var jobAds = Enumerable.Range(1, count).Select(index => CreateJobAd(employer, null)).ToList(); var member = CreateMember(); _memberJobAdListsCommand.AddJobAdsToFlagList(member, _jobAdFlagListsQuery.GetFlagList(member), jobAds.Take(count / 2).Select(j => j.Id)); var folder = _jobAdFoldersQuery.GetFolders(member)[0]; _memberJobAdListsCommand.AddJobAdsToFolder(member, folder, from j in jobAds select j.Id); // Default. var criteria = new JobAdSearchSortCriteria { SortOrder = JobAdSortOrder.Flagged, ReverseSortOrder = false }; LogIn(member); // First 25 should be flagged. int?page = 1; int?items = 25; var url = GetFolderUrl(folder.Id, criteria, page, items); var partialUrl = GetPartialFolderUrl(folder.Id, criteria, page, items); AssertJobAds(false, url, partialUrl, criteria, page, items, count, jobAds.Take(count / 2)); // Next 25 should not be. page = 2; items = 25; url = GetFolderUrl(folder.Id, criteria, page, items); partialUrl = GetPartialFolderUrl(folder.Id, criteria, page, items); AssertJobAds(false, url, partialUrl, criteria, page, items, count, jobAds.Skip(count / 2)); // Change direction. criteria.ReverseSortOrder = true; // First 25 should not be flagged. page = 1; items = 25; url = GetFolderUrl(folder.Id, criteria, page, items); partialUrl = GetPartialFolderUrl(folder.Id, criteria, page, items); AssertJobAds(false, url, partialUrl, criteria, page, items, count, jobAds.Skip(count / 2)); // Next 25 should be. page = 2; items = 25; url = GetFolderUrl(folder.Id, criteria, page, items); partialUrl = GetPartialFolderUrl(folder.Id, criteria, page, items); AssertJobAds(false, url, partialUrl, criteria, page, items, count, jobAds.Take(count / 2)); }
private void TestSort(JobAdSortOrder sortOrder, Action <JobAd, int> prepareCreate) { var employer = CreateEmployer(); // More recently created job ads appear at the top. const int count = 205; var jobAds = Enumerable.Range(1, count).Select(index => CreateJobAd(employer, j => prepareCreate(j, index))).ToList(); var member = CreateMember(); var folder = _jobAdFoldersQuery.GetFolders(member)[0]; _memberJobAdListsCommand.AddJobAdsToFolder(member, folder, from j in jobAds select j.Id); // Default, more recently created appear at top. var criteria = new JobAdSearchSortCriteria { SortOrder = sortOrder, ReverseSortOrder = false }; LogIn(member); int? page = null; int? items = null; ReadOnlyUrl url; ReadOnlyUrl partialUrl; if (sortOrder == JobAdSortOrder.CreatedTime) { url = GetFolderUrl(folder.Id); partialUrl = GetPartialFolderUrl(folder.Id); AssertJobAds(true, url, partialUrl, criteria, page, items, count, jobAds.Take(10)); } // Explicit default. url = GetFolderUrl(folder.Id, criteria, page, items); partialUrl = GetPartialFolderUrl(folder.Id, criteria, page, items); AssertJobAds(true, url, partialUrl, criteria, page, items, count, jobAds.Take(10)); // Explicit default pagination. page = 1; items = 10; url = GetFolderUrl(folder.Id, criteria, page, items); partialUrl = GetPartialFolderUrl(folder.Id, criteria, page, items); AssertJobAds(true, url, partialUrl, criteria, page, items, count, jobAds.Take(10)); // Change page and items. page = 3; items = 25; url = GetFolderUrl(folder.Id, criteria, page, items); partialUrl = GetPartialFolderUrl(folder.Id, criteria, page, items); AssertJobAds(true, url, partialUrl, criteria, page, items, count, jobAds.Skip((page.Value - 1) * items.Value).Take(items.Value)); // Change direction. criteria.ReverseSortOrder = true; jobAds.Reverse(); page = null; items = null; url = GetFolderUrl(folder.Id, criteria, page, items); partialUrl = GetPartialFolderUrl(folder.Id, criteria, page, items); AssertJobAds(true, url, partialUrl, criteria, page, items, count, jobAds.Take(10)); // Explicit default pagination. page = 1; items = 10; url = GetFolderUrl(folder.Id, criteria, page, items); partialUrl = GetPartialFolderUrl(folder.Id, criteria, page, items); AssertJobAds(true, url, partialUrl, criteria, page, items, count, jobAds.Take(10)); // Change page and items. page = 3; items = 25; url = GetFolderUrl(folder.Id, criteria, page, items); partialUrl = GetPartialFolderUrl(folder.Id, criteria, page, items); AssertJobAds(true, url, partialUrl, criteria, page, items, count, jobAds.Skip((page.Value - 1) * items.Value).Take(items.Value)); }
private void AssertJobAds(bool assertSequential, ReadOnlyUrl url, ReadOnlyUrl partialUrl, JobAdSearchSortCriteria criteria, int?page, int?items, int count, IEnumerable <JobAd> expectedJobAds) { Get(url); // Check elements. AssertEmptyJobAds(false); AssertSortOrders(criteria.SortOrder, new[] { JobAdSortOrder.CreatedTime, JobAdSortOrder.Flagged, JobAdSortOrder.JobType, JobAdSortOrder.Salary }); AssertSortOrder(criteria); AssertItemsPerPage(items); AssertPagination(page, items, count); // Check job ads. var jobAds = expectedJobAds.ToArray(); AssertJobAds(assertSequential, jobAds); Get(partialUrl); AssertJobAds(assertSequential, jobAds); }
private ICollection <Guid> Sort(IMember member, JobAdSearchSortCriteria criteria) { return(_executeJobAdSortCommand.SortFlagged(member, criteria, new Range(0, 10)).Results.JobAdIds); }
private static ReadOnlyUrl GetPartialFolderUrl(Guid folderId, JobAdSearchSortCriteria criteria, int?page, int?items) { return(GetUrl(GetPartialFolderUrl(folderId).AsNonReadOnly(), criteria, page, items)); }
protected abstract JobAdSortExecution Sort(IMember member, JobAdSearchSortCriteria criteria, Range range);
public void TestSortJobType() { var employer = CreateEmployer(); // Create 25 of each. const int count = 25; var jobAds = Enumerable.Range(1, count).Select(index => CreateJobAd(employer, j => j.Description.JobTypes = JobTypes.FullTime)).ToList(); jobAds.AddRange(Enumerable.Range(1, count).Select(index => CreateJobAd(employer, j => j.Description.JobTypes = JobTypes.PartTime))); jobAds.AddRange(Enumerable.Range(1, count).Select(index => CreateJobAd(employer, j => j.Description.JobTypes = JobTypes.Contract))); var member = CreateMember(); var folder = _jobAdFoldersQuery.GetFolders(member)[0]; _memberJobAdListsCommand.AddJobAdsToFolder(member, folder, from j in jobAds select j.Id); // Default, more recently created appear at top. var criteria = new JobAdSearchSortCriteria { SortOrder = JobAdSortOrder.JobType, ReverseSortOrder = false }; LogIn(member); // First 25 should be full time. int?page = 1; int?items = 25; var url = GetFolderUrl(folder.Id, criteria, page, items); var partialUrl = GetPartialFolderUrl(folder.Id, criteria, page, items); AssertJobAds(false, url, partialUrl, criteria, page, items, 3 * count, jobAds.Where(j => j.Description.JobTypes == JobTypes.FullTime)); // Next 25 should be part time. page = 2; items = 25; url = GetFolderUrl(folder.Id, criteria, page, items); partialUrl = GetPartialFolderUrl(folder.Id, criteria, page, items); AssertJobAds(false, url, partialUrl, criteria, page, items, 3 * count, jobAds.Where(j => j.Description.JobTypes == JobTypes.PartTime)); // Next 25 should be contract. page = 3; items = 25; url = GetFolderUrl(folder.Id, criteria, page, items); partialUrl = GetPartialFolderUrl(folder.Id, criteria, page, items); AssertJobAds(false, url, partialUrl, criteria, page, items, 3 * count, jobAds.Where(j => j.Description.JobTypes == JobTypes.Contract)); // Change direction. criteria.ReverseSortOrder = true; // First 25 should be contract. page = 1; items = 25; url = GetFolderUrl(folder.Id, criteria, page, items); partialUrl = GetPartialFolderUrl(folder.Id, criteria, page, items); AssertJobAds(false, url, partialUrl, criteria, page, items, 3 * count, jobAds.Where(j => j.Description.JobTypes == JobTypes.Contract)); // Next 25 should be part time. page = 2; items = 25; url = GetFolderUrl(folder.Id, criteria, page, items); partialUrl = GetPartialFolderUrl(folder.Id, criteria, page, items); AssertJobAds(false, url, partialUrl, criteria, page, items, 3 * count, jobAds.Where(j => j.Description.JobTypes == JobTypes.PartTime)); // Next 25 should be full time. page = 3; items = 25; url = GetFolderUrl(folder.Id, criteria, page, items); partialUrl = GetPartialFolderUrl(folder.Id, criteria, page, items); AssertJobAds(false, url, partialUrl, criteria, page, items, 3 * count, jobAds.Where(j => j.Description.JobTypes == JobTypes.FullTime)); }
JobAdSortExecution IExecuteJobAdSortCommand.SortFolder(IMember member, Guid folderId, JobAdSearchSortCriteria sortCriteria, Range range) { return(Sort(member, sortCriteria, range, (s, m, q) => s.SortFolder(m, folderId, q))); }
private static ReadOnlyUrl GetPartialFlagListUrl(JobAdSearchSortCriteria criteria, int?page, int?items) { return(GetUrl(GetPartialFlagListUrl().AsNonReadOnly(), criteria, page, items)); }
JobAdSortExecution IExecuteJobAdSortCommand.SortBlocked(IMember member, JobAdSearchSortCriteria sortCriteria, Range range) { return(Sort(member, sortCriteria, range, (s, m, q) => s.SortBlocked(m, q))); }