hooks/test/unittest_syncsession.py
author Aurelien Campeas <aurelien.campeas@logilab.fr>
Tue, 10 Jun 2014 16:01:49 +0200
changeset 10354 635cfac73d28
parent 9863 3fbad401eb61
child 10724 aa3eedba866c
child 11097 900c27ea30e9
permissions -rw-r--r--
[repoapi] fold ClientConnection into Connection Connection replaces ClientConnection everywhere. Some notes: * testlib: .client_cnx and .repo_cnx become aliases of .cnx (we might not want to tell people to update their tests again for just no real benefit, so we'll live with these aliases for a while) * entity.as_rset must not be cached because we risk caching result sets having a Connection object as .req (helps unittest_breadcrumbs) * entity._cw_dont_cache_attributes loses its repo/request special paths and only keeps its storage/bfss user (this helps unittest_wfobjs) * moreover, entity.cw_instantiate and .cw_set stop overriding the attributes cache *after* the before_*_entity hooks have run, because there is no need to (it is now actually harmful to do it and unittest_hooks.test_html_tidy* tests remain green because of this) * rset._build_entity sticks its .req onto the entity just fetched from the cache, because otherwise it might carry a _cw that is a Connection object where a Request is expected (helps unittest_views_actions) * we get overall better cache usages (entity caches were split over Request + ClientConnection and Connection), hence the changes unittest_entity and unittest_wfobjs * void the ecache when providing the cnx to a request object Having the entity cache pre-filled when we bind it to the request object hurts because these entities are bound to Connection objects, that lack e.g. `.form` or `.add_js` and crash the views subsystem. Thus, the unittest_testlib.test_error_raised test will are kept green. Closes #3837233

# -*- coding: utf-8 -*-
# copyright 2003-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
#
# This file is part of CubicWeb.
#
# CubicWeb is free software: you can redistribute it and/or modify it under the
# terms of the GNU Lesser General Public License as published by the Free
# Software Foundation, either version 2.1 of the License, or (at your option)
# any later version.
#
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
# details.
#
# You should have received a copy of the GNU Lesser General Public License along
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
"""functional tests for core hooks

Note:
  syncschema.py hooks are mostly tested in server/test/unittest_migrations.py
"""

from cubicweb import ValidationError
from cubicweb.devtools.testlib import CubicWebTC

class CWPropertyHooksTC(CubicWebTC):

    def test_unexistant_cwproperty(self):
        with self.admin_access.web_request() as req:
            with self.assertRaises(ValidationError) as cm:
                req.execute('INSERT CWProperty X: X pkey "bla.bla", '
                            'X value "hop", X for_user U')
            cm.exception.translate(unicode)
            self.assertEqual(cm.exception.errors,
                             {'pkey-subject': 'unknown property key bla.bla'})

            with self.assertRaises(ValidationError) as cm:
                req.execute('INSERT CWProperty X: X pkey "bla.bla", X value "hop"')
            cm.exception.translate(unicode)
            self.assertEqual(cm.exception.errors,
                             {'pkey-subject': 'unknown property key bla.bla'})

    def test_site_wide_cwproperty(self):
        with self.admin_access.web_request() as req:
            with self.assertRaises(ValidationError) as cm:
                req.execute('INSERT CWProperty X: X pkey "ui.site-title", '
                            'X value "hop", X for_user U')
            self.assertEqual(cm.exception.errors,
                             {'for_user-subject': "site-wide property can't be set for user"})

    def test_system_cwproperty(self):
        with self.admin_access.web_request() as req:
            with self.assertRaises(ValidationError) as cm:
                req.execute('INSERT CWProperty X: X pkey "system.version.cubicweb", '
                            'X value "hop", X for_user U')
            self.assertEqual(cm.exception.errors,
                             {'for_user-subject': "site-wide property can't be set for user"})

    def test_bad_type_cwproperty(self):
        with self.admin_access.web_request() as req:
            with self.assertRaises(ValidationError) as cm:
                req.execute('INSERT CWProperty X: X pkey "ui.language", '
                            'X value "hop", X for_user U')
            self.assertEqual(cm.exception.errors,
                             {'value-subject': u'unauthorized value'})
            with self.assertRaises(ValidationError) as cm:
                req.execute('INSERT CWProperty X: X pkey "ui.language", X value "hop"')
            self.assertEqual(cm.exception.errors, {'value-subject': u'unauthorized value'})

if __name__ == '__main__':
    from logilab.common.testlib import unittest_main
    unittest_main()