cubicweb/pyramid/test/test_rest_api.py
author Julien Tayon <julien.tayon@logilab.fr>
Tue, 25 Feb 2020 23:22:58 +0100
branch3.27
changeset 12895 5a9d1e64f505
parent 11631 faf279e33298
permissions -rw-r--r--
[ldapfeed] make code compatible with ldap3>=2 * Some constants have been renamed. * Directly bind when data-cnx-dn/data-cnx-password are provided, some servers, including ours require this. * Use raise_exceptions=True to avoid ignored ldap errors * raise in case of failed anonymous bind * do not search for "dn" attribute because this raise an "invalid attribute" with new ldap3 versions * Password is now returned as bytes, so no longer need to encode them before crypt. * modification_date is now returned as a datetime object Co-Authored-By: Philippe Pepiot <philippe.pepiot@logilab.fr> Closes #16073071

from __future__ import absolute_import

from cubicweb.pyramid.rest_api import EntityResource
from cubicweb.pyramid.core import CubicWebPyramidRequest
from pyramid.view import view_config

from cubicweb.pyramid.test import PyramidCWTest


class RestApiTest(PyramidCWTest):
    def includeme(self, config):
        config.include('cubicweb.pyramid.rest_api')
        config.include('cubicweb.pyramid.test.test_rest_api')

    def test_delete(self):
        with self.admin_access.repo_cnx() as cnx:
            cnx.create_entity('CWGroup', name=u'tmp')
            cnx.commit()

        self.login()
        res = self.webapp.delete('/cwgroup/tmp')
        self.assertEqual(res.status_int, 204)

        with self.admin_access.repo_cnx() as cnx:
            self.assertEqual(cnx.find('CWGroup', name=u'tmp').rowcount, 0)

    def test_rql_execute(self):
        with self.admin_access.repo_cnx() as cnx:
            cnx.create_entity('CWGroup', name=u'tmp')
            cnx.commit()
        self.login()
        params = {'test_rql_execute': 'test'}
        self.webapp.get('/cwgroup/tmp', params=params)


@view_config(
    route_name='cwentities',
    context=EntityResource,
    request_method='GET',
    request_param=('test_rql_execute',)
)
def rql_execute_view(context, request):
    """Return 500 response if rset.req is not a CubicWeb request.
    """
    if isinstance(context.rset.req, CubicWebPyramidRequest):
        request.response.status_int = 204
    else:
        request.response.status_int = 500
        request.response.text = 'rset.req is not a CubicWeb request'
    return request.response


def includeme(config):
    config.scan(__name__)


if __name__ == '__main__':
    from unittest import main
    main()