Esempio n. 1
0
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'