Exemplo n.º 1
0
        private static bool CanAccessFolder(IEmployer employer, CandidateFolder folder)
        {
            if (employer == null)
            {
                return(false);
            }
            if (folder == null)
            {
                return(false);
            }
            if (folder.IsDeleted)
            {
                return(false);
            }

            if (folder.FolderType == FolderType.Shared)
            {
                // The folder is shared, so the user must have access to this company's shared data to edit it. Even if they
                // are the owner of this folder they cannot edit it once they've left the company.

                return(folder.OrganisationId == employer.Organisation.Id);
            }

            // The folder is private, so only the owner can edit or delete it.

            return(folder.RecruiterId == employer.Id);
        }
        public void TestMultipleMembersInFolders()
        {
            var employer0 = CreateEmployer(0);
            var employer1 = CreateEmployer(1, employer0.Organisation);

            var member0 = CreateMember(0);
            var member1 = CreateMember(1);

            var folder = new CandidateFolder {
                Name = FolderName
            };

            _candidateFoldersCommand.CreateSharedFolder(employer0, folder);
            _candidateListsCommand.AddCandidateToFolder(employer0, folder, member0.Id);

            folder = _candidateFoldersQuery.GetShortlistFolder(employer0);
            _candidateListsCommand.AddCandidateToFolder(employer0, folder, member0.Id);
            _candidateListsCommand.AddCandidateToFolder(employer0, folder, member1.Id);

            TestCount(employer0, member0.Id, 2, v => v.Folders);
            TestCount(employer0, member1.Id, 1, v => v.Folders);
            TestCount(employer1, member0.Id, 1, v => v.Folders);
            TestCount(employer1, member1.Id, 0, v => v.Folders);

            var views = _employerMemberViewsQuery.GetEmployerMemberViews(employer0, new[] { member0.Id, member1.Id });

            Assert.AreEqual(2, views[member0.Id].Folders);
            Assert.AreEqual(1, views[member1.Id].Folders);

            views = _employerMemberViewsQuery.GetEmployerMemberViews(employer1, new[] { member0.Id, member1.Id });
            Assert.AreEqual(1, views[member0.Id].Folders);
            Assert.AreEqual(0, views[member1.Id].Folders);
        }
Exemplo n.º 3
0
        private void TestDeleteFolder(bool isShared)
        {
            // Create a folder.

            var employer = _employerAccountsCommand.CreateTestEmployer(0, _organisationsCommand.CreateTestVerifiedOrganisation(0));

            var folder = new CandidateFolder {
                Name = string.Format(FolderNameFormat, 0)
            };

            if (isShared)
            {
                _candidateFoldersCommand.CreateSharedFolder(employer, folder);
            }
            else
            {
                _candidateFoldersCommand.CreatePrivateFolder(employer, folder);
            }

            LogIn(employer);

            // Delete.

            var model = DeleteFolder(folder.Id);

            // Assert.

            AssertJsonSuccess(model);
            Assert.IsNull(_candidateFoldersQuery.GetFolder(employer, folder.Id));
        }
Exemplo n.º 4
0
        private void AssertFolders(IEmployer employer, CandidateFolder shortlistFolder, CandidateFolder mobileFolder, ICollection <CandidateFolder> privateFolders, ICollection <CandidateFolder> sharedFolders)
        {
            // Shortlist folder.

            AssertFolder(employer, shortlistFolder, _candidateFoldersQuery.GetFolder(employer, shortlistFolder.Id));

            // Mobile folder.

            AssertFolder(employer, mobileFolder, _candidateFoldersQuery.GetFolder(employer, mobileFolder.Id));

            // Private folders.

            foreach (var folder in privateFolders)
            {
                AssertFolder(employer, folder, _candidateFoldersQuery.GetFolder(employer, folder.Id));
            }

            var folders = _candidateFoldersQuery.GetPrivateFolders(employer);

            Assert.AreEqual(privateFolders.Count, folders.Count);
            foreach (var folder in privateFolders)
            {
                var folderId = folder.Id;
                AssertFolder(employer, folder, (from f in folders where f.Id == folderId select f).Single());
            }

            // Shared folders.

            foreach (var folder in sharedFolders)
            {
                AssertFolder(employer, folder, _candidateFoldersQuery.GetFolder(employer, folder.Id));
            }

            folders = _candidateFoldersQuery.GetSharedFolders(employer);
            Assert.AreEqual(sharedFolders.Count, folders.Count);
            foreach (var folder in sharedFolders)
            {
                var folderId = folder.Id;
                AssertFolder(employer, folder, (from f in folders where f.Id == folderId select f).Single());
            }

            // All folders.

            folders = _candidateFoldersQuery.GetFolders(employer);
            Assert.AreEqual(1 + 1 + privateFolders.Count + sharedFolders.Count, folders.Count);
            AssertFolder(employer, shortlistFolder, (from f in folders where f.FolderType == FolderType.Shortlist select f).Single());
            AssertFolder(employer, mobileFolder, (from f in folders where f.FolderType == FolderType.Mobile select f).Single());

            foreach (var folder in privateFolders)
            {
                var folderId = folder.Id;
                AssertFolder(employer, folder, (from f in folders where f.Id == folderId select f).Single());
            }

            foreach (var folder in sharedFolders)
            {
                var folderId = folder.Id;
                AssertFolder(employer, folder, (from f in folders where f.Id == folderId select f).Single());
            }
        }
Exemplo n.º 5
0
        private void Validate(IEmployer employer, CandidateFolder folder, string newName)
        {
            if (string.IsNullOrEmpty(newName))
            {
                throw new ValidationErrorsException(new RequiredValidationError("name"));
            }

            // Don't need to check the name of a deleted folder.

            if (folder.IsDeleted)
            {
                return;
            }

            // Check no private folder with the same name and owner OR no shared folder with same name and organisation.

            if (folder.FolderType == FolderType.Shared)
            {
                if (_contenderListsQuery.GetSharedList <CandidateFolder>(employer.Organisation.Id, newName, new[] { (int)FolderType.Shared }) != null)
                {
                    throw new ValidationErrorsException(new DuplicateValidationError("Name"));
                }
            }
            else
            {
                if (_contenderListsQuery.GetList <CandidateFolder>(employer.Id, newName, new[] { (int)FolderType.Shortlist, (int)FolderType.Private }) != null)
                {
                    throw new ValidationErrorsException(new DuplicateValidationError("Name"));
                }
            }
        }
Exemplo n.º 6
0
        private void AssertFolders(IUser employer, CandidateFolder shortlistFolder, ICollection <CandidateFolder> privateFolders, ICollection <CandidateFolder> sharedFolders)
        {
            LogIn(employer);
            Get(GetFoldersUrl());

            // Private folders.

            var nodes = Browser.CurrentHtml.DocumentNode.SelectNodes("//div[@class='manage-folders']/div[position()=1]/div[@class='section-content']/table//tr");

            Assert.AreEqual(2 + privateFolders.Count, nodes.Count);

            // First one should be flag list.

            AssertFlagList(nodes[0]);

            // Next should be shortlist.

            AssertShortList(nodes[1], shortlistFolder);

            // The rest should be private folders.

            AssertPrivateFolders((from i in Enumerable.Range(2, nodes.Count - 2) select nodes[i]), employer as Employer, privateFolders);

            // Shared folders.

            nodes = Browser.CurrentHtml.DocumentNode.SelectNodes("//div[@class='manage-folders']/div[position()=2]/div[@class='section-content']/table//tr");
            Assert.AreEqual(sharedFolders.Count, nodes == null ? 0 : nodes.Count);

            AssertSharedFolders(employer.Id, nodes, sharedFolders);
        }
Exemplo n.º 7
0
        protected static void AssertFolders(IEmployer employer, string shortlistFolderName, string mobileFolderName, CandidateFolder[] expectedFolders, IList <CandidateFolder> folders)
        {
            // Should always have a shortlist and favourites folder.

            Assert.AreEqual(expectedFolders.Length + 2, folders.Count);

            // Look for the shortlist folder.

            var shortlistFolder = new CandidateFolder {
                RecruiterId = employer.Id, FolderType = FolderType.Shortlist, Name = shortlistFolderName
            };

            AssertFolder(employer, shortlistFolder, (from f in folders where f.FolderType == FolderType.Shortlist select f).Single());

            // Look for the mobile folder.

            var mobileFolder = new CandidateFolder {
                RecruiterId = employer.Id, FolderType = FolderType.Mobile, Name = mobileFolderName
            };

            AssertFolder(employer, mobileFolder, (from f in folders where f.FolderType == FolderType.Mobile select f).Single());

            // Look for other folders.

            foreach (var expectedFolder in expectedFolders)
            {
                var expectedFolderId = expectedFolder.Id;
                AssertFolder(employer, expectedFolder, (from f in folders where f.Id == expectedFolderId select f).Single());
            }
        }
Exemplo n.º 8
0
        protected static void AssertFolder(IEmployer employer, CandidateFolder expectedFolder, CandidateFolder folder)
        {
            Assert.AreNotEqual(Guid.Empty, folder.Id);
            Assert.AreNotEqual(DateTime.MinValue, folder.CreatedTime);

            if (!((expectedFolder.FolderType == FolderType.Shortlist || expectedFolder.FolderType == FolderType.Mobile) && expectedFolder.Id == Guid.Empty))
            {
                Assert.AreEqual(expectedFolder.Id, folder.Id);
            }
            Assert.AreEqual(expectedFolder.Name, folder.Name);
            Assert.AreEqual(expectedFolder.FolderType, folder.FolderType);

            switch (expectedFolder.FolderType)
            {
            case FolderType.Shared:
            case FolderType.Private:
                Assert.IsNotNull(folder.Name);
                break;
            }

            if (folder.FolderType == FolderType.Shared)
            {
                Assert.AreEqual(employer.Organisation.Id, folder.OrganisationId);
                Assert.AreEqual(expectedFolder.OrganisationId, folder.OrganisationId);
            }
            else
            {
                Assert.AreEqual(employer.Id, folder.RecruiterId);
                Assert.AreEqual(expectedFolder.RecruiterId, folder.RecruiterId);
                Assert.IsNull(folder.OrganisationId);
            }
        }
Exemplo n.º 9
0
        private static bool CanDeleteFolder(IEmployer employer, CandidateFolder folder)
        {
            // Must be owner.

            return(CanAccessFolder(employer, folder, true) &&
                   CanBeDeleted(folder) &&
                   folder.RecruiterId == employer.Id);
        }
Exemplo n.º 10
0
 private void CreateCandidates(int count, IEmployer employer, CandidateFolder folder)
 {
     for (var index = 0; index < count; ++index)
     {
         var member = CreateMember(index);
         _candidateListsCommand.AddCandidateToFolder(employer, folder, member.Id);
     }
 }
Exemplo n.º 11
0
        protected CandidateFolder CreatePrivateFolder(IEmployer employer, int index)
        {
            var folder = new CandidateFolder {
                Name = string.Format(PrivateFolderNameFormat, index)
            };

            _candidateFoldersCommand.CreatePrivateFolder(employer, folder);
            return(folder);
        }
Exemplo n.º 12
0
        protected CandidateFolder CreateSharedFolder(IEmployer employer, int index)
        {
            var folder = new CandidateFolder {
                Name = string.Format(FolderNameFormat, index), RecruiterId = employer.Id
            };

            _candidateFoldersCommand.CreateSharedFolder(employer, folder);
            return(folder);
        }
Exemplo n.º 13
0
        void ICandidateFoldersCommand.CreatePrivateFolder(IEmployer employer, CandidateFolder folder)
        {
            folder.RecruiterId    = employer.Id;
            folder.OrganisationId = null;
            folder.FolderType     = FolderType.Private;

            Validate(employer, folder, folder.Name);
            _contenderListsCommand.CreateList(folder);
        }
Exemplo n.º 14
0
        private CandidateFolder CreateSharedFolder(IEmployer employer, int index)
        {
            var folder = new CandidateFolder {
                Name = string.Format(SharedFolderName, index)
            };

            _candidateFoldersCommand.CreateSharedFolder(employer, folder);
            return(folder);
        }
Exemplo n.º 15
0
        private void AssertShortList(HtmlNode node, CandidateFolder shortlistFolder)
        {
            var a = node.SelectSingleNode(".//a");

            Assert.AreEqual(string.IsNullOrEmpty(shortlistFolder.Name) ? "My shortlist" : shortlistFolder.Name, a.InnerText);
            Assert.AreEqual(GetFolderUrl(shortlistFolder.Id).Path.ToLower(), a.Attributes["href"].Value.ToLower());
            AssertRename(node, true);
            AssertRemove(node, false, false);
        }
Exemplo n.º 16
0
        private CandidateFolder CreateSpecialFolder(Guid employerId, FolderType folderType)
        {
            var folder = new CandidateFolder {
                RecruiterId = employerId, FolderType = folderType
            };

            _contenderListsCommand.CreateList(folder);
            return(folder);
        }
Exemplo n.º 17
0
        void ICandidateFoldersCommand.UndeleteFolder(IEmployer employer, CandidateFolder folder)
        {
            if (!CanDeleteFolder(employer, folder))
            {
                throw new CandidateFoldersPermissionsException(employer, folder.Id);
            }

            folder.IsDeleted = false;
            _contenderListsCommand.UpdateList(folder);
        }
Exemplo n.º 18
0
        int ICandidateListsCommand.RemoveAllCandidatesFromFolder(IEmployer employer, CandidateFolder folder)
        {
            if (!CanModifyCandidates(employer, folder))
            {
                throw new CandidateFoldersPermissionsException(employer, folder.Id);
            }

            RemoveAllCandidatesFromList(folder.Id);
            return(_contenderListsQuery.GetListedCount(folder.Id, new[] { (int)BlockListType.Permanent }));
        }
Exemplo n.º 19
0
        int ICandidateListsCommand.AddCandidatesToFolder(IEmployer employer, CandidateFolder folder, IEnumerable <Guid> candidateIds)
        {
            if (!CanModifyCandidates(employer, folder))
            {
                throw new CandidateFoldersPermissionsException(employer, folder.Id);
            }

            AddCandidatesToFolder(employer.Id, folder.Id, candidateIds);
            return(_contenderListsQuery.GetListedCount(folder.Id, new[] { (int)BlockListType.Permanent }));
        }
Exemplo n.º 20
0
        void ICandidateFoldersCommand.CreateSharedFolder(IEmployer employer, CandidateFolder folder)
        {
            // Create a list for the folder.

            folder.RecruiterId    = employer.Id;
            folder.OrganisationId = employer.Organisation.Id;
            folder.FolderType     = FolderType.Shared;

            Validate(employer, folder, folder.Name);
            _contenderListsCommand.CreateList(folder);
        }
Exemplo n.º 21
0
        public void ListsTestsInitialize()
        {
            Resolve <IDbConnectionFactory>().DeleteAllTestData();

            _temporaryBlockList = null;
            _permanentBlockList = null;
            _flagList           = null;
            _privateFolder      = null;
            _sharedFolder       = null;
            _shortlistFolder    = null;
            _mobileFolder       = null;
        }
Exemplo n.º 22
0
        private static void AssertModel(CandidateFolder folder, IDictionary <Guid, int> expectedCounts, bool expectedCanRename, bool expectedCanDelete, FolderModel model)
        {
            Assert.AreEqual(folder.Name, model.Name);
            Assert.AreEqual(folder.FolderType.ToString(), model.Type);
            Assert.AreEqual(expectedCanRename, model.CanRename);
            Assert.AreEqual(expectedCanDelete, model.CanDelete);

            int expectedCount;

            expectedCounts.TryGetValue(model.Id, out expectedCount);
            Assert.AreEqual(expectedCount, model.Count);
        }
Exemplo n.º 23
0
 public static string GetNameDisplayText(this CandidateFolder folder)
 {
     if (folder.FolderType == FolderType.Shortlist && string.IsNullOrEmpty(folder.Name))
     {
         return("My shortlist");
     }
     if (folder.FolderType == FolderType.Mobile)
     {
         return("My mobile favourites");
     }
     return(folder.Name);
 }
Exemplo n.º 24
0
        void ICandidateFoldersCommand.RenameFolder(IEmployer employer, CandidateFolder folder, string name)
        {
            if (!CanRenameFolder(employer, folder))
            {
                throw new CandidateFoldersPermissionsException(employer, folder.Id);
            }

            // Validate.

            Validate(employer, folder, name);
            folder.Name = name;
            _contenderListsCommand.UpdateList(folder);
        }
Exemplo n.º 25
0
        public ActionResult NewFolder(string name, bool isShared, Guid[] candidateIds)
        {
            try
            {
                // Create the folder.

                var employer = CurrentEmployer;
                var folder   = new CandidateFolder
                {
                    Name           = name,
                    OrganisationId = isShared ? employer.Organisation.Id : (Guid?)null,
                    RecruiterId    = employer.Id
                };

                if (isShared)
                {
                    _candidateFoldersCommand.CreateSharedFolder(employer, folder);
                }
                else
                {
                    _candidateFoldersCommand.CreatePrivateFolder(employer, folder);
                }

                // Add candidates.

                if (candidateIds != null && candidateIds.Length > 0)
                {
                    _candidateListsCommand.AddCandidatesToFolder(employer, folder, candidateIds);
                }

                return(Json(new JsonFolderModel
                {
                    Folder = new FolderModel
                    {
                        Id = folder.Id,
                        Name = folder.Name,
                        Type = (isShared ? FolderType.Shared : FolderType.Private).ToString(),
                        CanRename = _candidateFoldersCommand.CanRenameFolder(employer, folder),
                        CanDelete = _candidateFoldersCommand.CanDeleteFolder(employer, folder),
                        Count = candidateIds == null ? 0 : candidateIds.Length,
                    }
                }));
            }
            catch (UserException ex)
            {
                ModelState.AddModelError(ex, new StandardErrorHandler());
            }

            return(Json(new JsonResponseModel()));
        }
Exemplo n.º 26
0
        private IList <Member> CreateCandidates(int count, IEmployer employer, CandidateFolder folder)
        {
            var members = new List <Member>();

            for (var index = 0; index < count; ++index)
            {
                var member = CreateMember(index);
                _candidateListsCommand.AddCandidateToFolder(employer, folder, member.Id);
                _memberSearchService.UpdateMember(member.Id);
                members.Add(member);
            }

            return(members);
        }
Exemplo n.º 27
0
        public void TestGetMobileFolder()
        {
            var employer = CreateEmployer(1);
            var folder   = new CandidateFolder {
                RecruiterId = employer.Id, FolderType = FolderType.Mobile
            };

            var mobileFolder = _candidateFoldersQuery.GetMobileFolder(employer);

            AssertFolder(employer, folder, mobileFolder);
            AssertFolder(employer, folder, _candidateFoldersQuery.GetFolder(employer, mobileFolder.Id));
            Assert.AreEqual(0, _candidateFoldersQuery.GetPrivateFolders(employer).Count);
            Assert.AreEqual(0, _candidateFoldersQuery.GetSharedFolders(employer).Count);
            AssertFolders(employer, new CandidateFolder[0], _candidateFoldersQuery.GetFolders(employer));
        }
Exemplo n.º 28
0
        public void TestGetShortlistFlaggedFolders()
        {
            var employer = CreateEmployer(1);
            var folder1  = new CandidateFolder {
                RecruiterId = employer.Id, FolderType = FolderType.Shortlist
            };

            var shortlistFolder = _candidateFoldersQuery.GetShortlistFolder(employer);

            AssertFolder(employer, folder1, shortlistFolder);
            AssertFolder(employer, folder1, _candidateFoldersQuery.GetFolder(employer, shortlistFolder.Id));

            Assert.AreEqual(0, _candidateFoldersQuery.GetPrivateFolders(employer).Count);
            Assert.AreEqual(0, _candidateFoldersQuery.GetSharedFolders(employer).Count);
            AssertFolders(employer, new CandidateFolder[0], _candidateFoldersQuery.GetFolders(employer));
        }
        public void TestIsInSharedFolder()
        {
            var employer0 = CreateEmployer(0);
            var employer1 = CreateEmployer(1, employer0.Organisation);

            var member = CreateMember(0);
            var folder = new CandidateFolder {
                Name = FolderName
            };

            _candidateFoldersCommand.CreateSharedFolder(employer0, folder);
            _candidateListsCommand.AddCandidateToFolder(employer0, folder, member.Id);

            TestCount(employer0, member.Id, 1, v => v.Folders);
            TestCount(employer1, member.Id, 1, v => v.Folders);
        }
Exemplo n.º 30
0
        protected void AssertFolderEntries(IEmployer employer, CandidateFolder folder, ICollection <Member> inFolderMembers, ICollection <Member> notInFolderMembers)
        {
            // IsInFolder

            foreach (var inFolderMember in inFolderMembers)
            {
                Assert.IsTrue(_candidateFoldersQuery.IsInFolder(employer, folder.Id, inFolderMember.Id));
            }
            foreach (var notInFolderMember in notInFolderMembers)
            {
                Assert.IsFalse(_candidateFoldersQuery.IsInFolder(employer, folder.Id, notInFolderMember.Id));
            }

            if (folder.FolderType == FolderType.Mobile)
            {
                foreach (var member in inFolderMembers)
                {
                    Assert.IsTrue(_candidateFoldersQuery.IsInMobileFolder(employer, member.Id));
                }
                foreach (var member in notInFolderMembers)
                {
                    Assert.IsFalse(_candidateFoldersQuery.IsInMobileFolder(employer, member.Id));
                }
            }

            // GetInFolderCandidateIds

            Assert.IsTrue((from m in inFolderMembers select m.Id).CollectionEqual(_candidateFoldersQuery.GetInFolderCandidateIds(employer, folder.Id)));
            if (folder.FolderType == FolderType.Mobile)
            {
                Assert.IsTrue((from m in inFolderMembers select m.Id).CollectionEqual(_candidateFoldersQuery.GetInMobileFolderCandidateIds(employer, from m in inFolderMembers.Concat(notInFolderMembers) select m.Id)));
            }

            // GetInFolderCounts.

            var counts = _candidateFoldersQuery.GetInFolderCounts(employer);

            if (counts.ContainsKey(folder.Id))
            {
                Assert.AreEqual(inFolderMembers.Count, counts[folder.Id]);
            }
            else
            {
                Assert.AreEqual(inFolderMembers.Count, 0);
            }
        }