docker.images/ansible.awx/awx-17.1.0/awx/main/tests/functional/models/test_project.py

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',
]