mirror of
https://github.com/ansible/awx.git
synced 2026-01-15 20:00:43 -03:30
update tests to conform to new credential behavior and launch response
This commit is contained in:
parent
86aa0136a2
commit
52d8993aa8
@ -49,7 +49,7 @@ def test_job_ignore_unprompted_vars(runtime_data, job_template_prompts, post, us
|
||||
response = post(reverse('api:job_template_launch', args=[job_template.pk]),
|
||||
runtime_data, user('admin', True))
|
||||
|
||||
assert response.status_code == 202
|
||||
assert response.status_code == 201
|
||||
job_id = response.data['job']
|
||||
job_obj = Job.objects.get(pk=job_id)
|
||||
|
||||
@ -80,7 +80,7 @@ def test_job_accept_prompted_vars(runtime_data, job_template_prompts, post, user
|
||||
response = post(reverse('api:job_template_launch', args=[job_template.pk]),
|
||||
runtime_data, user('admin', True))
|
||||
|
||||
assert response.status_code == 202
|
||||
assert response.status_code == 201
|
||||
job_id = response.data['job']
|
||||
job_obj = Job.objects.get(pk=job_id)
|
||||
|
||||
@ -150,7 +150,7 @@ def test_job_launch_fails_without_inventory_access(deploy_jobtemplate, machine_c
|
||||
response = post(reverse('api:job_template_launch',
|
||||
args=[deploy_jobtemplate.pk]), {}, common_user)
|
||||
|
||||
assert response.status_code == 202
|
||||
assert response.status_code == 201
|
||||
|
||||
# Assure that giving an inventory without access to the inventory blocks the launch
|
||||
new_inv = deploy_jobtemplate.project.organization.inventories.create(name="user-can-not-use")
|
||||
@ -170,7 +170,7 @@ def test_job_relaunch_prompted_vars(runtime_data, job_template_prompts, post, us
|
||||
first_response = post(reverse('api:job_template_launch', args=[job_template.pk]),
|
||||
runtime_data, admin_user)
|
||||
|
||||
assert first_response.status_code == 202
|
||||
assert first_response.status_code == 201
|
||||
original_job = Job.objects.get(pk=first_response.data['job'])
|
||||
|
||||
# Launch a second job as a relaunch of the first
|
||||
@ -179,7 +179,7 @@ def test_job_relaunch_prompted_vars(runtime_data, job_template_prompts, post, us
|
||||
relaunched_job = Job.objects.get(pk=second_response.data['job'])
|
||||
|
||||
# Check that job data matches the original runtime variables
|
||||
assert first_response.status_code == 202
|
||||
assert first_response.status_code == 201
|
||||
assert 'job_launch_var' in yaml.load(relaunched_job.extra_vars)
|
||||
assert relaunched_job.limit == runtime_data['limit']
|
||||
assert relaunched_job.job_type == runtime_data['job_type']
|
||||
@ -189,6 +189,7 @@ def test_job_relaunch_prompted_vars(runtime_data, job_template_prompts, post, us
|
||||
@pytest.mark.django_db
|
||||
def test_job_launch_JT_with_validation(machine_credential, deploy_jobtemplate):
|
||||
deploy_jobtemplate.extra_vars = '{"job_template_var": 3}'
|
||||
deploy_jobtemplate.credential = None
|
||||
deploy_jobtemplate.save()
|
||||
|
||||
kv = dict(extra_vars={"job_launch_var": 4}, credential=machine_credential.id)
|
||||
@ -205,6 +206,7 @@ def test_job_launch_JT_with_validation(machine_credential, deploy_jobtemplate):
|
||||
assert result
|
||||
assert 'job_template_var' in final_job_extra_vars
|
||||
assert 'job_launch_var' in final_job_extra_vars
|
||||
assert job_obj.credential.id == machine_credential.id
|
||||
|
||||
@pytest.mark.django_db
|
||||
@pytest.mark.job_runtime_vars
|
||||
|
||||
@ -68,7 +68,7 @@ class JobTemplateLaunchTest(BaseJobTestMixin, django.test.TransactionTestCase):
|
||||
def test_credential_implicit(self):
|
||||
# Implicit, attached credentials
|
||||
with self.current_user(self.user_sue):
|
||||
response = self.post(self.launch_url, {}, expect=202)
|
||||
response = self.post(self.launch_url, {}, expect=201)
|
||||
j = Job.objects.get(pk=response['job'])
|
||||
self.assertTrue(j.status == 'new')
|
||||
|
||||
@ -76,7 +76,7 @@ class JobTemplateLaunchTest(BaseJobTestMixin, django.test.TransactionTestCase):
|
||||
# Sending extra_vars as a JSON string, implicit credentials
|
||||
with self.current_user(self.user_sue):
|
||||
data = dict(extra_vars = '{\"a\":3}')
|
||||
response = self.post(self.launch_url, data, expect=202)
|
||||
response = self.post(self.launch_url, data, expect=201)
|
||||
j = Job.objects.get(pk=response['job'])
|
||||
ev_dict = yaml.load(j.extra_vars)
|
||||
self.assertIn('a', ev_dict)
|
||||
@ -87,7 +87,7 @@ class JobTemplateLaunchTest(BaseJobTestMixin, django.test.TransactionTestCase):
|
||||
# Sending extra_vars as a JSON string, implicit credentials
|
||||
with self.current_user(self.user_sue):
|
||||
data = dict(extra_vars = 'a: 3')
|
||||
response = self.post(self.launch_url, data, expect=202)
|
||||
response = self.post(self.launch_url, data, expect=201)
|
||||
j = Job.objects.get(pk=response['job'])
|
||||
ev_dict = yaml.load(j.extra_vars)
|
||||
self.assertIn('a', ev_dict)
|
||||
@ -98,7 +98,7 @@ class JobTemplateLaunchTest(BaseJobTestMixin, django.test.TransactionTestCase):
|
||||
# Explicit, credential
|
||||
with self.current_user(self.user_sue):
|
||||
self.cred_sue.delete()
|
||||
response = self.post(self.launch_url, {'credential': self.cred_doug.pk}, expect=202)
|
||||
response = self.post(self.launch_url, {'credential': self.cred_doug.pk}, expect=201)
|
||||
j = Job.objects.get(pk=response['job'])
|
||||
self.assertEqual(j.status, 'new')
|
||||
self.assertEqual(j.credential.pk, self.cred_doug.pk)
|
||||
@ -107,26 +107,26 @@ class JobTemplateLaunchTest(BaseJobTestMixin, django.test.TransactionTestCase):
|
||||
# Explicit, credential
|
||||
with self.current_user(self.user_sue):
|
||||
self.cred_sue.delete()
|
||||
response = self.post(self.launch_url, {'credential_id': self.cred_doug.pk}, expect=202)
|
||||
response = self.post(self.launch_url, {'credential_id': self.cred_doug.pk}, expect=201)
|
||||
j = Job.objects.get(pk=response['job'])
|
||||
self.assertEqual(j.status, 'new')
|
||||
self.assertEqual(j.credential.pk, self.cred_doug.pk)
|
||||
|
||||
def test_credential_override(self):
|
||||
def test_credential_override_reject(self):
|
||||
# Explicit, credential
|
||||
with self.current_user(self.user_sue):
|
||||
response = self.post(self.launch_url, {'credential': self.cred_doug.pk}, expect=202)
|
||||
response = self.post(self.launch_url, {'credential': self.cred_doug.pk}, expect=201)
|
||||
j = Job.objects.get(pk=response['job'])
|
||||
self.assertEqual(j.status, 'new')
|
||||
self.assertEqual(j.credential.pk, self.cred_doug.pk)
|
||||
self.assertEqual(j.credential.pk, self.cred_sue.pk)
|
||||
|
||||
def test_credential_override_via_credential_id(self):
|
||||
def test_credential_override_via_credential_id_reject(self):
|
||||
# Explicit, credential
|
||||
with self.current_user(self.user_sue):
|
||||
response = self.post(self.launch_url, {'credential_id': self.cred_doug.pk}, expect=202)
|
||||
response = self.post(self.launch_url, {'credential_id': self.cred_doug.pk}, expect=201)
|
||||
j = Job.objects.get(pk=response['job'])
|
||||
self.assertEqual(j.status, 'new')
|
||||
self.assertEqual(j.credential.pk, self.cred_doug.pk)
|
||||
self.assertEqual(j.credential.pk, self.cred_sue.pk)
|
||||
|
||||
def test_bad_credential_launch_fail(self):
|
||||
# Can't launch a job template without a credential defined (or if we
|
||||
@ -212,7 +212,7 @@ class JobTemplateLaunchPasswordsTest(BaseJobTestMixin, django.test.TransactionTe
|
||||
|
||||
def test_explicit_cred_with_ask_password(self):
|
||||
with self.current_user(self.user_sue):
|
||||
response = self.post(self.launch_url, {'ssh_password': 'whatever'}, expect=202)
|
||||
response = self.post(self.launch_url, {'ssh_password': 'whatever'}, expect=201)
|
||||
j = Job.objects.get(pk=response['job'])
|
||||
self.assertEqual(j.status, 'new')
|
||||
|
||||
|
||||
@ -1087,7 +1087,7 @@ class JobTransactionTest(BaseJobTestMixin, django.test.LiveServerTestCase):
|
||||
response = self.get(url)
|
||||
self.assertTrue(response['can_start'])
|
||||
self.assertFalse(response['passwords_needed_to_start'])
|
||||
response = self.post(url, {}, expect=202)
|
||||
response = self.post(url, {}, expect=201)
|
||||
job = Job.objects.get(pk=job.pk)
|
||||
self.assertEqual(job.status, 'successful', job.result_stdout)
|
||||
self.assertFalse(errors)
|
||||
@ -1146,14 +1146,14 @@ class JobTemplateSurveyTest(BaseJobTestMixin, django.test.TransactionTestCase):
|
||||
# should return, and should be able to launch template without error.
|
||||
response = self.get(launch_url)
|
||||
self.assertFalse(response['survey_enabled'])
|
||||
self.post(launch_url, {}, expect=202)
|
||||
self.post(launch_url, {}, expect=201)
|
||||
# Now post a survey spec and check that the answer is set in the
|
||||
# job's extra vars.
|
||||
self.post(url, json.loads(TEST_SIMPLE_REQUIRED_SURVEY), expect=200)
|
||||
response = self.get(launch_url)
|
||||
self.assertTrue(response['survey_enabled'])
|
||||
self.assertTrue('favorite_color' in response['variables_needed_to_start'])
|
||||
response = self.post(launch_url, dict(extra_vars=dict(favorite_color="green")), expect=202)
|
||||
response = self.post(launch_url, dict(extra_vars=dict(favorite_color="green")), expect=201)
|
||||
job = Job.objects.get(pk=response["job"])
|
||||
job_extra = json.loads(job.extra_vars)
|
||||
self.assertTrue("favorite_color" in job_extra)
|
||||
@ -1187,7 +1187,7 @@ class JobTemplateSurveyTest(BaseJobTestMixin, django.test.TransactionTestCase):
|
||||
with self.current_user(self.user_sue):
|
||||
response = self.post(url, json.loads(TEST_SURVEY_REQUIREMENTS), expect=200)
|
||||
# Just the required answer should work
|
||||
self.post(launch_url, dict(extra_vars=dict(reqd_answer="foo")), expect=202)
|
||||
self.post(launch_url, dict(extra_vars=dict(reqd_answer="foo")), expect=201)
|
||||
# Short answer but requires a long answer
|
||||
self.post(launch_url, dict(extra_vars=dict(long_answer='a', reqd_answer="foo")), expect=400)
|
||||
# Long answer but requires a short answer
|
||||
@ -1199,9 +1199,9 @@ class JobTemplateSurveyTest(BaseJobTestMixin, django.test.TransactionTestCase):
|
||||
# Integer that's too big
|
||||
self.post(launch_url, dict(extra_vars=dict(int_answer=10, reqd_answer="foo")), expect=400)
|
||||
# Integer that's just riiiiight
|
||||
self.post(launch_url, dict(extra_vars=dict(int_answer=3, reqd_answer="foo")), expect=202)
|
||||
self.post(launch_url, dict(extra_vars=dict(int_answer=3, reqd_answer="foo")), expect=201)
|
||||
# Integer bigger than min with no max defined
|
||||
self.post(launch_url, dict(extra_vars=dict(int_answer_no_max=3, reqd_answer="foo")), expect=202)
|
||||
self.post(launch_url, dict(extra_vars=dict(int_answer_no_max=3, reqd_answer="foo")), expect=201)
|
||||
# Integer answer that's the wrong type
|
||||
self.post(launch_url, dict(extra_vars=dict(int_answer="test", reqd_answer="foo")), expect=400)
|
||||
# Float that's too big
|
||||
@ -1209,7 +1209,7 @@ class JobTemplateSurveyTest(BaseJobTestMixin, django.test.TransactionTestCase):
|
||||
# Float that's too small
|
||||
self.post(launch_url, dict(extra_vars=dict(float_answer=1.995, reqd_answer="foo")), expect=400)
|
||||
# float that's just riiiiight
|
||||
self.post(launch_url, dict(extra_vars=dict(float_answer=2.01, reqd_answer="foo")), expect=202)
|
||||
self.post(launch_url, dict(extra_vars=dict(float_answer=2.01, reqd_answer="foo")), expect=201)
|
||||
# float answer that's the wrong type
|
||||
self.post(launch_url, dict(extra_vars=dict(float_answer="test", reqd_answer="foo")), expect=400)
|
||||
# Wrong choice in single choice
|
||||
@ -1219,11 +1219,11 @@ class JobTemplateSurveyTest(BaseJobTestMixin, django.test.TransactionTestCase):
|
||||
# Wrong type for multi choicen
|
||||
self.post(launch_url, dict(extra_vars=dict(reqd_answer="foo", multi_choice="two")), expect=400)
|
||||
# Right choice in single choice
|
||||
self.post(launch_url, dict(extra_vars=dict(reqd_answer="foo", single_choice="two")), expect=202)
|
||||
self.post(launch_url, dict(extra_vars=dict(reqd_answer="foo", single_choice="two")), expect=201)
|
||||
# Right choices in multi choice
|
||||
self.post(launch_url, dict(extra_vars=dict(reqd_answer="foo", multi_choice=["one", "two"])), expect=202)
|
||||
self.post(launch_url, dict(extra_vars=dict(reqd_answer="foo", multi_choice=["one", "two"])), expect=201)
|
||||
# Nested json
|
||||
self.post(launch_url, dict(extra_vars=dict(json_answer=dict(test="val", num=1), reqd_answer="foo")), expect=202)
|
||||
self.post(launch_url, dict(extra_vars=dict(json_answer=dict(test="val", num=1), reqd_answer="foo")), expect=201)
|
||||
|
||||
# Bob can access and update the survey because he's an org-admin
|
||||
with self.current_user(self.user_bob):
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user