From 68e3eaf6aaaf3484fd14e9ddbffecfb449ec1743 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Wed, 9 Jan 2019 19:00:21 +0100 Subject: [PATCH 1/4] tests: simplify import_site tests (#29545) --- tests/test_import_export_site_cmd.py | 121 ++++++++++++++++----------- 1 file changed, 72 insertions(+), 49 deletions(-) diff --git a/tests/test_import_export_site_cmd.py b/tests/test_import_export_site_cmd.py index e8fd9291..57e36488 100644 --- a/tests/test_import_export_site_cmd.py +++ b/tests/test_import_export_site_cmd.py @@ -1,4 +1,5 @@ import __builtin__ +import random import json from django.core import management @@ -6,6 +7,19 @@ import pytest from django_rbac.utils import get_role_model +Role = get_role_model() + + +@pytest.fixture +def json_fixture(tmpdir): + def f(content): + name = str(random.getrandbits(64)) + outfile = tmpdir.join(name) + with outfile.open('w') as f: + f.write(json.dumps(content)) + return outfile.strpath + return f + def dummy_export_site(*args): return {'roles': [{'name': 'role1'}]} @@ -30,22 +44,24 @@ def test_export_role_cmd_to_file(db, monkeypatch, tmpdir): assert json.loads(f.read()) == dummy_export_site() -def test_import_site_cmd(db, tmpdir, monkeypatch): - export_file = tmpdir.join('roles-export.json') - with export_file.open('w'): - export_file.write(json.dumps({'roles': []})) - management.call_command('import_site', export_file.strpath) +def test_import_site_cmd(db, monkeypatch, json_fixture): + management.call_command('import_site', json_fixture({'roles': []})) -def test_import_site_cmd_infos_on_stdout(db, tmpdir, monkeypatch, capsys): - export_file = tmpdir.join('roles-export.json') - with export_file.open('w'): - export_file.write(json.dumps( - {'roles': [{ - 'uuid': 'dqfewrvesvews2532', 'slug': 'role-slug', 'name': 'role-name', - 'ou': None, 'service': None}]})) +def test_import_site_cmd_infos_on_stdout(db, monkeypatch, capsys, json_fixture): + content = { + 'roles': [ + { + 'uuid': 'dqfewrvesvews2532', + 'slug': 'role-slug', + 'name': 'role-name', + 'ou': None, + 'service': None + } + ] + } - management.call_command('import_site', export_file.strpath) + management.call_command('import_site', json_fixture(content)) out, err = capsys.readouterr() assert "Real run" in out @@ -53,13 +69,7 @@ def test_import_site_cmd_infos_on_stdout(db, tmpdir, monkeypatch, capsys): assert "0 roles updated" in out -def test_import_site_transaction_rollback_on_error(db, tmpdir, monkeypatch, capsys): - export_file = tmpdir.join('roles-export.json') - with export_file.open('w'): - export_file.write(json.dumps({'roles': []})) - - Role = get_role_model() - +def test_import_site_transaction_rollback_on_error(db, monkeypatch, capsys, json_fixture): def exception_import_site(*args): Role.objects.create(slug='role-slug') raise Exception() @@ -69,43 +79,51 @@ def test_import_site_transaction_rollback_on_error(db, tmpdir, monkeypatch, caps authentic2.management.commands.import_site, 'import_site', exception_import_site) with pytest.raises(Exception): - management.call_command('import_site', export_file.strpath) + management.call_command('import_site', json_fixture({'roles': []})) with pytest.raises(Role.DoesNotExist): Role.objects.get(slug='role-slug') -def test_import_site_transaction_rollback_on_dry_run(db, tmpdir, monkeypatch, capsys): - export_file = tmpdir.join('roles-export.json') - with export_file.open('w'): - export_file.write(json.dumps( - {'roles': [{ - 'uuid': 'dqfewrvesvews2532', 'slug': 'role-slug', 'name': 'role-name', - 'ou': None, 'service': None}]})) - - Role = get_role_model() +def test_import_site_transaction_rollback_on_dry_run(db, monkeypatch, capsys, json_fixture): + content = { + 'roles': [ + { + 'uuid': 'dqfewrvesvews2532', + 'slug': 'role-slug', + 'name': 'role-name', + 'ou': None, + 'service': None + } + ] + } - management.call_command('import_site', '--dry-run', export_file.strpath) + management.call_command('import_site', '--dry-run', json_fixture(content)) with pytest.raises(Role.DoesNotExist): Role.objects.get(slug='role-slug') -def test_import_site_cmd_unhandled_context_option(db, tmpdir, monkeypatch, capsys): +def test_import_site_cmd_unhandled_context_option(db, monkeypatch, capsys, json_fixture): from authentic2.data_transfer import DataImportError - export_file = tmpdir.join('roles-export.json') - with export_file.open('w'): - export_file.write(json.dumps( - {'roles': [{ - 'uuid': 'dqfewrvesvews2532', 'slug': 'role-slug', 'name': 'role-name', - 'ou': None, 'service': None}]})) + content = { + 'roles': [ + { + 'uuid': 'dqfewrvesvews2532', + 'slug': 'role-slug', + 'name': 'role-name', + 'ou': None, + 'service': None + } + ] + } - get_role_model().objects.create(uuid='dqfewrvesvews2532', slug='role-slug', name='role-name') + Role.objects.create(uuid='dqfewrvesvews2532', slug='role-slug', name='role-name') with pytest.raises(DataImportError): management.call_command( - 'import_site', '-o', 'role-delete-orphans', export_file.strpath) + 'import_site', '-o', 'role-delete-orphans', json_fixture(content)) def test_import_site_cmd_unknown_context_option(db, tmpdir, monkeypatch, capsys): @@ -115,18 +133,23 @@ def test_import_site_cmd_unknown_context_option(db, tmpdir, monkeypatch, capsys) management.call_command('import_site', '-o', 'unknown-option', export_file.strpath) -def test_import_site_confirm_prompt_yes(db, tmpdir, monkeypatch): - export_file = tmpdir.join('roles-export.json') - with export_file.open('w'): - export_file.write(json.dumps( - {'roles': [{ - 'uuid': 'dqfewrvesvews2532', 'slug': 'role-slug', 'name': 'role-name', - 'ou': None, 'service': None}]})) +def test_import_site_confirm_prompt_yes(db, monkeypatch, json_fixture): + content = { + 'roles': [ + { + 'uuid': 'dqfewrvesvews2532', + 'slug': 'role-slug', + 'name': 'role-name', + 'ou': None, + 'service': None + } + ] + } def yes_raw_input(*args, **kwargs): return 'yes' monkeypatch.setattr(__builtin__, 'raw_input', yes_raw_input) - management.call_command('import_site', export_file.strpath, stdin='yes') - assert get_role_model().objects.get(uuid='dqfewrvesvews2532') + management.call_command('import_site', json_fixture(content), stdin='yes') + assert Role.objects.get(uuid='dqfewrvesvews2532') -- 2.20.1