server/test/unittest_postgres.py
author Julien Cristau <julien.cristau@logilab.fr>
Sun, 22 Mar 2015 23:27:13 +0100
changeset 10446 1e6655cff5ab
parent 10439 45e18b4a7466
child 10470 374a789c8f8d
permissions -rw-r--r--
add IUserFriendlyError adapter for violation of check constraints This way we get back the same error messages we get from the python check. Related to #5154406
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10439
45e18b4a7466 [devtools] change the way we start/stop postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10328
diff changeset
     1
# copyright 2003-2015 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
8343
6bd8db130476 Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents: 7228
diff changeset
     2
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
6bd8db130476 Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents: 7228
diff changeset
     3
#
6bd8db130476 Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents: 7228
diff changeset
     4
# This file is part of CubicWeb.
6bd8db130476 Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents: 7228
diff changeset
     5
#
6bd8db130476 Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents: 7228
diff changeset
     6
# CubicWeb is free software: you can redistribute it and/or modify it under the
6bd8db130476 Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents: 7228
diff changeset
     7
# terms of the GNU Lesser General Public License as published by the Free
6bd8db130476 Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents: 7228
diff changeset
     8
# Software Foundation, either version 2.1 of the License, or (at your option)
6bd8db130476 Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents: 7228
diff changeset
     9
# any later version.
6bd8db130476 Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents: 7228
diff changeset
    10
#
6bd8db130476 Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents: 7228
diff changeset
    11
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
6bd8db130476 Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents: 7228
diff changeset
    12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
6bd8db130476 Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents: 7228
diff changeset
    13
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
6bd8db130476 Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents: 7228
diff changeset
    14
# details.
6bd8db130476 Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents: 7228
diff changeset
    15
#
6bd8db130476 Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents: 7228
diff changeset
    16
# You should have received a copy of the GNU Lesser General Public License along
6bd8db130476 Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents: 7228
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
6bd8db130476 Fix a Python 2.5 regression introduced by previous commit
David Douard <david.douard@logilab.fr>
parents: 7228
diff changeset
    18
10439
45e18b4a7466 [devtools] change the way we start/stop postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10328
diff changeset
    19
import os.path as osp
7166
dde161937d3e [time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6818
diff changeset
    20
from datetime import datetime
9585
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9499
diff changeset
    21
from threading import Thread
6206
d4c73211b0b8 [test] skip unittest_fti if we don't have the required setup...
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5877
diff changeset
    22
6818
5fa425574548 [server test] can't use skipTest method as a class method, raise appropriate exception instead
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6780
diff changeset
    23
from logilab.common.testlib import SkipTest
5fa425574548 [server test] can't use skipTest method as a class method, raise appropriate exception instead
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6780
diff changeset
    24
10446
1e6655cff5ab add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents: 10439
diff changeset
    25
from cubicweb import ValidationError
10439
45e18b4a7466 [devtools] change the way we start/stop postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10328
diff changeset
    26
from cubicweb.devtools import PostgresApptestConfiguration, startpgcluster, stoppgcluster
5768
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    27
from cubicweb.devtools.testlib import CubicWebTC
8190
2a3c1b787688 [vreg] move base registry implementation to logilab.common. Closes #1916014
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8139
diff changeset
    28
from cubicweb.predicates import is_instance
5768
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    29
from cubicweb.entities.adapters import IFTIndexableAdapter
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    30
7166
dde161937d3e [time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6818
diff changeset
    31
from unittest_querier import FixedOffset
6780
92e4c07f86c0 [server/test] raise SkipTest from setUpModule instead of setUp( unittest2 behaviour) + kill some deprecation warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6436
diff changeset
    32
10439
45e18b4a7466 [devtools] change the way we start/stop postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10328
diff changeset
    33
45e18b4a7466 [devtools] change the way we start/stop postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10328
diff changeset
    34
def setUpModule():
45e18b4a7466 [devtools] change the way we start/stop postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10328
diff changeset
    35
    startpgcluster(__file__)
45e18b4a7466 [devtools] change the way we start/stop postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10328
diff changeset
    36
45e18b4a7466 [devtools] change the way we start/stop postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10328
diff changeset
    37
45e18b4a7466 [devtools] change the way we start/stop postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10328
diff changeset
    38
def tearDownModule():
45e18b4a7466 [devtools] change the way we start/stop postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10328
diff changeset
    39
    stoppgcluster(__file__)
45e18b4a7466 [devtools] change the way we start/stop postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10328
diff changeset
    40
45e18b4a7466 [devtools] change the way we start/stop postgresql
Julien Cristau <julien.cristau@logilab.fr>
parents: 10328
diff changeset
    41
5768
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    42
class PostgresFTITC(CubicWebTC):
9499
872d16c04c79 [test] make unittest_postgres pass
Julien Cristau <julien.cristau@logilab.fr>
parents: 8694
diff changeset
    43
    configcls = PostgresApptestConfiguration
6206
d4c73211b0b8 [test] skip unittest_fti if we don't have the required setup...
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5877
diff changeset
    44
9585
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9499
diff changeset
    45
    def test_eid_range(self):
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9499
diff changeset
    46
        # concurrent allocation of eid ranges
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9499
diff changeset
    47
        source = self.session.repo.sources_by_uri['system']
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9499
diff changeset
    48
        range1 = []
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9499
diff changeset
    49
        range2 = []
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9499
diff changeset
    50
        def allocate_eid_ranges(session, target):
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9499
diff changeset
    51
            for x in xrange(1, 10):
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9499
diff changeset
    52
                eid = source.create_eid(session, count=x)
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9499
diff changeset
    53
                target.extend(range(eid-x, eid))
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9499
diff changeset
    54
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9499
diff changeset
    55
        t1 = Thread(target=lambda: allocate_eid_ranges(self.session, range1))
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9499
diff changeset
    56
        t2 = Thread(target=lambda: allocate_eid_ranges(self.session, range2))
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9499
diff changeset
    57
        t1.start()
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9499
diff changeset
    58
        t2.start()
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9499
diff changeset
    59
        t1.join()
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9499
diff changeset
    60
        t2.join()
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9499
diff changeset
    61
        self.assertEqual(range1, sorted(range1))
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9499
diff changeset
    62
        self.assertEqual(range2, sorted(range2))
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9499
diff changeset
    63
        self.assertEqual(set(), set(range1) & set(range2))
3f5b59527d31 [source/native] allow many eid creation per .create_eid call (closes #3526594)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9499
diff changeset
    64
5768
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    65
    def test_occurence_count(self):
9804
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
    66
        with self.admin_access.repo_cnx() as cnx:
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
    67
            c1 = cnx.create_entity('Card', title=u'c1',
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
    68
                                   content=u'cubicweb cubicweb cubicweb')
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
    69
            c2 = cnx.create_entity('Card', title=u'c3',
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
    70
                                   content=u'cubicweb')
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
    71
            c3 = cnx.create_entity('Card', title=u'c2',
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
    72
                                   content=u'cubicweb cubicweb')
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
    73
            cnx.commit()
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
    74
            self.assertEqual(cnx.execute('Card X ORDERBY FTIRANK(X) DESC '
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
    75
                                         'WHERE X has_text "cubicweb"').rows,
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
    76
                             [[c1.eid,], [c3.eid,], [c2.eid,]])
5768
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    77
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    78
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    79
    def test_attr_weight(self):
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    80
        class CardIFTIndexableAdapter(IFTIndexableAdapter):
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
    81
            __select__ = is_instance('Card')
5768
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    82
            attr_weight = {'title': 'A'}
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    83
        with self.temporary_appobjects(CardIFTIndexableAdapter):
9804
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
    84
            with self.admin_access.repo_cnx() as cnx:
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
    85
                c1 = cnx.create_entity('Card', title=u'c1',
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
    86
                                       content=u'cubicweb cubicweb cubicweb')
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
    87
                c2 = cnx.create_entity('Card', title=u'c2',
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
    88
                                       content=u'cubicweb cubicweb')
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
    89
                c3 = cnx.create_entity('Card', title=u'cubicweb',
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
    90
                                       content=u'autre chose')
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
    91
                cnx.commit()
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
    92
                self.assertEqual(cnx.execute('Card X ORDERBY FTIRANK(X) DESC '
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
    93
                                             'WHERE X has_text "cubicweb"').rows,
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
    94
                                 [[c3.eid,], [c1.eid,], [c2.eid,]])
5768
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    95
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    96
    def test_entity_weight(self):
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    97
        class PersonneIFTIndexableAdapter(IFTIndexableAdapter):
5877
0c7b7b76a84f [selectors] provide a new, optimized, is_instance selector that should at some point replace implements (along with the adaptable selector)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5768
diff changeset
    98
            __select__ = is_instance('Personne')
5768
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    99
            entity_weight = 2.0
1e73a466aa69 [fti] support for fti ranking: has_text query results sorted by relevance, and provides a way to control weight per entity / entity's attribute
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   100
        with self.temporary_appobjects(PersonneIFTIndexableAdapter):
9804
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
   101
            with self.admin_access.repo_cnx() as cnx:
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
   102
                c1 = cnx.create_entity('Personne', nom=u'c1', prenom=u'cubicweb')
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
   103
                c2 = cnx.create_entity('Comment', content=u'cubicweb cubicweb',
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
   104
                                       comments=c1)
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
   105
                c3 = cnx.create_entity('Comment', content=u'cubicweb cubicweb cubicweb',
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
   106
                                       comments=c1)
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
   107
                cnx.commit()
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
   108
                self.assertEqual(cnx.execute('Any X ORDERBY FTIRANK(X) DESC '
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
   109
                                             'WHERE X has_text "cubicweb"').rows,
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
   110
                                  [[c1.eid,], [c3.eid,], [c2.eid,]])
6436
275e9f402ccc [test] missing main
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   111
6780
92e4c07f86c0 [server/test] raise SkipTest from setUpModule instead of setUp( unittest2 behaviour) + kill some deprecation warnings
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6436
diff changeset
   112
7166
dde161937d3e [time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6818
diff changeset
   113
    def test_tz_datetime(self):
9804
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
   114
        with self.admin_access.repo_cnx() as cnx:
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
   115
            cnx.execute("INSERT Personne X: X nom 'bob', X tzdatenaiss %(date)s",
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
   116
                        {'date': datetime(1977, 6, 7, 2, 0, tzinfo=FixedOffset(1))})
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
   117
            datenaiss = cnx.execute("Any XD WHERE X nom 'bob', X tzdatenaiss XD")[0][0]
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
   118
            self.assertEqual(datenaiss.tzinfo, None)
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
   119
            self.assertEqual(datenaiss.utctimetuple()[:5], (1977, 6, 7, 1, 0))
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
   120
            cnx.commit()
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
   121
            cnx.execute("INSERT Personne X: X nom 'boby', X tzdatenaiss %(date)s",
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
   122
                        {'date': datetime(1977, 6, 7, 2, 0)})
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
   123
            datenaiss = cnx.execute("Any XD WHERE X nom 'boby', X tzdatenaiss XD")[0][0]
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
   124
            self.assertEqual(datenaiss.tzinfo, None)
fe9ae959da08 [tests/postgres] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9585
diff changeset
   125
            self.assertEqual(datenaiss.utctimetuple()[:5], (1977, 6, 7, 2, 0))
7166
dde161937d3e [time zone] support for TZDatetime and TZTime data type
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6818
diff changeset
   126
10446
1e6655cff5ab add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents: 10439
diff changeset
   127
    def test_constraint_validationerror(self):
1e6655cff5ab add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents: 10439
diff changeset
   128
        with self.admin_access.repo_cnx() as cnx:
1e6655cff5ab add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents: 10439
diff changeset
   129
            with cnx.allow_all_hooks_but('integrity'):
1e6655cff5ab add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents: 10439
diff changeset
   130
                with self.assertRaises(ValidationError) as cm:
1e6655cff5ab add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents: 10439
diff changeset
   131
                    cnx.execute("INSERT Note N: N type 'nogood'")
1e6655cff5ab add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents: 10439
diff changeset
   132
                self.assertEqual(cm.exception.errors,
1e6655cff5ab add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents: 10439
diff changeset
   133
                        {'type-subject': u'invalid value %(KEY-value)s, it must be one of %(KEY-choices)s'})
1e6655cff5ab add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents: 10439
diff changeset
   134
                self.assertEqual(cm.exception.msgargs,
1e6655cff5ab add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents: 10439
diff changeset
   135
                        {'type-subject-value': u'"nogood"',
1e6655cff5ab add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents: 10439
diff changeset
   136
                         'type-subject-choices': u'"todo", "a", "b", "T", "lalala"'})
1e6655cff5ab add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents: 10439
diff changeset
   137
1e6655cff5ab add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents: 10439
diff changeset
   138
10328
d7ff46d958f4 [postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9804
diff changeset
   139
class PostgresLimitSizeTC(CubicWebTC):
d7ff46d958f4 [postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9804
diff changeset
   140
    configcls = PostgresApptestConfiguration
d7ff46d958f4 [postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9804
diff changeset
   141
d7ff46d958f4 [postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9804
diff changeset
   142
    def test(self):
d7ff46d958f4 [postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9804
diff changeset
   143
        with self.admin_access.repo_cnx() as cnx:
d7ff46d958f4 [postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9804
diff changeset
   144
            def sql(string):
d7ff46d958f4 [postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9804
diff changeset
   145
                return cnx.system_sql(string).fetchone()[0]
d7ff46d958f4 [postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9804
diff changeset
   146
            yield self.assertEqual, sql("SELECT limit_size('<p>hello</p>', 'text/html', 20)"), \
d7ff46d958f4 [postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9804
diff changeset
   147
                '<p>hello</p>'
d7ff46d958f4 [postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9804
diff changeset
   148
            yield self.assertEqual, sql("SELECT limit_size('<p>hello</p>', 'text/html', 2)"), \
d7ff46d958f4 [postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9804
diff changeset
   149
                'he...'
d7ff46d958f4 [postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9804
diff changeset
   150
            yield self.assertEqual, sql("SELECT limit_size('<br/>hello', 'text/html', 2)"), \
d7ff46d958f4 [postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9804
diff changeset
   151
                'he...'
d7ff46d958f4 [postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9804
diff changeset
   152
            yield self.assertEqual, sql("SELECT limit_size('<span class=\"1\">he</span>llo', 'text/html', 2)"), \
d7ff46d958f4 [postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9804
diff changeset
   153
                'he...'
d7ff46d958f4 [postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9804
diff changeset
   154
            yield self.assertEqual, sql("SELECT limit_size('<span>a>b</span>', 'text/html', 2)"), \
d7ff46d958f4 [postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9804
diff changeset
   155
                'a>...'
d7ff46d958f4 [postgres] fix limit_size regexp to properly remove one char tags like <p>.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9804
diff changeset
   156
10446
1e6655cff5ab add IUserFriendlyError adapter for violation of check constraints
Julien Cristau <julien.cristau@logilab.fr>
parents: 10439
diff changeset
   157
6436
275e9f402ccc [test] missing main
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   158
if __name__ == '__main__':
275e9f402ccc [test] missing main
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   159
    from logilab.common.testlib import unittest_main
275e9f402ccc [test] missing main
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   160
    unittest_main()