88 lines
2.7 KiB
Python
88 lines
2.7 KiB
Python
import pytest
|
|
from unittest import mock
|
|
|
|
from awx.main.models import Project, Credential, CredentialType
|
|
from awx.main.models.organization import Organization
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_project_initial_update():
|
|
with mock.patch.object(Project, "update") as mock_update:
|
|
Project.objects.create(name='foo', scm_type='git')
|
|
mock_update.assert_called_once_with()
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_does_not_update_nonsensitive_change(project):
|
|
with mock.patch.object(Project, "update") as mock_update:
|
|
project.scm_update_on_launch = not project.scm_update_on_launch
|
|
project.save()
|
|
mock_update.assert_not_called()
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_sensitive_change_triggers_update(project):
|
|
with mock.patch.object(Project, "update") as mock_update:
|
|
project.scm_url = 'https://foo.invalid'
|
|
project.save()
|
|
mock_update.assert_called_once_with()
|
|
# test other means of initialization
|
|
project = Project.objects.get(pk=project.pk)
|
|
with mock.patch.object(Project, "update") as mock_update:
|
|
project.scm_url = 'https://foo2.invalid'
|
|
project.save()
|
|
mock_update.assert_called_once_with()
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_local_path_autoset(organization):
|
|
with mock.patch.object(Project, "update"):
|
|
p = Project.objects.create(
|
|
name="test-proj",
|
|
organization=organization,
|
|
scm_url='localhost',
|
|
scm_type='git'
|
|
)
|
|
assert p.local_path == f'_{p.id}__test_proj'
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_foreign_key_change_changes_modified_by(project, organization):
|
|
assert project._get_fields_snapshot()['organization_id'] == organization.id
|
|
project.organization = Organization(name='foo', pk=41)
|
|
assert project._get_fields_snapshot()['organization_id'] == 41
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_project_related_jobs(project):
|
|
update = project.create_unified_job()
|
|
assert update.id in [u.id for u in project._get_related_jobs()]
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_galaxy_credentials(project):
|
|
org = project.organization
|
|
galaxy = CredentialType.defaults['galaxy_api_token']()
|
|
galaxy.save()
|
|
for i in range(5):
|
|
cred = Credential.objects.create(
|
|
name=f'Ansible Galaxy {i + 1}',
|
|
organization=org,
|
|
credential_type=galaxy,
|
|
inputs={
|
|
'url': 'https://galaxy.ansible.com/'
|
|
}
|
|
)
|
|
cred.save()
|
|
org.galaxy_credentials.add(cred)
|
|
|
|
assert [
|
|
cred.name for cred in org.galaxy_credentials.all()
|
|
] == [
|
|
'Ansible Galaxy 1',
|
|
'Ansible Galaxy 2',
|
|
'Ansible Galaxy 3',
|
|
'Ansible Galaxy 4',
|
|
'Ansible Galaxy 5',
|
|
]
|