Ejemplo n.º 1
0
        public void TestSort()
        {
            var member = new Member {
                Id = Guid.NewGuid()
            };
            var jobAds = (from i in Enumerable.Range(1, 5)
                          select new JobAd {
                Id = Guid.NewGuid(), CreatedTime = DateTime.Now.AddDays(-1 * i)
            }).ToList();

            foreach (var jobAd in jobAds.Randomise())
            {
                _memberJobAdListsCommand.AddJobAdToFlagList(member, _jobAdFlagListsQuery.GetFlagList(member), jobAd.Id);
                IndexJobAd(jobAd, "LinkMe", false);
            }

            var query = new JobAdSortQuery {
                SortOrder = JobAdSortOrder.CreatedTime
            };
            var results = SortFlagged(member, query);

            Assert.IsTrue(jobAds.Select(j => j.Id).SequenceEqual(results.JobAdIds));

            query = new JobAdSortQuery {
                SortOrder = JobAdSortOrder.CreatedTime, ReverseSortOrder = false
            };
            results = SortFlagged(member, query);
            Assert.IsTrue(jobAds.Select(j => j.Id).SequenceEqual(results.JobAdIds));

            query = new JobAdSortQuery {
                SortOrder = JobAdSortOrder.CreatedTime, ReverseSortOrder = true
            };
            results = SortFlagged(member, query);
            Assert.IsTrue(jobAds.Select(j => j.Id).Reverse().SequenceEqual(results.JobAdIds));
        }
Ejemplo n.º 2
0
        public LuceneSort GetSort(IMember member, JobAdSortQuery query)
        {
            switch (query.SortOrder)
            {
            case JobAdSortOrder.CreatedTime:
                return(_createdTimeHandler.GetSort(query));

            case JobAdSortOrder.JobType:
                return(_jobTypesHandler.GetSort(query));

            case JobAdSortOrder.Salary:
                return(_salaryHandler.GetSort(query));

            case JobAdSortOrder.Flagged:
                return(new LuceneSort(
                           new[]
                {
                    new BoboCustomSortField(SearchFieldName.Id, !query.ReverseSortOrder, new SpecialsComparatorSource(false, _jobAdFlagListsQuery.GetFlaggedJobAdIds(member).Select(id => id.ToFieldValue()), SearchFieldName.Id)),
                    SortField.FIELD_SCORE
                }));

            default:
                return(null);
            }
        }
Ejemplo n.º 3
0
        protected JobAdSearchResults SortFlagged(IMember member, JobAdSortQuery jobAdQuery)
        {
            var reader = _indexWriter.getReader();
            var sorter = new Sorter(reader);
            var filter = _indexer.GetFilter(
                _jobAdSortFiltersQuery.GetFlaggedIncludeJobAdIds(member),
                _jobAdSortFiltersQuery.GetFlaggedExcludeJobAdIds(member));
            var sort          = _indexer.GetSort(member, jobAdQuery);
            var searchResults = sorter.Sort(filter, sort == null ? null : sort.getSort(), jobAdQuery.Skip, jobAdQuery.Take ?? reader.maxDoc());

            return(searchResults);
        }
Ejemplo n.º 4
0
        protected JobAdSearchResults SortFolder(IMember member, Guid folderId, JobAdSortQuery query)
        {
            var reader = _indexWriter.getReader();
            var sorter = new Sorter(reader);
            var filter = _indexer.GetFilter(
                _jobAdSortFiltersQuery.GetFolderIncludeJobAdIds(member, folderId),
                _jobAdSortFiltersQuery.GetFolderExcludeJobAdIds(member, folderId));
            var sort          = _indexer.GetSort(member, query);
            var searchResults = sorter.Sort(filter, sort == null ? null : sort.getSort(), query.Skip, query.Take ?? reader.maxDoc());

            return(searchResults);
        }
Ejemplo n.º 5
0
        public void TestSort()
        {
            var member = new Member {
                Id = Guid.NewGuid()
            };
            var jobAds = (from i in Enumerable.Range(1, 5)
                          select new JobAd {
                Id = Guid.NewGuid()
            }).ToList();

            jobAds[0].Description.JobTypes = JobTypes.PartTime;
            jobAds[1].Description.JobTypes = JobTypes.JobShare;
            jobAds[2].Description.JobTypes = JobTypes.Contract;
            jobAds[3].Description.JobTypes = JobTypes.FullTime;
            jobAds[4].Description.JobTypes = JobTypes.Temp;

            foreach (var jobAd in jobAds.Randomise())
            {
                _memberJobAdListsCommand.AddJobAdToFlagList(member, _jobAdFlagListsQuery.GetFlagList(member), jobAd.Id);
                IndexJobAd(jobAd, "LinkMe", false);
            }

            // Order should be FullTime, PartTime, Contract, Temp, JobShare.

            var query = new JobAdSortQuery {
                SortOrder = JobAdSortOrder.JobType
            };
            var results = SortFlagged(member, query);

            Assert.IsTrue(new[] { jobAds[3].Id, jobAds[0].Id, jobAds[2].Id, jobAds[4].Id, jobAds[1].Id }.SequenceEqual(results.JobAdIds));

            query = new JobAdSortQuery {
                SortOrder = JobAdSortOrder.JobType, ReverseSortOrder = false
            };
            results = SortFlagged(member, query);
            Assert.IsTrue(new[] { jobAds[3].Id, jobAds[0].Id, jobAds[2].Id, jobAds[4].Id, jobAds[1].Id }.SequenceEqual(results.JobAdIds));

            query = new JobAdSortQuery {
                SortOrder = JobAdSortOrder.JobType, ReverseSortOrder = true
            };
            results = SortFlagged(member, query);
            Assert.IsTrue(new[] { jobAds[1].Id, jobAds[4].Id, jobAds[2].Id, jobAds[0].Id, jobAds[3].Id }.SequenceEqual(results.JobAdIds));
        }
Ejemplo n.º 6
0
        public void TestSort()
        {
            var member = new Member {
                Id = Guid.NewGuid()
            };
            var jobAds = (from i in Enumerable.Range(1, 5)
                          select new JobAd {
                Id = Guid.NewGuid(), Description = { Salary         = new Salary {
                                                         LowerBound = 200000 - (10 * i)
                                                     } }
            }).ToList();

            foreach (var jobAd in jobAds.Randomise())
            {
                _memberJobAdListsCommand.AddJobAdToFlagList(member, _jobAdFlagListsQuery.GetFlagList(member), jobAd.Id);
                IndexJobAd(jobAd, "LinkMe", false);
            }

            var query = new JobAdSortQuery {
                SortOrder = JobAdSortOrder.Salary
            };
            var results = SortFlagged(member, query);

            Assert.IsTrue(jobAds.Select(j => j.Id).SequenceEqual(results.JobAdIds));

            query = new JobAdSortQuery {
                SortOrder = JobAdSortOrder.Salary, ReverseSortOrder = false
            };
            results = SortFlagged(member, query);
            Assert.IsTrue(jobAds.Select(j => j.Id).SequenceEqual(results.JobAdIds));

            query = new JobAdSortQuery {
                SortOrder = JobAdSortOrder.Salary, ReverseSortOrder = true
            };
            results = SortFlagged(member, query);
            Assert.IsTrue(jobAds.Select(j => j.Id).Reverse().SequenceEqual(results.JobAdIds));
        }
Ejemplo n.º 7
0
        LuceneSort IContentHandler.GetSort(JobAdSortQuery query)
        {
            // Reverse the natural order, i.e. newest at the top.

            return(GetSort(!query.ReverseSortOrder));
        }
Ejemplo n.º 8
0
        public void TestSort()
        {
            //Create jobAds

            var integratorId = Guid.NewGuid();
            var australia    = _locationQuery.GetCountry("Australia");
            var member       = new Member {
                Id = Guid.NewGuid()
            };
            var flagList = _jobAdFlagListsQuery.GetFlagList(member);

            var jobAd1 = new JobAd
            {
                Id          = Guid.NewGuid(),
                Status      = JobAdStatus.Open,
                Title       = "Best Job in the World",
                Integration = { IntegratorUserId = integratorId },
                CreatedTime = DateTime.Now,
                Description =
                {
                    BulletPoints = new[]               { "good verbal communication", "self management and independency", "good time management" },
                    Content      = "Mutley, you snickering, floppy eared hound. When courage is needed, you're never around.",
                    JobTypes     = JobTypes.FullTime,
                    Salary       = new Salary          {
                        LowerBound =     20000, UpperBound = 40000, Rate = SalaryRate.Year, Currency = Currency.AUD
                    },
                    Industries     = new List <Industry> {
                        _industriesQuery.GetIndustry("Consulting & Corporate Strategy")
                    },
                    Location       = new LocationReference(_locationQuery.GetCountrySubdivision(australia, "VIC")),
                },
            };

            _memberJobAdListsCommand.AddJobAdToFlagList(member, flagList, jobAd1.Id);
            IndexJobAd(jobAd1, "LinkMe", false);

            var jobAd2 = new JobAd
            {
                Id          = Guid.NewGuid(),
                Status      = JobAdStatus.Open,
                Title       = "Not so good Job",
                CreatedTime = DateTime.Now,
                Description =
                {
                    BulletPoints = new[]               { "good verbal communication", "self management and independency", "bullet point 3" },
                    Content      = "Mutley, you snickering, floppy eared hound. When courage is needed, you're never around.",
                    JobTypes     = JobTypes.Temp,
                    Salary       = new Salary          {
                        LowerBound =     200000, UpperBound = 400000, Rate = SalaryRate.Year, Currency = Currency.AUD
                    },
                    Industries     = new List <Industry> {
                        _industriesQuery.GetIndustry("Engineering")
                    },
                    Location       = new LocationReference(_locationQuery.GetCountrySubdivision(australia, "NSW")),
                }
            };

            _memberJobAdListsCommand.AddJobAdToFlagList(member, flagList, jobAd2.Id);
            IndexJobAd(jobAd2, "LinkMe", false);

            var jobAd3 = new JobAd
            {
                Id          = Guid.NewGuid(),
                Status      = JobAdStatus.Open,
                Title       = "You really don't want this",
                Integration = { IntegratorUserId = integratorId },
                CreatedTime = DateTime.Now.AddDays(-100),
                Description =
                {
                    BulletPoints = new[]               { "good verbal communication", "self management and independency", "bullet point 3" },
                    Content      = "Mutley, you snickering, floppy eared hound. When courage is needed, you're never around.",
                    JobTypes     = JobTypes.PartTime,
                    Industries   = new List <Industry> {
                        _industriesQuery.GetIndustry("Engineering")
                    },
                    Location     = new LocationReference(_locationQuery.GetCountrySubdivision(australia, "QLD")),
                }
            };

            _memberJobAdListsCommand.AddJobAdToFlagList(member, flagList, jobAd3.Id);
            IndexJobAd(jobAd3, "LinkMe", false);

            // Sort by salary.

            var jobQuery = new JobAdSortQuery {
                SortOrder = JobAdSortOrder.Salary
            };
            var results = SortFlagged(member, jobQuery);

            Assert.AreEqual(3, results.JobAdIds.Count);
            Assert.AreEqual(jobAd2.Id, results.JobAdIds[0]);
            Assert.AreEqual(jobAd1.Id, results.JobAdIds[1]);
            Assert.AreEqual(jobAd3.Id, results.JobAdIds[2]);

            // Sort by jobtype.

            jobQuery = new JobAdSortQuery {
                SortOrder = JobAdSortOrder.JobType
            };
            results = SortFlagged(member, jobQuery);
            Assert.AreEqual(3, results.JobAdIds.Count);
            Assert.AreEqual(jobAd1.Id, results.JobAdIds[0]);
            Assert.AreEqual(jobAd3.Id, results.JobAdIds[1]);
            Assert.AreEqual(jobAd2.Id, results.JobAdIds[2]);

            // Sort by jobtype II.

            jobAd2.Description.JobTypes = JobTypes.All;
            IndexJobAd(jobAd2, "LinkMe", false, false);

            jobQuery = new JobAdSortQuery {
                SortOrder = JobAdSortOrder.JobType
            };
            results = SortFlagged(member, jobQuery);
            Assert.AreEqual(3, results.JobAdIds.Count);
            //1 & 2 are equivalent - just make sure PT is last
            Assert.AreEqual(jobAd3.Id, results.JobAdIds[2]);

            // Sort by jobtype III.

            jobAd1.Description.JobTypes |= JobTypes.Temp;
            IndexJobAd(jobAd1, "LinkMe", false, false);

            jobQuery = new JobAdSortQuery {
                SortOrder = JobAdSortOrder.JobType
            };
            results = SortFlagged(member, jobQuery);
            Assert.AreEqual(3, results.JobAdIds.Count);
            //1 & 2 are equivalent - just make sure PT is last
            Assert.AreEqual(jobAd3.Id, results.JobAdIds[2]);

            // Sort by jobtype IV.

            jobAd1.Description.JobTypes = JobTypes.Temp | JobTypes.Contract;
            IndexJobAd(jobAd1, "LinkMe", false, false);

            jobQuery = new JobAdSortQuery {
                SortOrder = JobAdSortOrder.JobType
            };
            results = SortFlagged(member, jobQuery);
            Assert.AreEqual(3, results.JobAdIds.Count);
            Assert.AreEqual(jobAd2.Id, results.JobAdIds[0]);
            Assert.AreEqual(jobAd3.Id, results.JobAdIds[1]);
            Assert.AreEqual(jobAd1.Id, results.JobAdIds[2]);

            // Sort by flagged list.

            //TODO: no support for flagging jobads yet

            // Sort by createTime.

            jobQuery = new JobAdSortQuery {
                SortOrder = JobAdSortOrder.CreatedTime
            };
            results = SortFlagged(member, jobQuery);
            Assert.AreEqual(3, results.JobAdIds.Count);
            Assert.AreEqual(jobAd2.Id, results.JobAdIds[0]);
            Assert.AreEqual(jobAd1.Id, results.JobAdIds[1]);
            Assert.AreEqual(jobAd3.Id, results.JobAdIds[2]);
        }
Ejemplo n.º 9
0
        private JobAdSearchResults Sort(Guid?memberId, JobAdSortQuery sortQuery, Func <Member, IList <Guid> > getIncludeJobAdIds, Func <Member, IList <Guid> > getExcludeJobAdIds)
        {
            const string method = "Job Ad Supplemental Search";

            try
            {
                #region Log

                Stopwatch searchTime = null;
                if (EventSource.IsEnabled(Event.Trace))
                {
                    searchTime = Stopwatch.StartNew();
                }

                #endregion

                var member = memberId == null
                    ? null
                    : new Member {
                    Id = memberId.Value
                };

                var filter = _indexer.GetFilter(getIncludeJobAdIds(member), getExcludeJobAdIds(member));
                var sort   = _indexer.GetSort(member, sortQuery);

                #region Log

                if (EventSource.IsEnabled(Event.Trace))
                {
                    EventSource.Raise(Event.Trace, method, "Executing query.",
                                      Event.Arg("filter", (filter != null) ? filter.toString() : string.Empty));
                }

                #endregion

                var reader      = GetReader();
                var sorter      = new Sorter(reader);
                var sorts       = (sort != null) ? sort.getSort() : null;
                var sortResults = sorter.Sort(filter, sorts, sortQuery.Skip, sortQuery.Take ?? reader.maxDoc());

                #region Log

                if (searchTime != null)
                {
                    searchTime.Stop();
                    EventSource.Raise(Event.Trace, method, "Query execution complete.",
                                      Event.Arg("filter", (filter != null) ? filter.toString() : string.Empty),
                                      Event.Arg("total hits", sortResults.TotalMatches),
                                      Event.Arg("result count", sortResults.JobAdIds.Count),
                                      Event.Arg("searchTime", searchTime.ElapsedMilliseconds));
                }

                #endregion

                return(sortResults);
            }
            catch (Exception e)
            {
                #region Log

                EventSource.Raise(Event.Error, method, "Unexpected exception.", e);

                #endregion

                throw;
            }
        }
Ejemplo n.º 10
0
 JobAdSearchResults IJobAdSortService.SortBlocked(Guid?memberId, JobAdSortQuery query)
 {
     return(Sort(memberId, query, m => _jobAdSortFiltersQuery.GetBlockedIncludeJobAdIds(m), m => _jobAdSortFiltersQuery.GetBlockedExcludeJobAdIds(m)));
 }
Ejemplo n.º 11
0
 JobAdSearchResults IJobAdSortService.SortFolder(Guid?memberId, Guid folderId, JobAdSortQuery query)
 {
     return(Sort(memberId, query, m => _jobAdSortFiltersQuery.GetFolderIncludeJobAdIds(m, folderId), m => _jobAdSortFiltersQuery.GetFolderExcludeJobAdIds(m, folderId)));
 }
Ejemplo n.º 12
0
 LuceneSort IContentHandler.GetSort(JobAdSortQuery query)
 {
     return(GetSort(query.ReverseSortOrder));
 }
Ejemplo n.º 13
0
 LuceneSort IContentHandler.GetSort(JobAdSortQuery query)
 {
     return(null);
 }
Ejemplo n.º 14
0
        public void TestCloseJobAd()
        {
            var member = CreateMember();
            var folder = _jobAdFoldersQuery.GetFolders(member)[0];

            var searchQuery = new JobAdSearchQuery {
                AdTitle = Expression.Parse(Title)
            };
            var sortQuery = new JobAdSortQuery();

            // Add a job ad.

            var employer = CreateEmployer();

            LogIn(employer);
            Get(_newJobAdUrl);
            CreateJobAd(employer.EmailAddress.Address);
            _previewButton.Click();
            _publishButton.Click();
            LogOut();

            // Add it to the folder.

            var jobAd = _jobAdsQuery.GetJobAds <JobAdEntry>(_jobAdsQuery.GetJobAdIds(employer.Id, JobAdStatus.Open))[0];

            _memberJobAdListsCommand.AddJobAdToFolder(member, folder, jobAd.Id);

            // Wait for the polling to kick in.

            Thread.Sleep(3 * MonitorInterval * 1000);

            // Do some searches.

            var results = _searchService1.Search(null, searchQuery);

            Assert.AreEqual(1, results.JobAdIds.Count);
            Assert.AreEqual(jobAd.Id, results.JobAdIds[0]);

            results = _searchService2.Search(null, searchQuery);
            Assert.AreEqual(1, results.JobAdIds.Count);
            Assert.AreEqual(jobAd.Id, results.JobAdIds[0]);

            results = _sortService1.SortFolder(member.Id, folder.Id, sortQuery);
            Assert.AreEqual(1, results.JobAdIds.Count);
            Assert.AreEqual(jobAd.Id, results.JobAdIds[0]);

            results = _sortService2.SortFolder(member.Id, folder.Id, sortQuery);
            Assert.AreEqual(1, results.JobAdIds.Count);
            Assert.AreEqual(jobAd.Id, results.JobAdIds[0]);

            // Close the job ad.

            _jobAdsCommand.CloseJobAd(jobAd);

            // Do some searches again.

            results = _searchService1.Search(null, searchQuery);
            Assert.AreEqual(0, results.JobAdIds.Count);

            results = _sortService1.SortFolder(member.Id, folder.Id, sortQuery);
            Assert.AreEqual(1, results.JobAdIds.Count);
            Assert.AreEqual(jobAd.Id, results.JobAdIds[0]);

            // Wait for the polling to kick in.

            Thread.Sleep(3 * MonitorInterval * 1000);
            results = _searchService2.Search(null, searchQuery);
            Assert.AreEqual(0, results.JobAdIds.Count);

            results = _sortService2.SortFolder(member.Id, folder.Id, sortQuery);
            Assert.AreEqual(1, results.JobAdIds.Count);
            Assert.AreEqual(jobAd.Id, results.JobAdIds[0]);
        }