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
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
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
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
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
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
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
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)
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)
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
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
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)
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)
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
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
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
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
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
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
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
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)
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
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)
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
def test_update_API_is_closed(): with raises(NoReverseMatch): response_file = factories.ResponseFileFactory() reverse('api:response-file-detail', args=[response_file.id])