def test_sme_resume_chooser():
    create_dummy_job(job_id=1)

    # create new SME
    sme = SME(guid='whatever', job_id=1)
    sme.save()

    # fetch resume to show this SME
    resume = choose_random_unreviewed_resume_for_sme(sme)

    # since we did not create any resumes in the mock database,
    #       resume should be None
    assert resume is None

    # now, create a profile for a job that is not the SME's job
    create_dummy_job(job_id=2)
    create_dummy_profile(1, job_id=2)
    create_dummy_resume(1, profile_id=1)

    # there is still no resume for the SME
    resume = choose_random_unreviewed_resume_for_sme(sme)
    assert resume is None

    # now, create a profile for the sme's job
    create_dummy_profile(2, job_id=1)
    create_dummy_resume(2, profile_id=2)

    # try again to fetch a resume
    resume = choose_random_unreviewed_resume_for_sme(sme)

    # this time, we should have a non-null value, since there is a profile that
    #      matches the SME's job_id
    assert resume is not None
    assert resume.id == 2
    assert resume.profile_id == 2
def test_sme_is_not_shown_same_resume_twice():
    create_dummy_job(1)
    sme = SME(guid='whatever', job_id=1)
    sme.save()

    create_dummy_profile(1, job_id=1)
    create_dummy_profile(2, job_id=1)

    create_dummy_resume(5, profile_id=1)
    create_dummy_resume(6, profile_id=2)

    # ensure that the random choice eventually gives us all the resumes
    ids_seen = set()
    for i in range(100):
        resume = choose_random_unreviewed_resume_for_sme(sme)
        assert resume is not None
        ids_seen.add(resume.id)
    assert ids_seen == {5, 6}

    # simulate the SME reviewing resume #5
    SMEFeedback(sme=sme, profile_resume_id=5, should_interview=True).save()

    for i in range(100):
        resume = choose_random_unreviewed_resume_for_sme(sme)
        assert resume is not None
        assert resume.id == 5 or resume.id == 6
def test_limits_on_reviews_per_resume_per_sme():
    job = Job(id=1)
    job.save()
    sme = SME(job=job)
    sme.save()
    profile = Profile(job=job)
    profile.save()
    resume = ProfileResume(profile=profile)
    resume.save()

    assert choose_random_unreviewed_resume_for_sme(sme).id == resume.id

    SMEFeedback(sme=sme, profile_resume=resume, should_interview=True).save()

    SMEFeedback(sme=sme, profile_resume=resume, should_interview=True).save()

    SMEFeedback(sme=sme, profile_resume=resume, should_interview=True).save()

    new_resume = ProfileResume(profile=profile)
    new_resume.save()

    SMEFeedback(sme=sme, profile_resume=new_resume,
                should_interview=False).save()

    SMEFeedback(sme=sme, profile_resume=new_resume,
                should_interview=False).save()

    assert choose_random_unreviewed_resume_for_sme(sme) is None
def test_sme_review_limit():
    create_dummy_job(1)
    limited_sme = SME(guid="first", job_id=1, review_limit=5)
    unlimited_sme = SME(guid="second", job_id=1, review_limit=None)
    limited_sme.save()
    unlimited_sme.save()

    for i in range(5):
        assert has_sme_reached_their_review_limit(limited_sme) is False
        assert has_sme_reached_their_review_limit(unlimited_sme) is False

        # Add a new resume, and pretend that each SME reviews it.

        new_profile_id = new_resume_id = i + 1
        create_dummy_profile(new_profile_id, job_id=1)
        create_dummy_resume(new_resume_id, profile_id=new_profile_id)

        for sme in (limited_sme, unlimited_sme):
            SMEFeedback(sme=sme,
                        profile_resume_id=new_resume_id,
                        should_interview=False).save()

    # At this point, each SME has reviewed 5 resumes.
    assert has_sme_reached_their_review_limit(limited_sme) is True
    assert has_sme_reached_their_review_limit(unlimited_sme) is False
Exemple #5
0
def test_loading_sme_feedback_page():
    job = Job()
    job.save()
    sme = SME(guid="first", job=job)
    sme.save()
    client = Client()
    url = "/sme_feedback/"

    # load SME page with no token
    page = client.get(url)
    assert "error:" in contents_of_page(page).lower()

    # load SME page with bad token
    page = client.get(url + "?token=bad")
    assert "error:" in contents_of_page(page).lower()

    # load SME page with correct token
    page = client.get(url + "?token=first")
    assert "error:" not in contents_of_page(page).lower()

    # there are no resumes yet, so the page should say "try again later"
    assert "try again later" in contents_of_page(page).lower()

    # let's add a resume and check that that message is gone
    profile = Profile(job=job)
    profile.save()
    ProfileResume(profile=profile).save()
    page = client.get(url + "?token=first")
    assert "try again later" not in contents_of_page(page).lower()
    assert "see description" in contents_of_page(page).lower()
def test_resume_regions():
    add_cities()

    PA, NJ, CA = [
        LookupState.objects.get(state_code=state_code)
        for state_code in ["PA", "NJ", "CA"]
    ]

    pa_region = LookupRegion(city="Philadelphia", state=PA)
    pa_region.save()
    ca_region = LookupRegion(city="San Francisco", state=CA)
    ca_region.save()

    job = Job()
    job.save()

    create_resumes_for_location(job, 3, "Philadelphia", PA)
    create_resumes_for_location(job, 5, "Haddonfield", NJ)
    create_resumes_for_location(job, 6, "San Francisco", CA)

    all_resumes = ProfileResume.objects.filter(profile__job=job)

    assert filter_resumes_by_region(all_resumes, None).count() == 14
    assert filter_resumes_by_region(all_resumes, pa_region).count() == 8
    assert filter_resumes_by_region(all_resumes, ca_region).count() == 6

    pa_sme = SME(job=job, region=pa_region, guid="pa")
    pa_sme.save()
    ca_sme = SME(job=job, region=ca_region, guid="ca")
    ca_sme.save()

    for _ in range(20):
        resume = choose_random_unreviewed_resume_for_sme(pa_sme)
        assert resume.profile.state.state_code in ("PA", "NJ")

        resume = choose_random_unreviewed_resume_for_sme(ca_sme)
        assert resume.profile.state.state_code == "CA"

    # test region radius
    assert filter_resumes_by_region(all_resumes, pa_region).count() == 8
    pa_region.radius = 100
    pa_region.save()
    assert filter_resumes_by_region(all_resumes, pa_region).count() == 8
    pa_region.radius = 5
    pa_region.save()
    assert filter_resumes_by_region(all_resumes, pa_region).count() == 3
def test_sme_post():
    job = Job(id=1)
    job.save()

    sme = SME(id=4, guid="four", job=job)
    sme.save()

    Profile(id=2, job_id=1).save()
    ProfileResume(id=4, profile_id=2).save()

    url = reverse("resumes:sme_feedback")
    client = Client()

    params = {
        "token": "four",
        "comment": "comment",
        "should_interview": "1",
        "resume_id": 4,
        "feedback_guid": "1234",
        "bscore_value": "501",
    }

    assert SMEFeedback.objects.count() == 0
    client.post(url, params)
    assert SMEFeedback.objects.count() == 1
    client.post(url, params)
    assert SMEFeedback.objects.count() == 1

    feedback = SMEFeedback.objects.first()
    assert feedback.bscore_value == 501
    assert feedback.comment == "comment"
    assert feedback.wrong_language is False

    params['feedback_guid'] = "5678"
    params['column_wrong_language'] = True
    client.post(url, params)
    assert SMEFeedback.objects.count() == 2
    assert SMEFeedback.objects.filter(wrong_language=True).count() == 1

    params['feedback_guid'] = "9abc"
    params['token'] = "wrong"
    with pytest.raises(Exception):
        client.post(url, params)
    assert SMEFeedback.objects.count() == 2
def test_choosing_resume_with_bias_toward_already_reviewed():
    create_dummy_job(1)
    sme1 = SME(guid="first", job_id=1)
    sme1.save()
    sme2 = SME(guid="second", job_id=1)
    sme2.save()

    create_dummy_profile(1, job_id=1)
    create_dummy_profile(2, job_id=1)
    create_dummy_resume(6, profile_id=1)
    create_dummy_resume(8, profile_id=2)

    # Pretend that sme1 reviews resume #8.
    SMEFeedback(sme=sme1, profile_resume_id=8, should_interview=False).save()

    assert all_resumes_to_show_to_sme(sme1) == {6}
    assert all_resumes_to_show_to_sme(sme2) == {6, 8}

    # Let us now choose a resume for SME2, but with the probability of choosing
    #     an already-reviewed resume set to 1.  Each choice should give us
    #     resume #8, since that is the only resume that has a review.
    for i in range(20):
        choice = choose_random_unreviewed_resume_for_sme(sme2, 1.0)
        assert choice and choice.id == 8
def test_resume_choices_with_two_smes():
    create_dummy_job(1)
    sme1 = SME(guid="first", job_id=1)
    sme1.save()

    sme2 = SME(guid="second", job_id=1)
    sme2.save()

    create_dummy_profile(1, job_id=1)
    create_dummy_profile(2, job_id=1)

    create_dummy_resume(7, profile_id=1)
    create_dummy_resume(9, profile_id=2)

    assert all_resumes_to_show_to_sme(sme1) == {7, 9}
    assert all_resumes_to_show_to_sme(sme2) == {7, 9}

    # now let's suppose sme1 reviews resume #9
    SMEFeedback(sme=sme1, profile_resume_id=9, should_interview=False).save()

    assert all_resumes_to_show_to_sme(sme1) == {7}
    assert all_resumes_to_show_to_sme(sme2) == {7, 9}

    # Now let's suppose that sme2 marks resume #7 as wrong_job...
    # neither sme should see resume #7 from now on.
    SMEFeedback(sme=sme2,
                profile_resume_id=7,
                should_interview=False,
                wrong_job=True).save()
    assert all_resumes_to_show_to_sme(sme1) == set()
    assert all_resumes_to_show_to_sme(sme2) == {9}

    # Now suppose that resume #9 is marked as wrong_language.
    SMEFeedback(sme=sme2,
                profile_resume_id=9,
                should_interview=False,
                wrong_language=True).save()

    # At this point, both resumes were disqualified.
    # A new SME should not see any resumes, nor should any of the others.
    sme3 = SME(guid="third", job_id=1)
    sme3.save()
    assert all_resumes_to_show_to_sme(sme1) == set()
    assert all_resumes_to_show_to_sme(sme2) == set()
    assert all_resumes_to_show_to_sme(sme3) == set()
def test_rereview_probability_for_job():
    job = Job(id=1)
    job.save()
    assert rereview_probability_for_job(job) == 0.01

    guids = list(str(n) for n in range(5000))

    for _ in range(600):
        resume = create_resume_for_job(job)
        resume.save()

        sme = SME(job=job, guid=guids.pop(0))
        sme.save()

        SMEFeedback(sme=sme, profile_resume=resume,
                    should_interview=False).save()

    assert rereview_probability_for_job(job) == 0.60

    # review each resume three more times

    for resume in ProfileResume.objects.all():
        for _ in range(3):
            sme = SME(job=job, guid=guids.pop(0))
            sme.save()

            SMEFeedback(sme=sme, profile_resume=resume,
                        should_interview=False).save()

    assert rereview_probability_for_job(job) == 0.01

    # bring number of reviewed resumes up to 1400

    for _ in range(800):
        resume = create_resume_for_job(job)
        resume.save()

        sme = SME(job=job, guid=guids.pop(0))
        sme.save()

        SMEFeedback(sme=sme, profile_resume=resume,
                    should_interview=False).save()

    assert rereview_probability_for_job(job) == 0.5