51 lines
1.6 KiB
Python
51 lines
1.6 KiB
Python
import sys
|
|
import pytest
|
|
|
|
from io import StringIO
|
|
|
|
from django.core.management import call_command
|
|
|
|
from awx.main.management.commands.update_password import UpdatePassword
|
|
|
|
|
|
def run_command(name, *args, **options):
|
|
command_runner = options.pop('command_runner', call_command)
|
|
stdin_fileobj = options.pop('stdin_fileobj', None)
|
|
options.setdefault('verbosity', 1)
|
|
original_stdin = sys.stdin
|
|
original_stdout = sys.stdout
|
|
original_stderr = sys.stderr
|
|
if stdin_fileobj:
|
|
sys.stdin = stdin_fileobj
|
|
sys.stdout = StringIO()
|
|
sys.stderr = StringIO()
|
|
result = None
|
|
try:
|
|
result = command_runner(name, *args, **options)
|
|
except Exception as e:
|
|
result = e
|
|
finally:
|
|
captured_stdout = sys.stdout.getvalue()
|
|
captured_stderr = sys.stderr.getvalue()
|
|
sys.stdin = original_stdin
|
|
sys.stdout = original_stdout
|
|
sys.stderr = original_stderr
|
|
return result, captured_stdout, captured_stderr
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"username,password,expected,changed", [
|
|
('admin', 'dingleberry', 'Password updated', True),
|
|
('admin', 'admin', 'Password not updated', False),
|
|
(None, 'foo', 'username required', False),
|
|
('admin', None, 'password required', False),
|
|
]
|
|
)
|
|
def test_update_password_command(mocker, username, password, expected, changed):
|
|
with mocker.patch.object(UpdatePassword, 'update_password', return_value=changed):
|
|
result, stdout, stderr = run_command('update_password', username=username, password=password)
|
|
if result is None:
|
|
assert stdout == expected
|
|
else:
|
|
assert str(result) == expected
|