Ejemplo n.º 1
0
def test_progress_for_user(settings, use_display_sets):  # noqa: C901
    settings.task_eager_propagates = (True, )
    settings.task_always_eager = (True, )

    rs = ReaderStudyFactory(use_display_sets=use_display_sets)
    im1, im2 = ImageFactory(name="im1"), ImageFactory(name="im2")
    q1, q2, q3 = [
        QuestionFactory(reader_study=rs),
        QuestionFactory(reader_study=rs),
        QuestionFactory(reader_study=rs),
    ]

    reader = UserFactory()
    rs.add_reader(reader)

    question_perc = 100 / 6

    assert rs.get_progress_for_user(reader) == {
        "diff": 0.0,
        "hangings": 0.0,
        "questions": 0.0,
    }

    if use_display_sets:
        ci = ComponentInterface.objects.get(slug="generic-medical-image")
        civ1 = ComponentInterfaceValueFactory(image=im1, interface=ci)
        civ2 = ComponentInterfaceValueFactory(image=im2, interface=ci)
        ds1, ds2 = DisplaySetFactory(reader_study=rs), DisplaySetFactory(
            reader_study=rs)
        ds1.values.add(civ1)
        ds2.values.add(civ2)

    else:
        rs.images.set([im1, im2])
        rs.hanging_list = [{"main": im1.name}, {"main": im2.name}]
        rs.save()

    progress = rs.get_progress_for_user(reader)
    assert progress["hangings"] == 0
    assert progress["questions"] == 0

    a11 = AnswerFactory(question=q1, answer="foo", creator=reader)
    if use_display_sets:
        a11.display_set = ds1
        a11.save()
    else:
        a11.images.add(im1)

    progress = rs.get_progress_for_user(reader)
    assert progress["hangings"] == 0
    assert progress["questions"] == pytest.approx(question_perc)

    a21 = AnswerFactory(question=q1, answer="foo", creator=reader)
    if use_display_sets:
        a21.display_set = ds2
        a21.save()
    else:
        a21.images.add(im2)

    progress = rs.get_progress_for_user(reader)
    assert progress["hangings"] == 0
    assert progress["questions"] == pytest.approx(question_perc * 2)

    a12 = AnswerFactory(question=q2, answer="foo", creator=reader)
    a13 = AnswerFactory(question=q3, answer="foo", creator=reader)
    if use_display_sets:
        a12.display_set = ds1
        a12.save()
        a13.display_set = ds1
        a13.save()
    else:
        a12.images.add(im1)
        a13.images.add(im1)

    progress = rs.get_progress_for_user(reader)
    assert progress["hangings"] == 50
    assert progress["questions"] == pytest.approx(question_perc * 4)

    editor = UserFactory()
    rs.add_reader(editor)
    rs.add_editor(editor)

    for q in [q1, q2, q3]:
        if use_display_sets:
            for ds in [ds1, ds2]:
                a = AnswerFactory(
                    question=q,
                    answer="foo",
                    creator=editor,
                    is_ground_truth=True,
                    display_set=ds,
                )
        else:
            for im in [im1, im2]:
                a = AnswerFactory(
                    question=q,
                    answer="foo",
                    creator=editor,
                    is_ground_truth=True,
                )
                a.images.add(im)

    progress = rs.get_progress_for_user(editor)
    assert progress["hangings"] == 0
    assert progress["questions"] == 0

    for q in [q1, q2, q3]:
        if use_display_sets:
            for ds in [ds1, ds2]:
                a = AnswerFactory(
                    question=q,
                    answer="foo",
                    creator=editor,
                    is_ground_truth=False,
                    display_set=ds,
                )
        else:
            for im in [im1, im2]:
                a = AnswerFactory(
                    question=q,
                    answer="foo",
                    creator=editor,
                    is_ground_truth=False,
                )
                a.images.add(im)

    progress = rs.get_progress_for_user(editor)
    assert progress["hangings"] == 100.0
    assert progress["questions"] == 100.0
Ejemplo n.º 2
0
def test_progress_for_user(settings):
    settings.task_eager_propagates = (True, )
    settings.task_always_eager = (True, )

    rs = ReaderStudyFactory()
    im1, im2 = ImageFactory(name="im1"), ImageFactory(name="im2")
    q1, q2, q3 = [
        QuestionFactory(reader_study=rs),
        QuestionFactory(reader_study=rs),
        QuestionFactory(reader_study=rs),
    ]

    reader = UserFactory()
    rs.add_reader(reader)

    question_perc = 100 / 6

    assert rs.get_progress_for_user(reader) == {
        "diff": 0.0,
        "hangings": 0.0,
        "questions": 0.0,
    }

    rs.images.set([im1, im2])
    rs.hanging_list = [{"main": im1.name}, {"main": im2.name}]
    rs.save()

    progress = rs.get_progress_for_user(reader)
    assert progress["hangings"] == 0
    assert progress["questions"] == 0

    a11 = AnswerFactory(question=q1, answer="foo", creator=reader)
    a11.images.add(im1)

    progress = rs.get_progress_for_user(reader)
    assert progress["hangings"] == 0
    assert progress["questions"] == pytest.approx(question_perc)

    a21 = AnswerFactory(question=q1, answer="foo", creator=reader)
    a21.images.add(im2)

    progress = rs.get_progress_for_user(reader)
    assert progress["hangings"] == 0
    assert progress["questions"] == pytest.approx(question_perc * 2)

    a12 = AnswerFactory(question=q2, answer="foo", creator=reader)
    a12.images.add(im1)
    a13 = AnswerFactory(question=q3, answer="foo", creator=reader)
    a13.images.add(im1)

    progress = rs.get_progress_for_user(reader)
    assert progress["hangings"] == 50
    assert progress["questions"] == pytest.approx(question_perc * 4)

    editor = UserFactory()
    rs.add_reader(editor)
    rs.add_editor(editor)

    for q in [q1, q2, q3]:
        for im in [im1, im2]:
            a = AnswerFactory(question=q,
                              answer="foo",
                              creator=editor,
                              is_ground_truth=True)
            a.images.add(im)

    progress = rs.get_progress_for_user(editor)
    assert progress["hangings"] == 0
    assert progress["questions"] == 0

    for q in [q1, q2, q3]:
        for im in [im1, im2]:
            a = AnswerFactory(question=q,
                              answer="foo",
                              creator=editor,
                              is_ground_truth=False)
            a.images.add(im)

    progress = rs.get_progress_for_user(editor)
    assert progress["hangings"] == 100.0
    assert progress["questions"] == 100.0