Пример #1
0
        public void TestResumeCount()
        {
            // Create users.

            CreateMember(1, true);
            var member2 = CreateMember(2, true);
            var member3 = CreateMember(3, true);

            CreateMember(4, false);

            // Send.

            _emailsCommand.TrySend(new StatsEmail(_dailyReportsQuery.GetDailyReport(DayRange.Yesterday)));

            // Check.

            var email = _emailServer.AssertEmailSent();

            email.AssertHtmlViewContains("<td style=\"text-align:right;\">New resumes:</td>\r\n            <td style=\"text-align:left;\">3</td>");
            email.AssertHtmlViewContains("<td style=\"text-align:right;\">Uploaded resumes:</td>\r\n            <td style=\"text-align:left;\">3</td>");
            email.AssertHtmlViewContains("<td style=\"text-align:right;\">Reloaded resumes:</td>\r\n            <td style=\"text-align:left;\">0</td>");
            email.AssertHtmlViewContains("<td style=\"text-align:right;\">Edited resumes:</td>\r\n            <td style=\"text-align:left;\">0</td>");
            email.AssertHtmlViewContains("<td style=\"text-align:right;\">Updated resumes:</td>\r\n            <td style=\"text-align:left;\">3</td>");

            // Delete the UploadResume event for member2, but add an EditResume event.

            var events = _resumeReportsQuery.GetResumeEvents(member2.Id);

            _resumeReportsCommand.DeleteResumeEvent(events[0].Id);

            var candidate = _candidatesCommand.GetCandidate(member2.Id);

            _resumeReportsCommand.CreateResumeEvent(new ResumeEditEvent {
                CandidateId = member2.Id, ResumeId = candidate.ResumeId.Value, ResumeCreated = true, Time = events[0].Time
            });
            _emailsCommand.TrySend(new StatsEmail(_dailyReportsQuery.GetDailyReport(DayRange.Yesterday)));
            email = _emailServer.AssertEmailSent();
            email.AssertHtmlViewContains("<td style=\"text-align:right;\">New resumes:</td>\r\n            <td style=\"text-align:left;\">3</td>");
            email.AssertHtmlViewContains("<td style=\"text-align:right;\">Uploaded resumes:</td>\r\n            <td style=\"text-align:left;\">2</td>");
            email.AssertHtmlViewContains("<td style=\"text-align:right;\">Reloaded resumes:</td>\r\n            <td style=\"text-align:left;\">0</td>");
            email.AssertHtmlViewContains("<td style=\"text-align:right;\">Edited resumes:</td>\r\n            <td style=\"text-align:left;\">1</td>");
            email.AssertHtmlViewContains("<td style=\"text-align:right;\">Updated resumes:</td>\r\n            <td style=\"text-align:left;\">3</td>");

            // Delete the UploadResume event for member2, but add an ReloadResume event.

            events = _resumeReportsQuery.GetResumeEvents(member3.Id);

            candidate = _candidatesCommand.GetCandidate(member2.Id);
            _resumeReportsCommand.CreateResumeEvent(new ResumeReloadEvent {
                CandidateId = member3.Id, ResumeId = candidate.ResumeId.Value, Time = events[0].Time
            });
            _emailsCommand.TrySend(new StatsEmail(_dailyReportsQuery.GetDailyReport(DayRange.Yesterday)));
            email = _emailServer.AssertEmailSent();
            email.AssertHtmlViewContains("<td style=\"text-align:right;\">New resumes:</td>\r\n            <td style=\"text-align:left;\">3</td>");
            email.AssertHtmlViewContains("<td style=\"text-align:right;\">Uploaded resumes:</td>\r\n            <td style=\"text-align:left;\">2</td>");
            email.AssertHtmlViewContains("<td style=\"text-align:right;\">Reloaded resumes:</td>\r\n            <td style=\"text-align:left;\">1</td>");
            email.AssertHtmlViewContains("<td style=\"text-align:right;\">Edited resumes:</td>\r\n            <td style=\"text-align:left;\">1</td>");
            email.AssertHtmlViewContains("<td style=\"text-align:right;\">Updated resumes:</td>\r\n            <td style=\"text-align:left;\">3</td>");
        }
Пример #2
0
        public void TestStatuses()
        {
            var employer = CreateEmployer(0);

            // Available now.

            var       memberIndex  = 0;
            const int availableNow = 4;

            for (var index = 0; index < availableNow; ++index)
            {
                var member    = _memberAccountsCommand.CreateTestMember(memberIndex++);
                var candidate = _candidatesCommand.GetCandidate(member.Id);
                candidate.Status = CandidateStatus.AvailableNow;
                _candidatesCommand.UpdateCandidate(candidate);
            }

            // Actively looking.

            const int activelyLooking = 3;

            for (var index = 0; index < activelyLooking; ++index)
            {
                var member    = _memberAccountsCommand.CreateTestMember(memberIndex++);
                var candidate = _candidatesCommand.GetCandidate(member.Id);
                candidate.Status = CandidateStatus.ActivelyLooking;
                _candidatesCommand.UpdateCandidate(candidate);
            }

            // Indigenous.

            const int aboriginal = 2;

            for (var index = 0; index < aboriginal; ++index)
            {
                var member = _memberAccountsCommand.CreateTestMember(memberIndex++);
                member.EthnicStatus = EthnicStatus.Aboriginal;
                _memberAccountsCommand.UpdateMember(member);
            }

            const int torreIslander = 3;

            for (var index = 0; index < torreIslander; ++index)
            {
                var member = _memberAccountsCommand.CreateTestMember(memberIndex++);
                member.EthnicStatus = EthnicStatus.TorresIslander;
                _memberAccountsCommand.UpdateMember(member);
            }

            GetNewsletterUrl(employer.Id);

            var document = GetDocument();

            Assert.AreEqual(availableNow, GetSampleResults(document, Sample.ImmediatelyAvailable));
            Assert.AreEqual(activelyLooking + aboriginal + torreIslander, GetSampleResults(document, Sample.ActivelyLooking));
            Assert.AreEqual(aboriginal + torreIslander, GetSampleResults(document, Sample.Indigenous));
        }
Пример #3
0
        protected void TestCandidateUrls(IMember member, Action assert)
        {
            var candidateUrl = GetCandidateUrl(member, _candidatesCommand.GetCandidate(member.Id));

            Get(candidateUrl);
            AssertUrl(candidateUrl);
            assert();

            Get(GetCandidatesUrl(member.Id));
            AssertUrl(candidateUrl);
            assert();
        }
Пример #4
0
        protected virtual Member CreateMember(int index)
        {
            var member    = _memberAccountsCommand.CreateTestMember(index);
            var candidate = _candidatesCommand.GetCandidate(member.Id);

            _candidateResumesCommand.AddTestResume(candidate);
            return(member);
        }
Пример #5
0
        protected Member CreateMember(int index, CandidateStatus status)
        {
            var member    = _memberAccountsCommand.CreateTestMember(index);
            var candidate = _candidatesCommand.GetCandidate(member.Id);

            candidate.Status = status;
            _candidatesCommand.UpdateCandidate(candidate);
            return(member);
        }
Пример #6
0
        public void TestDisplay()
        {
            var member = CreateMember();

            ApplyForJob(_candidatesCommand.GetCandidate(member.Id));

            LogIn(member);
            GetPage <PreviousApplications>();
            AssertPageDoesNotContain("You currently have no job applications.");
        }
Пример #7
0
        public override TemplateEmail GeneratePreview(Community community)
        {
            if (community != null)
            {
                return(null);
            }

            // Create an employer.

            var employer = CreateEmployer();

            // Create a member.

            var member1   = CreateMember();
            var candidate = _candidatesCommand.GetCandidate(member1.Id);

            _candidateResumesCommand.AddTestResume(candidate);

            var member2 = CreateOtherMember();

            candidate = _candidatesCommand.GetCandidate(member2.Id);
            _candidateResumesCommand.AddTestResume(candidate);

            // Send the email.

            var views = _employerMemberViewsQuery.GetEmployerMemberViews(employer, new [] { member1, member2 });

            return(new CandidateResumesEmail(employer, views));
        }
Пример #8
0
        protected Member CreateMember(CandidateStatus status, string desiredJobTitle)
        {
            var member    = _memberAccountsCommand.CreateTestMember(EmailAddress, FirstName, LastName);
            var candidate = _candidatesCommand.GetCandidate(member.Id);

            candidate.Status = status;
            if (!string.IsNullOrEmpty(desiredJobTitle))
            {
                candidate.DesiredJobTitle = desiredJobTitle;
            }
            _candidatesCommand.UpdateCandidate(candidate);
            return(member);
        }
Пример #9
0
        private void CreateMember(int index, string desiredJobTitle, LocationReference location, Salary salary)
        {
            var member = _memberAccountsCommand.CreateTestMember(index);

            member.Address.Location = location;
            _memberAccountsCommand.UpdateMember(member);
            var candidate = _candidatesCommand.GetCandidate(member.Id);

            candidate.DesiredJobTitle = desiredJobTitle;
            candidate.DesiredSalary   = salary;
            _candidatesCommand.UpdateCandidate(candidate);
            _candidateResumesCommand.AddTestResume(candidate);
        }
Пример #10
0
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            AddStyleSheetReference(StyleSheets.Networking);
            AddJavaScriptReference(JavaScripts.VisibilitySettings);

            btnSave.Attributes["onclick"] = "buttonClicked=true; return true;";
            btnSave.Click += btnSave_Click;

            _candidate = _candidatesCommand.GetCandidate(LoggedInMember.Id);
            ucWorkStatusSettings.Display(_candidate);
        }
        private new Member CreateMember(int index)
        {
            var member    = base.CreateMember(index);
            var candidate = _candidatesCommand.GetCandidate(member.Id);

            _candidateResumesCommand.AddTestResume(candidate);

            candidate.DesiredSalary = new Salary {
                LowerBound = 40000, UpperBound = 50000, Rate = SalaryRate.Year, Currency = Currency.AUD
            };
            _candidatesCommand.UpdateCandidate(candidate);

            return(member);
        }
Пример #12
0
        public void TestCompleteResume()
        {
            var candidate = new Candidate {
                Id = Guid.NewGuid()
            };

            _candidatesCommand.CreateCandidate(candidate);

            const string fileName = "resume.doc";
            var          data     = TestResume.Complete.GetData();

            FileReference fileReference;

            using (var stream = new MemoryStream(data))
            {
                fileReference = _filesCommand.SaveFile(FileType.Resume, new StreamFileContents(stream), fileName);
            }

            var resume = _parseResumesCommand.ParseResume(data, fileName).Resume;

            _candidateResumesCommand.CreateResume(candidate, resume, fileReference);

            AssertResume(_candidatesCommand.GetCandidate(candidate.Id), resume, fileReference);
        }
Пример #13
0
        public AjaxResult SaveWorkStatus(string status, string desiredJob)
        {
            try
            {
                EnsureMemberLoggedIn();

                var candidate = _candidatesCommand.GetCandidate(LoggedInMember.Id);
                candidate.Status = string.IsNullOrEmpty(status)
                    ? CandidateStatus.Unspecified
                    : (CandidateStatus)Enum.Parse(typeof(CandidateStatus), status);
                candidate.DesiredJobTitle = desiredJob;
                _candidatesCommand.UpdateCandidate(candidate);

                return(new AjaxResult(AjaxResultCode.SUCCESS));
            }
            catch (Exception ex)
            {
                return(HandleException(ex));
            }
        }
Пример #14
0
        private Member CreateMember(int index, bool withInvalidPostalSuburb)
        {
            var member = _memberAccountsCommand.CreateTestMember(index);

            member.VisibilitySettings.Personal.FirstDegreeVisibility  = PersonalVisibilitySettings.ModerateFirstDegree;
            member.VisibilitySettings.Personal.SecondDegreeVisibility = PersonalVisibilitySettings.ModerateSecondDegree;
            member.VisibilitySettings.Personal.PublicVisibility       = PersonalVisibilitySettings.ModeratePublic;

            member.Address.Location = withInvalidPostalSuburb
                ? _locationQuery.ResolveLocation(_locationQuery.GetCountry("Australia"), "xyz")
                : _locationQuery.ResolveLocation(_locationQuery.GetCountry("Australia"), "Melbourne VIC 3000");

            _memberAccountsCommand.UpdateMember(member);

            var candidate = _candidatesCommand.GetCandidate(member.Id);

            candidate.Status = CandidateStatus.ActivelyLooking;
            _candidatesCommand.UpdateCandidate(candidate);

            return(member);
        }
        private Member CreateMember(bool hasResume)
        {
            var member = CreateMember();

            member.CreatedTime = DateTime.Now.AddDays(-20);
            _memberAccountsCommand.UpdateMember(member);

            var candidate = _candidatesCommand.GetCandidate(member.Id);

            candidate.Status = CandidateStatus.ActivelyLooking;
            _candidatesCommand.UpdateCandidate(candidate);

            if (hasResume)
            {
                _candidateResumesCommand.CreateResume(candidate, new Resume {
                    LastUpdatedTime = DateTime.Now.AddDays(-10)
                });
            }

            return(member);
        }
Пример #16
0
        public void TestJobApplicationEmailLinks()
        {
            // Create a member.

            var member    = _memberAccountsCommand.CreateTestMember(0);
            var candidate = _candidatesCommand.GetCandidate(member.Id);

            // Create an employer.

            var employer       = _employerAccountsCommand.CreateTestEmployer(0, _organisationsCommand.CreateTestOrganisation(0));
            var jobAd          = employer.CreateTestJobAd();
            var jobApplication = new InternalApplication {
                PositionId = jobAd.Id, ApplicantId = candidate.Id, CoverLetterText = CoverLetter
            };

            // Send the email.

            var communication = new JobApplicationEmail(member, jobApplication, jobAd, null, null);

            _emailsCommand.TrySend(communication);

            // Check the email.

            var email = _emailServer.AssertEmailSent();
            var links = email.GetHtmlView().GetLinks();

            Assert.AreEqual(3, links.Count);

            var definition = typeof(JobApplicationEmail).Name;

            AssertLink(definition, EmployerHomeUrl, links[0]);
            AssertLink(definition, GetCandidateUrl(member), links[1]);
            AssertLink(definition, _contactUsUrl, links[2]);

            // Check the tracking pixel.

            var link = email.GetHtmlView().GetImageLinks().Last();

            AssertTrackingLink(link);
        }
Пример #17
0
        private void CreateFriend(Guid memberId, out Member friend, out Candidate candidate, out Resume resume)
        {
            friend    = _memberAccountsCommand.CreateTestMember(1);
            candidate = _candidatesCommand.GetCandidate(friend.Id);

            // Set values.

            candidate.Status = CandidateStatus.OpenToOffers;
            _locationQuery.ResolvePostalSuburb(friend.Address.Location, Australia, Suburb + " " + Postcode + " " + CountrySubdivision);

            friend.PhoneNumbers = new List <PhoneNumber>
            {
                new PhoneNumber {
                    Number = "123123123", Type = PhoneNumberType.Home
                },
                new PhoneNumber {
                    Number = "234234234", Type = PhoneNumberType.Mobile
                },
                new PhoneNumber {
                    Number = "345345345", Type = PhoneNumberType.Work
                },
            };
            friend.Gender = Gender.Male;

            friend.VisibilitySettings.Personal.FirstDegreeVisibility = PersonalVisibility.All;

            // Create a resume.

            _memberAccountsCommand.UpdateMember(friend);
            resume = CreateResume(candidate);

            // Save.

            _memberAccountsCommand.UpdateMember(friend);
            _candidatesCommand.UpdateCandidate(candidate);

            _networkingCommand.CreateFirstDegreeLink(memberId, friend.Id);
        }
Пример #18
0
        protected Member CreateMember()
        {
            var member = CreateMember(0);

            member.Address.Location = _locationQuery.ResolveLocation(_locationQuery.GetCountry(Country), Location);
            _membersCommand.UpdateMember(member);

            // Give them a resume.

            var candidate = _candidatesCommand.GetCandidate(member.Id);
            var resume    = new Resume
            {
                Jobs = new List <Job>
                {
                    new Job {
                        Title = Title
                    }
                }
            };

            _candidateResumesCommand.CreateResume(candidate, resume);
            return(member);
        }
Пример #19
0
        void IDataExchange.UpdateStatus(Guid candidateId, State state)
        {
            #region Log
            const string method = "UpdateStatus";
            EventSource.Raise(Event.Flow, method, Event.Arg("candidateId", candidateId), Event.Arg("state", state));
            #endregion

            try
            {
                var candidate = _candidatesCommand.GetCandidate(candidateId);
                if (candidate != null)
                {
                    candidate.Status = state.ToCandidateStatus();
                    _candidatesCommand.UpdateCandidate(candidate);
                }
            }
            catch (Exception e)
            {
                #region Log
                EventSource.Raise(Event.Error, method, e, null, Event.Arg("candidateId", candidateId), Event.Arg("state", state));
                #endregion
            }
        }
Пример #20
0
        public override TemplateEmail GeneratePreview(Community community)
        {
            if (community != null)
            {
                return(null);
            }

            // Create a member.

            var member    = CreateMember();
            var candidate = _candidatesCommand.GetCandidate(member.Id);

            // Create an employer.

            var employer       = CreateEmployer();
            var jobAd          = employer.CreateTestJobAd();
            var jobApplication = new InternalApplication {
                PositionId = jobAd.Id, ApplicantId = candidate.Id, CoverLetterText = CoverLetter
            };

            // Send the email.

            return(new JobApplicationEmail(member, jobApplication, jobAd, null, null));
        }
Пример #21
0
        protected Member PreLoadTestUserProfiles(bool admin, bool createEmployer, bool link,
                                                 bool inviters, bool fullSetOfNetworkers, bool jobs, bool references, bool resumeRequests)
        {
            #region set up 10 networkers

            Member five = null;
            Member six  = null;

            Member member    = _memberAccountsCommand.CreateTestMember(TestNetworkerUserId, "password", "Homer", "Simpson");
            var    candidate = _candidatesCommand.GetCandidate(member.Id);
            _candidateResumesCommand.AddTestResume(candidate);

            Member two   = _memberAccountsCommand.CreateTestMember(TestUserTwoId, "password", "Two First", "Two Last");
            Member three = _memberAccountsCommand.CreateTestMember(TestUserThreeId, "password", "Three First", "Three Last");

            Member four = _memberAccountsCommand.CreateTestMember(TestUserFourId);

            if (fullSetOfNetworkers)
            {
                five = _memberAccountsCommand.CreateTestMember(TestUserFiveId);
                six  = _memberAccountsCommand.CreateTestMember(TestUserSixId);
                _memberAccountsCommand.CreateTestMember(TestUserSevenId);
                _memberAccountsCommand.CreateTestMember(TestUserEightId);
                _memberAccountsCommand.CreateTestMember(TestUserNineId);
            }

            #endregion
            #region set up an employer and a job ad
            if (createEmployer)
            {
                Employer employer = _employerAccountsCommand.CreateTestEmployer(TestEmployerUserId, _organisationsCommand.CreateTestOrganisation("LinkMe Pty Ltd"));

                _allocationsCommand.CreateAllocation(new Allocation {
                    OwnerId = employer.Id, CreditId = _creditsQuery.GetCredit <ContactCredit>().Id, InitialQuantity = 1000
                });
                _allocationsCommand.CreateAllocation(new Allocation {
                    OwnerId = employer.Id, CreditId = _creditsQuery.GetCredit <JobAdCredit>().Id, InitialQuantity = 1000
                });

                var ja = employer.CreateTestJobAd("test job", "lol test job");
                _jobAdsCommand.PostJobAd(ja);
            }
            #endregion
            #region set up an administrator

            if (admin)
            {
                CreateAdministrator(TestAdministratorUserId);
            }

            #endregion
            #region link up some users

            if (link)
            {
                _networkingCommand.CreateFirstDegreeLink(member.Id, two.Id);
                _networkingCommand.CreateFirstDegreeLink(member.Id, three.Id);
                _networkingCommand.CreateFirstDegreeLink(member.Id, four.Id);
            }

            if (link && fullSetOfNetworkers)
            {
                _networkingCommand.CreateFirstDegreeLink(two.Id, five.Id);
                _networkingCommand.CreateFirstDegreeLink(two.Id, six.Id);
                _networkingCommand.CreateFirstDegreeLink(three.Id, six.Id);
            }

            #endregion
            return(member);
        }
Пример #22
0
        public void TestResultsNoCurrentJob()
        {
            // Create an employer and search.

            var employer = CreateEmployer(0, false);
            var criteria = new MemberSearchCriteria {
                JobTitle = JobTitle
            };
            var search = new MemberSearch {
                OwnerId = employer.Id, Criteria = criteria
            };

            // No current job.

            var member    = CreateMember();
            var candidate = _candidatesCommand.GetCandidate(member.Id);
            var resume    = _candidateResumesCommand.AddTestResume(candidate);

            resume.Jobs = null;
            _candidateResumesCommand.UpdateResume(candidate, resume);
            var results = new MemberSearchResults {
                MemberIds = new [] { member.Id }, TotalMatches = 1
            };

            // Send.

            var email = SendAlertEmail(employer, search, results);

            // Check.

            AssertMail(email, employer, search, results, 0, 0, false);
        }
Пример #23
0
        public AjaxResult SavePrimaryDetails(string firstName, string lastName, string mobilePhone, string workPhone, string homePhone, string[] industryIds, string countryId, string location)
        {
            var errorMessages = new List <string>();

            if (string.IsNullOrEmpty(location))
            {
                errorMessages.Add(ValidationErrorMessages.REQUIRED_FIELD_LOCATION);
            }

            if (string.IsNullOrEmpty(firstName))
            {
                errorMessages.Add(ValidationErrorMessages.REQUIRED_FIELD_FIRST_NAME);
            }
            else if (!FirstNameRegex.IsMatch(firstName))
            {
                errorMessages.Add(ValidationErrorMessages.INVALID_FIRST_NAME);
            }

            if (string.IsNullOrEmpty(lastName))
            {
                errorMessages.Add(ValidationErrorMessages.REQUIRED_FIELD_LAST_NAME);
            }
            else if (!LastNameRegex.IsMatch(lastName))
            {
                errorMessages.Add(ValidationErrorMessages.INVALID_LAST_NAME);
            }

            if (string.IsNullOrEmpty(mobilePhone) && string.IsNullOrEmpty(workPhone) && string.IsNullOrEmpty(homePhone))
            {
                errorMessages.Add(ValidationErrorMessages.REQUIRED_FIELD_CONTACT_PHONE);
            }

            if ((!string.IsNullOrEmpty(mobilePhone) && !PhoneRegex.IsMatch(mobilePhone)) ||
                (!string.IsNullOrEmpty(workPhone) && !PhoneRegex.IsMatch(workPhone)) ||
                (!string.IsNullOrEmpty(homePhone) && !PhoneRegex.IsMatch(homePhone)))
            {
                errorMessages.Add(ValidationErrorMessages.INVALID_PHONE_NUMBER);
            }

            if (errorMessages.Count != 0)
            {
                return(new AjaxResult(AjaxResultCode.FAILURE, ConvertMessagesToString(errorMessages)));
            }

            try
            {
                EnsureMemberLoggedIn();

                var member = LoggedInMember;
                member.FirstName = firstName;
                member.LastName  = lastName;

                member.PhoneNumbers = new List <PhoneNumber>();
                if (!string.IsNullOrEmpty(mobilePhone))
                {
                    member.PhoneNumbers.Add(new PhoneNumber {
                        Number = mobilePhone, Type = PhoneNumberType.Mobile
                    });
                }
                if (!string.IsNullOrEmpty(homePhone))
                {
                    member.PhoneNumbers.Add(new PhoneNumber {
                        Number = homePhone, Type = PhoneNumberType.Home
                    });
                }
                if (!string.IsNullOrEmpty(workPhone))
                {
                    member.PhoneNumbers.Add(new PhoneNumber {
                        Number = workPhone, Type = PhoneNumberType.Work
                    });
                }

                var country = _locationQuery.GetCountry(int.Parse(countryId));
                member.Address.Location = _locationQuery.ResolveLocation(country, location);
                _memberAccountsCommand.UpdateMember(member);

                var candidate = _candidatesCommand.GetCandidate(member.Id);
                candidate.Industries = (from i in industryIds select _industriesQuery.GetIndustry(ParseUtil.ParseUserInputGuid(i, "industry ID"))).ToList();
                _candidatesCommand.UpdateCandidate(candidate);

                return(new AjaxResult(AjaxResultCode.SUCCESS));
            }
            catch (Exception ex)
            {
                return(HandleException(ex));
            }
        }
Пример #24
0
        public void TestEmailProfileDetails()
        {
            var index = 0;

            // Create the inviter.

            var inviter = _memberAccountsCommand.CreateTestMember(0);

            inviter.VisibilitySettings.Personal.FirstDegreeVisibility = PersonalVisibility.All;
            _memberAccountsCommand.UpdateMember(inviter);

            // All access, no properties set.

            index++;
            var invitee = _memberAccountsCommand.CreateTestMember(index);

            var invitation = new FriendInvitation {
                InviterId = inviter.Id, InviteeId = invitee.Id, Text = MessageText, DonationRequestId = null
            };

            _networkingInvitationsCommand.CreateInvitation(invitation);

            var templateEmail = new FriendInvitationEmail(invitee, inviter, invitation, null, GetCurrentJobs(inviter.Id), 0);

            _emailsCommand.TrySend(templateEmail);

            var email = _emailServer.AssertEmailSent();

            email.AssertAddresses(inviter, Return, invitee);
            email.AssertSubject(GetSubject());
            email.AssertHtmlViewChecks();
            AssertHtmlView(email, templateEmail, inviter, invitee, invitation, null);
            email.AssertNoAttachments();
            AssertCompatibleAddresses(email);

            // All access, 1 friend.

            index++;
            var friend = _memberAccountsCommand.CreateTestMember(index);

            _networkingCommand.CreateFirstDegreeLink(inviter.Id, friend.Id);

            index++;
            invitee = _memberAccountsCommand.CreateTestMember(index);

            invitation = new FriendInvitation {
                InviterId = inviter.Id, InviteeId = invitee.Id, Text = MessageText, DonationRequestId = null
            };
            _networkingInvitationsCommand.CreateInvitation(invitation);

            templateEmail = new FriendInvitationEmail(invitee, inviter, invitation, null, GetCurrentJobs(inviter.Id), 1);
            _emailsCommand.TrySend(templateEmail);

            email = _emailServer.AssertEmailSent();
            email.AssertAddresses(inviter, Return, invitee);
            email.AssertSubject(GetSubject());
            email.AssertHtmlViewChecks();
            AssertHtmlView(email, templateEmail, inviter, invitee, invitation, null);
            email.AssertNoAttachments();
            AssertCompatibleAddresses(email);

            // All access, 2 friends.

            index++;
            friend = _memberAccountsCommand.CreateTestMember(index);
            _networkingCommand.CreateFirstDegreeLink(inviter.Id, friend.Id);

            index++;
            invitee = _memberAccountsCommand.CreateTestMember(index);

            invitation = new FriendInvitation {
                InviterId = inviter.Id, InviteeId = invitee.Id, Text = MessageText, DonationRequestId = null
            };
            _networkingInvitationsCommand.CreateInvitation(invitation);

            templateEmail = new FriendInvitationEmail(invitee, inviter, invitation, null, GetCurrentJobs(inviter.Id), 2);
            _emailsCommand.TrySend(templateEmail);

            email = _emailServer.AssertEmailSent();
            email.AssertAddresses(inviter, Return, invitee);
            email.AssertSubject(GetSubject());
            email.AssertHtmlViewChecks();
            AssertHtmlView(email, templateEmail, inviter, invitee, invitation, null);
            email.AssertNoAttachments();
            AssertCompatibleAddresses(email);

            // No access, 2 friends.

            inviter.VisibilitySettings.Personal.FirstDegreeVisibility &= ~PersonalVisibility.FriendsList;
            _memberAccountsCommand.UpdateMember(inviter);

            index++;
            invitee = _memberAccountsCommand.CreateTestMember(index);

            invitation = new FriendInvitation {
                InviterId = inviter.Id, InviteeId = invitee.Id, Text = MessageText, DonationRequestId = null
            };
            _networkingInvitationsCommand.CreateInvitation(invitation);

            templateEmail = new FriendInvitationEmail(invitee, inviter, invitation, null, GetCurrentJobs(inviter.Id), 0);
            _emailsCommand.TrySend(templateEmail);

            email = _emailServer.AssertEmailSent();
            email.AssertAddresses(inviter, Return, invitee);
            email.AssertSubject(GetSubject());
            email.AssertHtmlViewChecks();
            AssertHtmlView(email, templateEmail, inviter, invitee, invitation, null);
            email.AssertNoAttachments();
            AssertCompatibleAddresses(email);

            // All access, current jobs set.

            inviter.VisibilitySettings.Personal.FirstDegreeVisibility |= PersonalVisibility.FriendsList;
            _memberAccountsCommand.UpdateMember(inviter);

            var candidate = _candidatesCommand.GetCandidate(inviter.Id);

            _candidateResumesCommand.AddTestResume(candidate);

            index++;
            invitee = _memberAccountsCommand.CreateTestMember(index);

            invitation = new FriendInvitation {
                InviterId = inviter.Id, InviteeId = invitee.Id, Text = MessageText, DonationRequestId = null
            };
            _networkingInvitationsCommand.CreateInvitation(invitation);

            templateEmail = new FriendInvitationEmail(invitee, inviter, invitation, null, GetCurrentJobs(inviter.Id), 2);
            _emailsCommand.TrySend(templateEmail);

            email = _emailServer.AssertEmailSent();
            email.AssertAddresses(inviter, Return, invitee);
            email.AssertSubject(GetSubject());
            email.AssertHtmlViewChecks();
            AssertHtmlView(email, templateEmail, inviter, invitee, invitation, null);
            email.AssertNoAttachments();
            AssertCompatibleAddresses(email);

            // No access, current jobs set.

            inviter.VisibilitySettings.Personal.FirstDegreeVisibility &= ~PersonalVisibility.CurrentJobs;
            _memberAccountsCommand.UpdateMember(inviter);

            index++;
            invitee = _memberAccountsCommand.CreateTestMember(index);

            invitation = new FriendInvitation {
                InviterId = inviter.Id, InviteeId = invitee.Id, Text = MessageText, DonationRequestId = null
            };
            _networkingInvitationsCommand.CreateInvitation(invitation);

            templateEmail = new FriendInvitationEmail(invitee, inviter, invitation, null, null, 2);
            _emailsCommand.TrySend(templateEmail);

            email = _emailServer.AssertEmailSent();
            email.AssertAddresses(inviter, Return, invitee);
            email.AssertSubject(GetSubject());
            email.AssertHtmlViewChecks();
            AssertHtmlView(email, templateEmail, inviter, invitee, invitation, null);
            email.AssertNoAttachments();
            AssertCompatibleAddresses(email);
        }