コード例 #1
0
def test_send_response_file_list_does_not_contais_files_from_other_questionnaire(
        client):
    response_file_1 = factories.ResponseFileFactory(is_deleted=False)
    questionnaire_1 = response_file_1.question.theme.questionnaire
    questionnaire_1.is_draft = False
    questionnaire_1.save()
    assert not questionnaire_1.is_draft

    # Questionnaire 2 in same control as questionnaire 1
    questionnaire_2 = factories.QuestionnaireFactory(
        control=questionnaire_1.control)
    questionnaire_2.is_draft = False
    questionnaire_2.save()
    assert not questionnaire_2.is_draft
    theme_2 = factories.ThemeFactory(questionnaire=questionnaire_2)
    question_2 = factories.QuestionFactory(theme=theme_2)
    response_file_2 = factories.ResponseFileFactory(is_deleted=False,
                                                    question=question_2)

    user = utils.make_audited_user(questionnaire_1.control)

    files = get_files_for_export(questionnaire_1)

    assert len(files) == 1
    assert files[0].file.name == response_file_1.file.name
コード例 #2
0
def test_send_response_file_list_has_files_in_order_of_question_numbering(
        client):
    question_1 = factories.QuestionFactory()
    question_2 = factories.QuestionFactory(theme=question_1.theme)
    assert question_1.numbering < question_2.numbering

    response_file_3 = factories.ResponseFileFactory(question=question_2,
                                                    is_deleted=False)
    response_file_1 = factories.ResponseFileFactory(question=question_1,
                                                    is_deleted=False)
    response_file_2 = factories.ResponseFileFactory(question=question_1,
                                                    is_deleted=False)
    assert response_file_1.file.name != response_file_2.file.name
    assert response_file_1.file.name != response_file_3.file.name
    assert response_file_2.file.name != response_file_3.file.name

    questionnaire = response_file_1.question.theme.questionnaire
    questionnaire.is_draft = False
    questionnaire.save()
    assert not questionnaire.is_draft

    user = utils.make_audited_user(questionnaire.control)

    files = get_files_for_export(questionnaire)

    assert len(files) == 3
    assert files[0].file.name == response_file_1.file.name
    assert files[1].file.name == response_file_2.file.name
    assert files[2].file.name == response_file_3.file.name
コード例 #3
0
def test_can_get_response_file_if_control_is_associated_with_the_user():
    response_file = factories.ResponseFileFactory()
    user = utils.make_audited_user(response_file.question.theme.questionnaire.control)

    response = get_response_file(user, response_file.id)

    assert response.status_code == 200
コード例 #4
0
def test_cannot_get_response_file_if_control_is_not_associated_with_the_user():
    response_file = factories.ResponseFileFactory()
    control = factories.ControlFactory()
    user = utils.make_audited_user(control)

    response = get_response_file(user, response_file.id)

    assert 400 <= response.status_code <= 499
コード例 #5
0
def test_cannot_trash_response_file_if_control_is_deleted():
    response_file = factories.ResponseFileFactory()
    user = utils.make_audited_user(
        response_file.question.theme.questionnaire.control)
    payload = {"is_deleted": "true"}
    response_file.question.theme.questionnaire.control.delete()
    response = trash_response_file(user, response_file.id, payload)
    assert response.status_code == 404
コード例 #6
0
def test_cannot_untrash_a_file():
    response_file = factories.ResponseFileFactory(is_deleted=True)
    user = utils.make_audited_user(response_file.question.theme.questionnaire.control)
    payload = { "is_deleted": "false" }

    response = trash_response_file(user, response_file.id, payload)

    assert 400 <= response.status_code < 500
    assert ResponseFile.objects.get(id=response_file.id).is_deleted
コード例 #7
0
def test_cannot_trash_response_file_if_control_is_not_associated_with_the_user():
    response_file = factories.ResponseFileFactory()
    control = factories.ControlFactory()
    user = utils.make_audited_user(control)
    payload = { "is_deleted": "true" }

    response = trash_response_file(user, response_file.id, payload)

    assert 400 <= response.status_code <= 499
コード例 #8
0
def test_response_file_listed_in_question_endpoint():
    response_file = factories.ResponseFileFactory()
    question = response_file.question
    user = response_file.author
    user.profile.controls.add(question.theme.questionnaire.control)
    user.profile.save()

    response = get_question(user, question.id)
    assert response_file.basename in str(response.content)
コード例 #9
0
def test_trashing_logs_an_action():
    response_file = factories.ResponseFileFactory()
    user = utils.make_audited_user(response_file.question.theme.questionnaire.control)
    payload = { "is_deleted": "true" }
    assert not Action.objects.filter(verb__contains="trashed response-file").exists()
    trash_response_file(user, response_file.id, payload)
    assert Action.objects.filter(verb__contains="trashed response-file").exists()
    action = Action.objects.filter(verb__contains="trashed response-file").last()
    assert action.actor_object_id == str(user.id)
    assert action.target_object_id == str(response_file.id)
コード例 #10
0
def test_email_is_not_sent_if_sending_flag_is_disabled():
    response_file = factories.ResponseFileFactory()
    inspector = factories.UserProfileFactory(profile_type=UserProfile.INSPECTOR)
    inspector.controls.add(response_file.question.theme.questionnaire.control)
    inspector.send_files_report = False
    inspector.save()
    count_emails_before = len(mail.outbox)
    send_files_report()
    count_emails_after = len(mail.outbox)
    assert count_emails_after == count_emails_before
コード例 #11
0
def test_trashing_keeps_the_same_basename():
    response_file = factories.ResponseFileFactory()
    basename_before = response_file.basename
    user = utils.make_audited_user(response_file.question.theme.questionnaire.control)
    payload = { "is_deleted": "true" }

    trash_response_file(user, response_file.id, payload)

    basename_after = ResponseFile.objects.get(id=response_file.id).basename
    assert basename_after == basename_before
コード例 #12
0
def test_response_file_listed_in_question_endpoint():
    response_file = factories.ResponseFileFactory()
    user = response_file.author
    question = response_file.question
    user.profile.controls.add(
        response_file.question.theme.questionnaire.control)
    user.profile.save()
    utils.login(client, user=response_file.author)
    url = reverse('api:question-detail', args=[question.id])
    response = client.get(url)
    assert response_file.basename in str(response.content)
コード例 #13
0
 def __init__(self, client):
     response_file = factories.ResponseFileFactory()
     self.filename = response_file.basename
     user = response_file.author
     user.profile.controls.add(
         response_file.question.theme.questionnaire.control)
     user.profile.agreed_to_tos = True
     user.profile.save()
     utils.login(client, user=response_file.author)
     url = reverse('send-response-file', args=[response_file.id])
     self.response = client.get(url)
コード例 #14
0
def test_inspector_cannot_trash_response_file():
    response_file = factories.ResponseFileFactory()
    user = utils.make_inspector_user(
        response_file.question.theme.questionnaire.control)
    payload = {"is_deleted": "true"}
    assert not ResponseFile.objects.get(id=response_file.id).is_deleted

    response = trash_response_file(user, response_file.id, payload)

    assert response.status_code == 403
    assert not ResponseFile.objects.get(id=response_file.id).is_deleted
コード例 #15
0
def test_audited_cannot_trash_response_file_if_already_deleted():
    response_file = factories.ResponseFileFactory(is_deleted=True)
    user = utils.make_audited_user(
        response_file.question.theme.questionnaire.control)
    payload = {"is_deleted": "true"}
    assert ResponseFile.objects.get(id=response_file.id).is_deleted

    response = trash_response_file(user, response_file.id, payload)

    assert response.status_code == 400
    assert ResponseFile.objects.get(id=response_file.id).is_deleted
コード例 #16
0
def test_send_response_file_list_does_not_contain_deleted_file(client):
    response_file = factories.ResponseFileFactory(is_deleted=True)
    questionnaire = response_file.question.theme.questionnaire
    questionnaire.is_draft = False
    questionnaire.save()
    assert not questionnaire.is_draft
    user = utils.make_audited_user(questionnaire.control)

    files = get_files_for_export(questionnaire)

    assert len(files) == 0
コード例 #17
0
def test_download_response_file_fails_if_the_control_is_not_associated_with_the_user(
        client):
    response_file = factories.ResponseFileFactory()
    user = response_file.author
    unauthorized_control = factories.ControlFactory()
    assert unauthorized_control != response_file.question.theme.questionnaire.control
    user.profile.controls.add(unauthorized_control)
    user.profile.save()
    utils.login(client, user=response_file.author)
    url = reverse('send-response-file', args=[response_file.id])
    response = client.get(url)
    assert response.status_code != 200
コード例 #18
0
def test_can_trash_response_file_if_control_is_associated_with_the_user():
    response_file = factories.ResponseFileFactory()
    user = utils.make_audited_user(response_file.question.theme.questionnaire.control)
    payload = { "is_deleted": "true" }
    count_before = ResponseFile.objects.count()
    assert not ResponseFile.objects.get(id=response_file.id).is_deleted

    response = trash_response_file(user, response_file.id, payload)

    assert response.status_code == 200
    count_after = ResponseFile.objects.count()
    assert count_before == count_after
    assert ResponseFile.objects.get(id=response_file.id).is_deleted
コード例 #19
0
def test_send_response_file_list_has_files_in_order_of_creation_date(client):
    response_file_1 = factories.ResponseFileFactory(is_deleted=False)
    question = response_file_1.question
    response_file_2 = factories.ResponseFileFactory(question=question,
                                                    is_deleted=False)
    assert response_file_1.question == response_file_2.question
    assert response_file_1.file.name != response_file_2.file.name
    assert response_file_1.created < response_file_2.created

    questionnaire = response_file_1.question.theme.questionnaire
    questionnaire.is_draft = False
    questionnaire.save()
    assert not questionnaire.is_draft

    user = utils.make_audited_user(questionnaire.control)

    files = get_files_for_export(questionnaire)

    assert len(files) == 2
    assert files[0].file.name == response_file_1.file.name
    assert files[1].file.name == response_file_2.file.name
    assert files[0].created < files[1].created
コード例 #20
0
def test_trashing_moves_the_file_on_disk():
    response_file = factories.ResponseFileFactory()
    user = utils.make_audited_user(response_file.question.theme.questionnaire.control)
    payload = { "is_deleted": "true" }

    path_before = response_file.file.path
    assert 'CORBEILLE' not in path_before

    trash_response_file(user, response_file.id, payload)

    path_after = ResponseFile.objects.get(id=response_file.id).file.path
    assert path_after != path_before
    assert 'CORBEILLE' in path_after
コード例 #21
0
def test_trashing_logs_an_action():
    response_file = factories.ResponseFileFactory()
    user = utils.make_audited_user(
        response_file.question.theme.questionnaire.control)
    payload = {"is_deleted": "true"}
    action_count_before = Action.objects.count()

    trash_response_file(user, response_file.id, payload)

    action_count_after = Action.objects.count()
    assert action_count_after == action_count_before + 1

    action = Action.objects.last()
    assert action.actor_object_id == str(user.id)
    assert action.verb == 'trashed response-file'
    assert action.target_object_id == str(response_file.id)
コード例 #22
0
def test_cannot_trash_response_file_if_user_not_logged_in():
    response_file = factories.ResponseFileFactory()
    url = reverse('response-file-trash', args=[response_file.id])
    response = client.get(url)
    assert response.status_code == 403
コード例 #23
0
def test_response_file_api_is_readonly_for_inspector():
    response_file = factories.ResponseFileFactory()
    user = utils.make_inspector_user(response_file.question.theme.questionnaire.control)
    run_test_response_file_api_is_readonly(user, response_file)
コード例 #24
0
def test_cannot_get_response_file_if_user_not_logged_in():
    response_file = factories.ResponseFileFactory()
    response = utils.get_resource_without_login(client, 'response-file', response_file.id)
    assert response.status_code == 403
コード例 #25
0
def test_update_API_is_closed():
    with raises(NoReverseMatch):
        response_file = factories.ResponseFileFactory()
        reverse('api:response-file-detail', args=[response_file.id])