def test_jt_deprecated_summary_fields(project, inventory, machine_credential, net_credential, vault_credential, mocker): jt = JobTemplate.objects.create(project=project, inventory=inventory, playbook='helloworld.yml') class MockView: kwargs = {} request = None class MockRequest: version = 'v1' user = None view = MockView() request = MockRequest() view.request = request serializer = JobTemplateSerializer(instance=jt, context={ 'view': view, 'request': request }) for kwargs in [{}, {'pk': 1}]: # detail vs. list view for version in ['v1', 'v2']: view.kwargs = kwargs request.version = version sf = serializer.get_summary_fields(jt) assert 'credential' not in sf assert 'vault_credential' not in sf jt.credentials.add(machine_credential, net_credential, vault_credential) view.kwargs = {'pk': 1} for version in ['v1', 'v2']: request.version = version sf = serializer.get_summary_fields(jt) assert 'credential' in sf assert sf['credential'] # not empty dict assert 'vault_credential' in sf assert sf['vault_credential']
def test_copy_edit_standard(self, mocker, job_template_factory): """Verify that the exact output of the access.py methods are put into the serializer user_capabilities""" jt_obj = job_template_factory('testJT', project='proj1', persisted=False).job_template jt_obj.id = 5 jt_obj.admin_role = Role(id=9, role_field='admin_role') jt_obj.execute_role = Role(id=8, role_field='execute_role') jt_obj.read_role = Role(id=7, role_field='execute_role') user = User(username="******") serializer = JobTemplateSerializer(job_template) serializer.show_capabilities = ['copy', 'edit'] serializer._summary_field_labels = lambda self: [] serializer._recent_jobs = lambda self: [] request = APIRequestFactory().get('/api/v2/job_templates/42/') request.user = user view = JobTemplateDetail() view.request = request view.kwargs = {} serializer.context['view'] = view with mocker.patch("awx.api.serializers.role_summary_fields_generator", return_value='Can eat pie'): with mocker.patch("awx.main.access.JobTemplateAccess.can_change", return_value='foobar'): with mocker.patch("awx.main.access.JobTemplateAccess.can_add", return_value='foo'): with mock.patch.object(jt_obj.__class__, 'get_deprecated_credential', return_value=None): response = serializer.get_summary_fields(jt_obj) assert response['user_capabilities']['copy'] == 'foo' assert response['user_capabilities']['edit'] == 'foobar'