mirror of
https://github.com/ansible/awx.git
synced 2026-05-07 01:17:37 -02:30
Add custom_virtualenv param to inventory source and tests
This commit is contained in:
@@ -1,6 +1,40 @@
|
||||
import pytest
|
||||
|
||||
from awx.main.models import Organization, Inventory, InventorySource
|
||||
from awx.main.models import Organization, Inventory, InventorySource, Project
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def base_inventory():
|
||||
org = Organization.objects.create(name='test-org')
|
||||
inv = Inventory.objects.create(name='test-inv', organization=org)
|
||||
Project.objects.create(
|
||||
name='test-proj',
|
||||
organization=org,
|
||||
scm_type='git',
|
||||
scm_url='https://github.com/ansible/test-playbooks.git',
|
||||
)
|
||||
return inv
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_inventory_source_create(run_module, admin_user, base_inventory):
|
||||
result = run_module('tower_inventory_source', dict(
|
||||
name='foo',
|
||||
inventory='test-inv',
|
||||
state='present',
|
||||
source='scm',
|
||||
source_project='test-proj'
|
||||
), admin_user)
|
||||
assert result.pop('changed', None), result
|
||||
|
||||
inv_src = InventorySource.objects.get(name='foo')
|
||||
assert inv_src.inventory == base_inventory
|
||||
result.pop('invocation')
|
||||
assert result == {
|
||||
'id': inv_src.id,
|
||||
'inventory_source': 'foo',
|
||||
'state': 'present'
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -54,3 +88,53 @@ def test_create_inventory_source_multiple_orgs(run_module, admin_user):
|
||||
"state": "present",
|
||||
"id": inv_src.id,
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_create_inventory_source_with_venv(run_module, admin_user, base_inventory, mocker):
|
||||
path = '/var/lib/awx/venv/custom-venv/foobar13489435/'
|
||||
with mocker.patch('awx.main.models.mixins.get_custom_venv_choices', return_value=[path]):
|
||||
result = run_module('tower_inventory_source', dict(
|
||||
name='foo',
|
||||
inventory='test-inv',
|
||||
state='present',
|
||||
source='scm',
|
||||
source_project='test-proj',
|
||||
custom_virtualenv=path
|
||||
), admin_user)
|
||||
assert result.pop('changed'), result
|
||||
|
||||
inv_src = InventorySource.objects.get(name='foo')
|
||||
assert inv_src.inventory == base_inventory
|
||||
result.pop('invocation')
|
||||
|
||||
assert inv_src.custom_virtualenv == path
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_custom_venv_no_op(run_module, admin_user, base_inventory, mocker):
|
||||
"""If the inventory source is modified, then it should not blank fields
|
||||
unrelated to the params that the user passed.
|
||||
This enforces assumptions about the behavior of the AnsibleModule
|
||||
default argument_spec behavior.
|
||||
"""
|
||||
inv_src = InventorySource.objects.create(
|
||||
name='foo',
|
||||
inventory=base_inventory,
|
||||
source_project=Project.objects.get(name='test-proj'),
|
||||
source='scm',
|
||||
custom_virtualenv='/venv/foobar/'
|
||||
)
|
||||
# mock needed due to API behavior, not incorrect client behavior
|
||||
with mocker.patch('awx.main.models.mixins.get_custom_venv_choices', return_value=['/venv/foobar/']):
|
||||
result = run_module('tower_inventory_source', dict(
|
||||
name='foo',
|
||||
description='this is the changed description',
|
||||
inventory='test-inv',
|
||||
source='scm', # is required, but behavior is arguable
|
||||
state='present'
|
||||
), admin_user)
|
||||
assert result.pop('changed', None), result
|
||||
inv_src.refresh_from_db()
|
||||
assert inv_src.custom_virtualenv == '/venv/foobar/'
|
||||
assert inv_src.description == 'this is the changed description'
|
||||
|
||||
@@ -12,6 +12,7 @@ def test_create_organization(run_module, admin_user):
|
||||
module_args = {'name': 'foo', 'description': 'barfoo', 'state': 'present'}
|
||||
|
||||
result = run_module('tower_organization', module_args, admin_user)
|
||||
assert result.get('changed'), result
|
||||
|
||||
org = Organization.objects.get(name='foo')
|
||||
|
||||
@@ -26,3 +27,26 @@ def test_create_organization(run_module, admin_user):
|
||||
}
|
||||
|
||||
assert org.description == 'barfoo'
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_create_organization_with_venv(run_module, admin_user, mocker):
|
||||
path = '/var/lib/awx/venv/custom-venv/foobar13489435/'
|
||||
with mocker.patch('awx.main.models.mixins.get_custom_venv_choices', return_value=[path]):
|
||||
result = run_module('tower_organization', {
|
||||
'name': 'foo',
|
||||
'custom_virtualenv': path,
|
||||
'state': 'present'
|
||||
}, admin_user)
|
||||
assert result.pop('changed'), result
|
||||
|
||||
org = Organization.objects.get(name='foo')
|
||||
result.pop('invocation')
|
||||
|
||||
assert result == {
|
||||
"organization": "foo",
|
||||
"state": "present",
|
||||
"id": org.id
|
||||
}
|
||||
|
||||
assert org.custom_virtualenv == path
|
||||
|
||||
Reference in New Issue
Block a user