diff --git a/conftest.py b/conftest.py index 5dbd3652e6..694c6ec516 100644 --- a/conftest.py +++ b/conftest.py @@ -54,3 +54,20 @@ def files(settings, tmp_path): def json_data(): json_file = Path(settings.BASE_DIR) / 'import' / 'catalogs.json' return {'elements': json.loads(json_file.read_text())} + + +@pytest.fixture +def mocked_convert_text(mocker): + """Mock the pypandoc.convert_text function. + + `mocked_convert_text` can be used in tests of the export views. + Use it to assert pypandoc would have been called with: + mocked_convert_text.assert_called(), mocked_convert_text.assert_called_once() or + mocked_convert_text.assert_called_once_with(). + + See: + - + - + """ + from rdmo.core.utils import pypandoc # noqa: F401 + return mocker.patch("pypandoc.convert_text") diff --git a/rdmo/conditions/tests/test_viewset_condition.py b/rdmo/conditions/tests/test_viewset_condition.py index efae4659ca..8b676b343f 100644 --- a/rdmo/conditions/tests/test_viewset_condition.py +++ b/rdmo/conditions/tests/test_viewset_condition.py @@ -1,5 +1,3 @@ -import xml.etree.ElementTree as et - import pytest from django.urls import reverse @@ -64,19 +62,13 @@ def test_index(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_export(db, client, username, password, export_format): +def test_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) url = reverse(urlnames['export']) + export_format + '/' response = client.get(url) assert response.status_code == status_map['list'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['condition'] - def test_export_search(db, client): client.login(username='editor', password='editor') @@ -285,16 +277,10 @@ def test_delete(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_detail_export(db, client, username, password, export_format): +def test_detail_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) instance = Condition.objects.first() url = reverse(urlnames['detail_export'], args=[instance.pk]) + export_format + '/' response = client.get(url) assert response.status_code == status_map['detail'][username], response.content - - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['condition'] diff --git a/rdmo/conditions/tests/test_viewset_condition_multisite.py b/rdmo/conditions/tests/test_viewset_condition_multisite.py index 6d1f0da587..fbff44a0d2 100644 --- a/rdmo/conditions/tests/test_viewset_condition_multisite.py +++ b/rdmo/conditions/tests/test_viewset_condition_multisite.py @@ -1,5 +1,3 @@ -import xml.etree.ElementTree as et - import pytest from django.urls import reverse @@ -32,19 +30,13 @@ def test_index(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_export(db, client, username, password, export_format): +def test_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) url = reverse(urlnames['export']) + export_format + '/' response = client.get(url) assert response.status_code == status_map['list'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['condition'] - @pytest.mark.parametrize('username,password', users) def test_detail(db, client, username, password): @@ -245,16 +237,10 @@ def test_delete(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_detail_export(db, client, username, password, export_format): +def test_detail_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) instance = Condition.objects.first() url = reverse(urlnames['detail_export'], args=[instance.pk]) + export_format + '/' response = client.get(url) assert response.status_code == status_map['detail'][username], response.content - - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['condition'] diff --git a/rdmo/core/tests/test_utils.py b/rdmo/core/tests/test_utils.py index 05fed48bbb..a30e8785f2 100644 --- a/rdmo/core/tests/test_utils.py +++ b/rdmo/core/tests/test_utils.py @@ -1,8 +1,12 @@ +from http import HTTPStatus from typing import Optional import pytest -from rdmo.core.utils import human2bytes, join_url, sanitize_url +from rdmo.core.utils import human2bytes, join_url, render_to_format, sanitize_url +from rdmo.projects.models import Project +from rdmo.projects.utils import get_value_path +from rdmo.views.utils import ProjectWrapper urls = ( ('', ''), @@ -23,6 +27,8 @@ ("0", 0), ) +export_formats = ("invalid", "rtf", "odt", "docx", "html", "markdown", "tex", "pdf") + @pytest.mark.parametrize('url,sanitized_url', urls) def test_sanitize_url(url, sanitized_url): @@ -36,3 +42,49 @@ def test_join_url(): @pytest.mark.parametrize('human,bytes', human2bytes_test_values) def test_human2bytes(human: Optional[str], bytes: float): assert human2bytes(human) == bytes + + +@pytest.fixture(scope="module") +def context(django_db_blocker): + """A fixture of a view context, to be used when testing 'render_to_format'. + + Note: The fixture queries the database only once for the parametrized tests. + """ + with django_db_blocker.unblock(): + project = Project.objects.get(id=1) + project.catalog.prefetch_elements() + return { + "format": None, # will be defined in the test function + "project": project, + "project_wrapper": ProjectWrapper(project), + "title": project.title, + "resource_path": get_value_path(project) + } + + +@pytest.mark.django_db() +@pytest.mark.parametrize("export_format", export_formats) +def test_render_to_format(rf, context, export_format): + """A test of the 'render_to_format' view with multiple export formats.""" + context["format"] = export_format + title = context["project"].title + + request = rf.get("/projects/project_answers_export") + response = render_to_format( + request, + export_format, + title, + "projects/project_answers_export.html", + context, + ) + + # an invalid export format should return an error message + if export_format == "invalid": + assert response.status_code == HTTPStatus.BAD_REQUEST + assert "This format is not supported." in str(response.content) + return + # check for the requested export format in the headers + assert response.status_code == HTTPStatus.OK + assert export_format in response.headers["Content-Type"] + expected = f'filename="{title}.{export_format}"' + assert expected in response.headers["Content-Disposition"] diff --git a/rdmo/domain/tests/test_viewset_attribute.py b/rdmo/domain/tests/test_viewset_attribute.py index 00c7c71310..7736dd6d16 100644 --- a/rdmo/domain/tests/test_viewset_attribute.py +++ b/rdmo/domain/tests/test_viewset_attribute.py @@ -1,5 +1,3 @@ -import xml.etree.ElementTree as et - import pytest from django.urls import reverse @@ -54,19 +52,13 @@ def test_list(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_export(db, client, username, password, export_format): +def test_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) url = reverse(urlnames['export']) + export_format + '/' response = client.get(url) assert response.status_code == status_map['list'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['attribute'] - def test_export_search(db, client): client.login(username='editor', password='editor') @@ -241,16 +233,10 @@ def test_delete(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_detail_export(db, client, username, password, export_format): +def test_detail_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) instance = Attribute.objects.first() url = reverse(urlnames['detail_export'], args=[instance.pk]) + export_format + '/' response = client.get(url) assert response.status_code == status_map['detail'][username], response.content - - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['attribute'] diff --git a/rdmo/options/tests/test_viewset_options.py b/rdmo/options/tests/test_viewset_options.py index 33efa6f20e..95fb145d27 100644 --- a/rdmo/options/tests/test_viewset_options.py +++ b/rdmo/options/tests/test_viewset_options.py @@ -1,5 +1,3 @@ -import xml.etree.ElementTree as et - import pytest from django.db.models import Max @@ -65,19 +63,13 @@ def test_index(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_export(db, client, username, password, export_format): +def test_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) url = reverse(urlnames['export']) + export_format + '/' response = client.get(url) assert response.status_code == status_map['list'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['option'] - def test_export_search(db, client): client.login(username='editor', password='editor') @@ -182,16 +174,10 @@ def test_delete(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_detail_export(db, client, username, password, export_format): +def test_detail_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) instance = Option.objects.first() url = reverse(urlnames['detail_export'], args=[instance.pk]) + export_format + '/' response = client.get(url) assert response.status_code == status_map['detail'][username], response.content - - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['option'] diff --git a/rdmo/options/tests/test_viewset_optionsets.py b/rdmo/options/tests/test_viewset_optionsets.py index 83373b03b5..559bf505ad 100644 --- a/rdmo/options/tests/test_viewset_optionsets.py +++ b/rdmo/options/tests/test_viewset_optionsets.py @@ -1,5 +1,3 @@ -import xml.etree.ElementTree as et - import pytest from django.urls import reverse @@ -65,19 +63,13 @@ def test_index(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_export(db, client, username, password, export_format): +def test_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) url = reverse(urlnames['export']) + export_format + '/' response = client.get(url) assert response.status_code == status_map['list'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['optionset', 'option'] - def test_export_search(db, client): client.login(username='editor', password='editor') @@ -289,16 +281,10 @@ def test_delete(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_detail_export(db, client, username, password, export_format): +def test_detail_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) instance = OptionSet.objects.first() url = reverse(urlnames['detail_export'], args=[instance.pk]) + export_format + '/' response = client.get(url) assert response.status_code == status_map['detail'][username], response.content - - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['optionset', 'option'] diff --git a/rdmo/projects/tests/test_view_project.py b/rdmo/projects/tests/test_view_project.py index b43660cf14..cda2f8623d 100644 --- a/rdmo/projects/tests/test_view_project.py +++ b/rdmo/projects/tests/test_view_project.py @@ -690,7 +690,7 @@ def test_project_answers(db, client, username, password, project_id): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('project_id', projects) @pytest.mark.parametrize('export_format', export_formats) -def test_project_answers_export(db, client, username, password, project_id, export_format): +def test_project_answers_export(db, client, username, password, project_id, export_format, mocked_convert_text): client.login(username=username, password=password) url = reverse('project_answers_export', args=[project_id, export_format]) @@ -730,7 +730,7 @@ def test_project_view(db, client, username, password, project_id): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('project_id', projects) @pytest.mark.parametrize('export_format', export_formats) -def test_project_view_export(db, client, username, password, project_id, export_format, files): +def test_project_view_export(db, client, username, password, project_id, export_format, files, mocked_convert_text): client.login(username=username, password=password) project_views = Project.objects.get(pk=project_id).views.all() diff --git a/rdmo/questions/tests/test_viewset_catalog.py b/rdmo/questions/tests/test_viewset_catalog.py index e1a4e2cbb7..e7f75929c6 100644 --- a/rdmo/questions/tests/test_viewset_catalog.py +++ b/rdmo/questions/tests/test_viewset_catalog.py @@ -68,19 +68,13 @@ def test_index(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_export(db, client, username, password, export_format): +def test_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) url = reverse(urlnames['export']) + export_format + '/' response = client.get(url) assert response.status_code == status_map['list'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['catalog', 'section', 'page', 'questionset', 'question'] - def test_export_search(db, client): client.login(username='editor', password='editor') @@ -238,7 +232,7 @@ def test_delete(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_detail_export(db, client, username, password, export_format): +def test_detail_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) instance = Catalog.objects.first() @@ -246,12 +240,6 @@ def test_detail_export(db, client, username, password, export_format): response = client.get(url) assert response.status_code == status_map['detail'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['catalog', 'section', 'page', 'questionset', 'question'] - def test_detail_export_full(db, client): client.login(username='editor', password='editor') diff --git a/rdmo/questions/tests/test_viewset_catalog_multisite.py b/rdmo/questions/tests/test_viewset_catalog_multisite.py index 5373671495..c93c2d2ad6 100644 --- a/rdmo/questions/tests/test_viewset_catalog_multisite.py +++ b/rdmo/questions/tests/test_viewset_catalog_multisite.py @@ -1,5 +1,3 @@ -import xml.etree.ElementTree as et - import pytest from django.contrib.sites.models import Site @@ -35,19 +33,13 @@ def test_index(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_export(db, client, username, password, export_format): +def test_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) url = reverse(urlnames['export']) + export_format + '/' response = client.get(url) assert response.status_code == status_map['list'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['catalog', 'section', 'page', 'questionset', 'question'] - @pytest.mark.parametrize('username,password', users) def test_detail(db, client, username, password): @@ -197,7 +189,7 @@ def test_delete(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_detail_export(db, client, username, password, export_format): +def test_detail_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) instance = Catalog.objects.first() @@ -205,12 +197,6 @@ def test_detail_export(db, client, username, password, export_format): response = client.get(url) assert response.status_code == status_map['detail'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['catalog', 'section', 'page', 'questionset', 'question'] - @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('add_or_remove,has_current_site_check', [('add', True), ('remove', False)]) diff --git a/rdmo/questions/tests/test_viewset_page.py b/rdmo/questions/tests/test_viewset_page.py index e0147bb0b5..002208c0b0 100644 --- a/rdmo/questions/tests/test_viewset_page.py +++ b/rdmo/questions/tests/test_viewset_page.py @@ -69,19 +69,13 @@ def test_index(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_export(db, client, username, password, export_format): +def test_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) url = reverse(urlnames['export']) + export_format + '/' response = client.get(url) assert response.status_code == status_map['list'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['page', 'questionset', 'question'] - def test_export_search(db, client): client.login(username='editor', password='editor') @@ -317,7 +311,7 @@ def test_delete(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_detail_export(db, client, username, password, export_format): +def test_detail_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) instance = Page.objects.first() @@ -325,12 +319,6 @@ def test_detail_export(db, client, username, password, export_format): response = client.get(url) assert response.status_code == status_map['detail'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['page', 'questionset', 'question'] - def test_detail_export_full(db, client): client.login(username='editor', password='editor') diff --git a/rdmo/questions/tests/test_viewset_page_multisite.py b/rdmo/questions/tests/test_viewset_page_multisite.py index 6bd56690a8..37e49f6470 100644 --- a/rdmo/questions/tests/test_viewset_page_multisite.py +++ b/rdmo/questions/tests/test_viewset_page_multisite.py @@ -1,5 +1,3 @@ -import xml.etree.ElementTree as et - import pytest from django.db.models import Max @@ -33,19 +31,13 @@ def test_index(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_export(db, client, username, password, export_format): +def test_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) url = reverse(urlnames['export']) + export_format + '/' response = client.get(url) assert response.status_code == status_map['list'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['page', 'questionset', 'question'] - @pytest.mark.parametrize('username,password', users) def test_detail(db, client, username, password): @@ -273,16 +265,10 @@ def test_delete(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_detail_export(db, client, username, password, export_format): +def test_detail_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) instance = Page.objects.first() url = reverse(urlnames['detail_export'], args=[instance.pk]) + export_format + '/' response = client.get(url) assert response.status_code == status_map['detail'][username], response.content - - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['page', 'questionset', 'question'] diff --git a/rdmo/questions/tests/test_viewset_question.py b/rdmo/questions/tests/test_viewset_question.py index baee8839b5..0cdd02aa37 100644 --- a/rdmo/questions/tests/test_viewset_question.py +++ b/rdmo/questions/tests/test_viewset_question.py @@ -69,19 +69,13 @@ def test_index(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_export(db, client, username, password, export_format): +def test_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) url = reverse(urlnames['export']) + export_format + '/' response = client.get(url) assert response.status_code == status_map['list'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['question'] - def test_export_search(db, client): client.login(username='editor', password='editor') @@ -352,7 +346,7 @@ def test_delete(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_detail_export(db, client, username, password, export_format): +def test_detail_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) instance = Question.objects.first() @@ -360,12 +354,6 @@ def test_detail_export(db, client, username, password, export_format): response = client.get(url) assert response.status_code == status_map['detail'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['question'] - def test_detail_export_full(db, client): client.login(username='editor', password='editor') diff --git a/rdmo/questions/tests/test_viewset_question_multisite.py b/rdmo/questions/tests/test_viewset_question_multisite.py index 73264498ed..e03fa07524 100644 --- a/rdmo/questions/tests/test_viewset_question_multisite.py +++ b/rdmo/questions/tests/test_viewset_question_multisite.py @@ -1,5 +1,3 @@ -import xml.etree.ElementTree as et - import pytest from django.db.models import Max @@ -33,19 +31,13 @@ def test_index(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_export(db, client, username, password, export_format): +def test_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) url = reverse(urlnames['export']) + export_format + '/' response = client.get(url) assert response.status_code == status_map['list'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['question'] - @pytest.mark.parametrize('username,password', users) def test_detail(db, client, username, password): @@ -308,16 +300,10 @@ def test_delete(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_detail_export(db, client, username, password, export_format): +def test_detail_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) instance = Question.objects.first() url = reverse(urlnames['detail_export'], args=[instance.pk]) + export_format + '/' response = client.get(url) assert response.status_code == status_map['detail'][username], response.content - - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['question'] diff --git a/rdmo/questions/tests/test_viewset_questionset.py b/rdmo/questions/tests/test_viewset_questionset.py index 314e874255..cab91cc3c7 100644 --- a/rdmo/questions/tests/test_viewset_questionset.py +++ b/rdmo/questions/tests/test_viewset_questionset.py @@ -69,19 +69,13 @@ def test_index(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_export(db, client, username, password, export_format): +def test_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) url = reverse(urlnames['export']) + export_format + '/' response = client.get(url) assert response.status_code == status_map['list'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['questionset', 'question'] - def test_export_search(db, client): client.login(username='editor', password='editor') @@ -357,7 +351,7 @@ def test_delete(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_detail_export(db, client, username, password, export_format): +def test_detail_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) instance = QuestionSet.objects.first() @@ -365,12 +359,6 @@ def test_detail_export(db, client, username, password, export_format): response = client.get(url) assert response.status_code == status_map['detail'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['questionset', 'question'] - def test_detail_export_full(db, client): client.login(username='editor', password='editor') diff --git a/rdmo/questions/tests/test_viewset_questionset_multisite.py b/rdmo/questions/tests/test_viewset_questionset_multisite.py index 2a11a36c2c..e3c11a1113 100644 --- a/rdmo/questions/tests/test_viewset_questionset_multisite.py +++ b/rdmo/questions/tests/test_viewset_questionset_multisite.py @@ -1,5 +1,3 @@ -import xml.etree.ElementTree as et - import pytest from django.db.models import Max @@ -33,19 +31,13 @@ def test_index(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_export(db, client, username, password, export_format): +def test_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) url = reverse(urlnames['export']) + export_format + '/' response = client.get(url) assert response.status_code == status_map['list'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['questionset', 'question'] - @pytest.mark.parametrize('username,password', users) def test_detail(db, client, username, password): @@ -313,16 +305,10 @@ def test_delete(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_detail_export(db, client, username, password, export_format): +def test_detail_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) instance = QuestionSet.objects.first() url = reverse(urlnames['detail_export'], args=[instance.pk]) + export_format + '/' response = client.get(url) assert response.status_code == status_map['detail'][username], response.content - - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['questionset', 'question'] diff --git a/rdmo/questions/tests/test_viewset_section.py b/rdmo/questions/tests/test_viewset_section.py index efd64e07da..1d11380e44 100644 --- a/rdmo/questions/tests/test_viewset_section.py +++ b/rdmo/questions/tests/test_viewset_section.py @@ -69,19 +69,13 @@ def test_index(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_export(db, client, username, password, export_format): +def test_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) url = reverse(urlnames['export']) + export_format + '/' response = client.get(url) assert response.status_code == status_map['list'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['section', 'page', 'questionset', 'question'] - def test_export_search(db, client): client.login(username='editor', password='editor') @@ -262,7 +256,7 @@ def test_delete(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_detail_export(db, client, username, password, export_format): +def test_detail_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) instance = Section.objects.first() @@ -270,12 +264,6 @@ def test_detail_export(db, client, username, password, export_format): response = client.get(url) assert response.status_code == status_map['detail'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['section', 'page', 'questionset', 'question'] - def test_detail_export_full(db, client): client.login(username='editor', password='editor') diff --git a/rdmo/questions/tests/test_viewset_section_multisite.py b/rdmo/questions/tests/test_viewset_section_multisite.py index 203d783ef4..2cad612d89 100644 --- a/rdmo/questions/tests/test_viewset_section_multisite.py +++ b/rdmo/questions/tests/test_viewset_section_multisite.py @@ -1,5 +1,3 @@ -import xml.etree.ElementTree as et - import pytest from django.db.models import Max @@ -33,19 +31,13 @@ def test_index(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_export(db, client, username, password, export_format): +def test_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) url = reverse(urlnames['export']) + export_format + '/' response = client.get(url) assert response.status_code == status_map['list'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['section', 'page', 'questionset', 'question'] - @pytest.mark.parametrize('username,password', users) def test_detail(db, client, username, password): @@ -218,16 +210,10 @@ def test_delete(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_detail_export(db, client, username, password, export_format): +def test_detail_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) instance = Section.objects.first() url = reverse(urlnames['detail_export'], args=[instance.pk]) + export_format + '/' response = client.get(url) assert response.status_code == status_map['detail'][username], response.content - - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['section', 'page', 'questionset', 'question'] diff --git a/rdmo/tasks/tests/test_viewset_task.py b/rdmo/tasks/tests/test_viewset_task.py index c87e8e3b54..24dc062bf7 100644 --- a/rdmo/tasks/tests/test_viewset_task.py +++ b/rdmo/tasks/tests/test_viewset_task.py @@ -1,5 +1,3 @@ -import xml.etree.ElementTree as et - import pytest from django.urls import reverse @@ -64,19 +62,13 @@ def test_index(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_export(db, client, username, password, export_format): +def test_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) url = reverse(urlnames['export']) + export_format + '/' response = client.get(url) assert response.status_code == status_map['list'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['task'] - def test_export_search(db, client): client.login(username='editor', password='editor') @@ -160,16 +152,10 @@ def test_delete(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_detail_export(db, client, username, password, export_format): +def test_detail_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) instance = Task.objects.first() url = reverse(urlnames['detail_export'], args=[instance.pk]) + export_format + '/' response = client.get(url) assert response.status_code == status_map['detail'][username], response.content - - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['task'] diff --git a/rdmo/tasks/tests/test_viewset_task_multisite.py b/rdmo/tasks/tests/test_viewset_task_multisite.py index fb4e2c9b88..86e9e416ec 100644 --- a/rdmo/tasks/tests/test_viewset_task_multisite.py +++ b/rdmo/tasks/tests/test_viewset_task_multisite.py @@ -1,5 +1,3 @@ -import xml.etree.ElementTree as et - import pytest from django.contrib.sites.models import Site @@ -35,19 +33,13 @@ def test_index(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_export(db, client, username, password, export_format): +def test_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) url = reverse(urlnames['export']) + export_format + '/' response = client.get(url) assert response.status_code == status_map['list'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['task'] - @pytest.mark.parametrize('username,password', users) def test_detail(db, client, username, password): @@ -123,7 +115,7 @@ def test_delete(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_detail_export(db, client, username, password, export_format): +def test_detail_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) instance = Task.objects.first() @@ -131,13 +123,6 @@ def test_detail_export(db, client, username, password, export_format): response = client.get(url) assert response.status_code == status_map['detail'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['task'] - - @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('add_or_remove,has_current_site_check', [('add', True), ('remove', False)]) diff --git a/rdmo/views/tests/test_viewset_view.py b/rdmo/views/tests/test_viewset_view.py index e30affc832..07305e65c3 100644 --- a/rdmo/views/tests/test_viewset_view.py +++ b/rdmo/views/tests/test_viewset_view.py @@ -1,5 +1,3 @@ -import xml.etree.ElementTree as et - import pytest from django.urls import reverse @@ -64,19 +62,13 @@ def test_index(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_export(db, client, username, password, export_format): +def test_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) url = reverse(urlnames['export']) + export_format + '/' response = client.get(url) assert response.status_code == status_map['list'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['view'] - def test_export_search(db, client): client.login(username='editor', password='editor') @@ -152,16 +144,10 @@ def test_delete(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_detail_export(db, client, username, password, export_format): +def test_detail_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) instance = View.objects.first() url = reverse(urlnames['detail_export'], args=[instance.pk]) + export_format + '/' response = client.get(url) assert response.status_code == status_map['detail'][username], response.content - - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['view'] diff --git a/rdmo/views/tests/test_viewset_view_multisite.py b/rdmo/views/tests/test_viewset_view_multisite.py index d14a372c60..ca3cd506eb 100644 --- a/rdmo/views/tests/test_viewset_view_multisite.py +++ b/rdmo/views/tests/test_viewset_view_multisite.py @@ -1,5 +1,3 @@ -import xml.etree.ElementTree as et - import pytest from django.contrib.sites.models import Site @@ -34,19 +32,13 @@ def test_index(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_export(db, client, username, password, export_format): +def test_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) url = reverse(urlnames['export']) + export_format + '/' response = client.get(url) assert response.status_code == status_map['list'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['view'] - @pytest.mark.parametrize('username,password', users) def test_detail(db, client, username, password): @@ -114,7 +106,7 @@ def test_delete(db, client, username, password): @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('export_format', export_formats) -def test_detail_export(db, client, username, password, export_format): +def test_detail_export(db, client, username, password, export_format, mocked_convert_text): client.login(username=username, password=password) instance = View.objects.first() @@ -122,12 +114,6 @@ def test_detail_export(db, client, username, password, export_format): response = client.get(url) assert response.status_code == status_map['detail'][username], response.content - if response.status_code == 200 and export_format == 'xml': - root = et.fromstring(response.content) - assert root.tag == 'rdmo' - for child in root: - assert child.tag in ['view'] - @pytest.mark.parametrize('username,password', users) @pytest.mark.parametrize('add_or_remove,has_current_site_check', [('add', True), ('remove', False)])