web/test/unittest_propertysheet.py
author Julien Cristau <julien.cristau@logilab.fr>
Mon, 29 Jun 2015 16:58:43 +0200
changeset 10463 9add9b7f9df7
parent 10318 09273cb083e7
child 10507 d54a942ee6da
permissions -rw-r--r--
[server/test] fix random error in unittest_security When entering a new Connection, we cache the user and its 'login' attribute (with no permissions checking). This test makes 'CWUser.login' unreadable by guests, and then proceeds to make sure the 'anon' user can actually not read any 'login' attribute. However, due to the above cnx initialization, anon's login is actually cached, hence readable. This happens to make the test fail sometimes depending on the order in which CWUser entities are returned, because one of them has .complete() called, which as a side effect sets the attribute cache to None for unreadable attributes. Call .complete() on both entities to reset the login cache. While this is still highly debatable, at least it's consistent.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5466
b5af2ac0c43c [uiprops] test and fix reloading of modified css files; update c-c newcube; deprecates config.has_resource.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5445
diff changeset
     1
import os
5444
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     2
from os.path import join, dirname
5466
b5af2ac0c43c [uiprops] test and fix reloading of modified css files; update c-c newcube; deprecates config.has_resource.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5445
diff changeset
     3
from shutil import rmtree
10318
09273cb083e7 [web/test] don't delete uicache directory
Julien Cristau <julien.cristau@logilab.fr>
parents: 9844
diff changeset
     4
import errno
09273cb083e7 [web/test] don't delete uicache directory
Julien Cristau <julien.cristau@logilab.fr>
parents: 9844
diff changeset
     5
import tempfile
5466
b5af2ac0c43c [uiprops] test and fix reloading of modified css files; update c-c newcube; deprecates config.has_resource.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5445
diff changeset
     6
5444
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     7
from logilab.common.testlib import TestCase, unittest_main
5466
b5af2ac0c43c [uiprops] test and fix reloading of modified css files; update c-c newcube; deprecates config.has_resource.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5445
diff changeset
     8
9844
e7d7b7793769 [webtests/propertysheet] kill an "import *"
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
     9
from cubicweb.web.propertysheet import PropertySheet, lazystr
5444
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    10
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    11
DATADIR = join(dirname(__file__), 'data')
10318
09273cb083e7 [web/test] don't delete uicache directory
Julien Cristau <julien.cristau@logilab.fr>
parents: 9844
diff changeset
    12
09273cb083e7 [web/test] don't delete uicache directory
Julien Cristau <julien.cristau@logilab.fr>
parents: 9844
diff changeset
    13
try:
09273cb083e7 [web/test] don't delete uicache directory
Julien Cristau <julien.cristau@logilab.fr>
parents: 9844
diff changeset
    14
    os.makedirs(join(DATADIR, 'uicache'))
09273cb083e7 [web/test] don't delete uicache directory
Julien Cristau <julien.cristau@logilab.fr>
parents: 9844
diff changeset
    15
except OSError as err:
09273cb083e7 [web/test] don't delete uicache directory
Julien Cristau <julien.cristau@logilab.fr>
parents: 9844
diff changeset
    16
    if err.errno != errno.EEXIST:
09273cb083e7 [web/test] don't delete uicache directory
Julien Cristau <julien.cristau@logilab.fr>
parents: 9844
diff changeset
    17
        raise
09273cb083e7 [web/test] don't delete uicache directory
Julien Cristau <julien.cristau@logilab.fr>
parents: 9844
diff changeset
    18
CACHEDIR = tempfile.mkdtemp(dir=join(DATADIR, 'uicache'))
5466
b5af2ac0c43c [uiprops] test and fix reloading of modified css files; update c-c newcube; deprecates config.has_resource.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5445
diff changeset
    19
5444
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    20
class PropertySheetTC(TestCase):
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    21
5466
b5af2ac0c43c [uiprops] test and fix reloading of modified css files; update c-c newcube; deprecates config.has_resource.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5445
diff changeset
    22
    def tearDown(self):
b5af2ac0c43c [uiprops] test and fix reloading of modified css files; update c-c newcube; deprecates config.has_resource.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5445
diff changeset
    23
        rmtree(CACHEDIR)
b5af2ac0c43c [uiprops] test and fix reloading of modified css files; update c-c newcube; deprecates config.has_resource.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5445
diff changeset
    24
5444
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    25
    def test(self):
5466
b5af2ac0c43c [uiprops] test and fix reloading of modified css files; update c-c newcube; deprecates config.has_resource.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5445
diff changeset
    26
        ps = PropertySheet(CACHEDIR, datadir_url='http://cwtest.com')
5444
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    27
        ps.load(join(DATADIR, 'sheet1.py'))
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    28
        ps.load(join(DATADIR, 'sheet2.py'))
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    29
        # defined by sheet1
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5938
diff changeset
    30
        self.assertEqual(ps['logo'], 'http://cwtest.com/logo.png')
5444
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    31
        # defined by sheet1, overriden by sheet2
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5938
diff changeset
    32
        self.assertEqual(ps['bgcolor'], '#FFFFFF')
5444
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    33
        # defined by sheet2
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5938
diff changeset
    34
        self.assertEqual(ps['fontcolor'], 'black')
5444
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    35
        # defined by sheet1, extended by sheet2
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5938
diff changeset
    36
        self.assertEqual(ps['stylesheets'], ['http://cwtest.com/cubicweb.css',
5444
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    37
                                              'http://cwtest.com/mycube.css'])
5938
9cb13d1b2ce4 [uiprops] introduce lazystr to get a chance to change style without having to change all properties
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5466
diff changeset
    38
        # lazy string defined by sheet1
9cb13d1b2ce4 [uiprops] introduce lazystr to get a chance to change style without having to change all properties
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5466
diff changeset
    39
        self.assertIsInstance(ps['lazy'], lazystr)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5938
diff changeset
    40
        self.assertEqual(str(ps['lazy']), '#FFFFFF')
5938
9cb13d1b2ce4 [uiprops] introduce lazystr to get a chance to change style without having to change all properties
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5466
diff changeset
    41
        # test compilation
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5938
diff changeset
    42
        self.assertEqual(ps.compile('a {bgcolor: %(bgcolor)s; size: 1%;}'),
5445
4467ed43d97d [web] use uiprops value to compile css transparently, handlig cache and reloading in debug mode
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5444
diff changeset
    43
                          'a {bgcolor: #FFFFFF; size: 1%;}')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5938
diff changeset
    44
        self.assertEqual(ps.process_resource(DATADIR, 'pouet.css'),
5466
b5af2ac0c43c [uiprops] test and fix reloading of modified css files; update c-c newcube; deprecates config.has_resource.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5445
diff changeset
    45
                          CACHEDIR)
9674
96549de9dd70 [test] use assertIn where appropriate
Julien Cristau <julien.cristau@logilab.fr>
parents: 7791
diff changeset
    46
        self.assertIn('pouet.css', ps._cache)
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    47
        self.assertFalse(ps.need_reload())
5466
b5af2ac0c43c [uiprops] test and fix reloading of modified css files; update c-c newcube; deprecates config.has_resource.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5445
diff changeset
    48
        os.utime(join(DATADIR, 'sheet1.py'), None)
9674
96549de9dd70 [test] use assertIn where appropriate
Julien Cristau <julien.cristau@logilab.fr>
parents: 7791
diff changeset
    49
        self.assertIn('pouet.css', ps._cache)
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    50
        self.assertTrue(ps.need_reload())
9674
96549de9dd70 [test] use assertIn where appropriate
Julien Cristau <julien.cristau@logilab.fr>
parents: 7791
diff changeset
    51
        self.assertIn('pouet.css', ps._cache)
5466
b5af2ac0c43c [uiprops] test and fix reloading of modified css files; update c-c newcube; deprecates config.has_resource.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5445
diff changeset
    52
        ps.reload()
9675
8aabfefc8a81 [test] use assertNotIn where appropriate
Julien Cristau <julien.cristau@logilab.fr>
parents: 9674
diff changeset
    53
        self.assertNotIn('pouet.css', ps._cache)
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    54
        self.assertFalse(ps.need_reload())
5466
b5af2ac0c43c [uiprops] test and fix reloading of modified css files; update c-c newcube; deprecates config.has_resource.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5445
diff changeset
    55
        ps.process_resource(DATADIR, 'pouet.css') # put in cache
b5af2ac0c43c [uiprops] test and fix reloading of modified css files; update c-c newcube; deprecates config.has_resource.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5445
diff changeset
    56
        os.utime(join(DATADIR, 'pouet.css'), None)
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    57
        self.assertFalse(ps.need_reload())
9675
8aabfefc8a81 [test] use assertNotIn where appropriate
Julien Cristau <julien.cristau@logilab.fr>
parents: 9674
diff changeset
    58
        self.assertNotIn('pouet.css', ps._cache)
5444
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    59
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    60
if __name__ == '__main__':
f7fdb5dd82f6 [webconfig] introduce property sheets. Use them to replace external_resources
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    61
    unittest_main()