server/test/unittest_multisources.py
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Wed, 27 May 2009 11:24:35 +0200
branchstable
changeset 1952 8e19c813750d
parent 1903 c30034fe074f
child 1955 6539ce84f043
permissions -rw-r--r--
fix extid handling: ensure encoded string is given, and store them as base64 (see note in native.py). Bump version to force migration on dev instances.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     1
from os.path import dirname, join, abspath
1016
26387b836099 use datetime instead of mx.DateTime
sylvain.thenault@logilab.fr
parents: 520
diff changeset
     2
from datetime import datetime, timedelta
26387b836099 use datetime instead of mx.DateTime
sylvain.thenault@logilab.fr
parents: 520
diff changeset
     3
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     4
from logilab.common.decorators import cached
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     5
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     6
from cubicweb.devtools import TestServerConfiguration, init_test_database
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     7
from cubicweb.devtools.apptest import RepositoryBasedTC
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     8
from cubicweb.devtools.repotest import do_monkey_patch, undo_monkey_patch
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
     9
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    10
class TwoSourcesConfiguration(TestServerConfiguration):
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    11
    sourcefile = 'sources_multi'
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    12
1786
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    13
519
06390418cd9a pyrorql source now ignore external eids which are themselves coming from another external source already in use by the repository (should have the same uri)
sylvain.thenault@logilab.fr
parents: 342
diff changeset
    14
class ExternalSource1Configuration(TestServerConfiguration):
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    15
    sourcefile = 'sources_extern'
1786
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    16
519
06390418cd9a pyrorql source now ignore external eids which are themselves coming from another external source already in use by the repository (should have the same uri)
sylvain.thenault@logilab.fr
parents: 342
diff changeset
    17
class ExternalSource2Configuration(TestServerConfiguration):
06390418cd9a pyrorql source now ignore external eids which are themselves coming from another external source already in use by the repository (should have the same uri)
sylvain.thenault@logilab.fr
parents: 342
diff changeset
    18
    sourcefile = 'sources_multi2'
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    19
519
06390418cd9a pyrorql source now ignore external eids which are themselves coming from another external source already in use by the repository (should have the same uri)
sylvain.thenault@logilab.fr
parents: 342
diff changeset
    20
repo2, cnx2 = init_test_database('sqlite', config=ExternalSource1Configuration('data'))
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    21
cu = cnx2.cursor()
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    22
ec1 = cu.execute('INSERT Card X: X title "C3: An external card", X wikiid "aaa"')[0][0]
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    23
cu.execute('INSERT Card X: X title "C4: Ze external card", X wikiid "zzz"')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    24
aff1 = cu.execute('INSERT Affaire X: X ref "AFFREF", X in_state S WHERE S name "pitetre"')[0][0]
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    25
cnx2.commit()
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    26
1016
26387b836099 use datetime instead of mx.DateTime
sylvain.thenault@logilab.fr
parents: 520
diff changeset
    27
MTIME = datetime.now() - timedelta(0, 10)
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    28
519
06390418cd9a pyrorql source now ignore external eids which are themselves coming from another external source already in use by the repository (should have the same uri)
sylvain.thenault@logilab.fr
parents: 342
diff changeset
    29
repo3, cnx3 = init_test_database('sqlite', config=ExternalSource2Configuration('data'))
06390418cd9a pyrorql source now ignore external eids which are themselves coming from another external source already in use by the repository (should have the same uri)
sylvain.thenault@logilab.fr
parents: 342
diff changeset
    30
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    31
# XXX, access existing connection, no pyro connection
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    32
from cubicweb.server.sources.pyrorql import PyroRQLSource
519
06390418cd9a pyrorql source now ignore external eids which are themselves coming from another external source already in use by the repository (should have the same uri)
sylvain.thenault@logilab.fr
parents: 342
diff changeset
    33
PyroRQLSource.get_connection = lambda x: x.uri == 'extern-multi' and cnx3 or cnx2
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    34
# necessary since the repository is closing its initial connections pool though
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    35
# we want to keep cnx2 valid
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    36
from cubicweb.dbapi import Connection
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    37
Connection.close = lambda x: None
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    38
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    39
class TwoSourcesTC(RepositoryBasedTC):
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    40
    repo_config = TwoSourcesConfiguration('data')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    41
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    42
    def setUp(self):
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    43
        RepositoryBasedTC.setUp(self)
1786
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    44
        self.repo.sources[-1]._query_cache.clear()
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    45
        self.repo.sources[-2]._query_cache.clear()
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    46
        # trigger discovery
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    47
        self.execute('Card X')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    48
        self.execute('Affaire X')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    49
        self.execute('State X')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    50
        self.commit()
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    51
        # don't delete external entities!
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    52
        self.maxeid = self.session.system_sql('SELECT MAX(eid) FROM entities').fetchone()[0]
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    53
        # add some entities
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    54
        self.ic1 = self.execute('INSERT Card X: X title "C1: An internal card", X wikiid "aaai"')[0][0]
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    55
        self.ic2 = self.execute('INSERT Card X: X title "C2: Ze internal card", X wikiid "zzzi"')[0][0]
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    56
        self.commit()
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    57
        do_monkey_patch()
1786
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    58
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    59
    def tearDown(self):
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    60
        RepositoryBasedTC.tearDown(self)
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    61
        undo_monkey_patch()
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    62
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    63
    def test_eid_comp(self):
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    64
        rset = self.execute('Card X WHERE X eid > 1')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    65
        self.assertEquals(len(rset), 4)
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    66
        rset = self.execute('Any X,T WHERE X title T, X eid > 1')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    67
        self.assertEquals(len(rset), 4)
1786
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    68
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    69
    def test_metainformation(self):
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    70
        rset = self.execute('Card X ORDERBY T WHERE X title T')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    71
        # 2 added to the system source, 2 added to the external source
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    72
        self.assertEquals(len(rset), 4)
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    73
        # since they are orderd by eid, we know the 3 first one is coming from the system source
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    74
        # and the others from external source
1786
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    75
        self.assertEquals(rset.get_entity(0, 0).metainformation(),
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    76
                          {'source': {'adapter': 'native', 'uri': 'system'},
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    77
                           'type': u'Card', 'extid': None})
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    78
        externent = rset.get_entity(3, 0)
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    79
        metainf = externent.metainformation()
1903
c30034fe074f [test] fix test for metainformation now includes base-url
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1840
diff changeset
    80
        self.assertEquals(metainf['source'], {'adapter': 'pyrorql', 'base-url': 'http://extern.org', 'uri': 'extern'})
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    81
        self.assertEquals(metainf['type'], 'Card')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    82
        self.assert_(metainf['extid'])
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    83
        etype = self.execute('Any ETN WHERE X is ET, ET name ETN, X eid %(x)s',
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    84
                             {'x': externent.eid}, 'x')[0][0]
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    85
        self.assertEquals(etype, 'Card')
1786
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    86
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    87
    def test_order_limit_offset(self):
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    88
        rsetbase = self.execute('Any W,X ORDERBY W,X WHERE X wikiid W')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    89
        self.assertEquals(len(rsetbase), 4)
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    90
        self.assertEquals(sorted(rsetbase.rows), rsetbase.rows)
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    91
        rset = self.execute('Any W,X ORDERBY W,X LIMIT 2 OFFSET 2 WHERE X wikiid W')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    92
        self.assertEquals(rset.rows, rsetbase.rows[2:4])
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    93
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    94
    def test_has_text(self):
519
06390418cd9a pyrorql source now ignore external eids which are themselves coming from another external source already in use by the repository (should have the same uri)
sylvain.thenault@logilab.fr
parents: 342
diff changeset
    95
        self.repo.sources_by_uri['extern'].synchronize(MTIME) # in case fti_update has been run before
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    96
        self.failUnless(self.execute('Any X WHERE X has_text "affref"'))
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    97
        self.failUnless(self.execute('Affaire X WHERE X has_text "affref"'))
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    98
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    99
    def test_anon_has_text(self):
519
06390418cd9a pyrorql source now ignore external eids which are themselves coming from another external source already in use by the repository (should have the same uri)
sylvain.thenault@logilab.fr
parents: 342
diff changeset
   100
        self.repo.sources_by_uri['extern'].synchronize(MTIME) # in case fti_update has been run before
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   101
        self.execute('INSERT Affaire X: X ref "no readable card"')[0][0]
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   102
        aff1 = self.execute('INSERT Affaire X: X ref "card"')[0][0]
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   103
        # grant read access
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   104
        self.execute('SET X owned_by U WHERE X eid %(x)s, U login "anon"', {'x': aff1}, 'x')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   105
        self.commit()
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   106
        cnx = self.login('anon')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   107
        cu = cnx.cursor()
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   108
        rset = cu.execute('Any X WHERE X has_text "card"')
519
06390418cd9a pyrorql source now ignore external eids which are themselves coming from another external source already in use by the repository (should have the same uri)
sylvain.thenault@logilab.fr
parents: 342
diff changeset
   109
        self.assertEquals(len(rset), 5, zip(rset.rows, rset.description))
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   110
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   111
    def test_synchronization(self):
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   112
        cu = cnx2.cursor()
1786
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   113
        assert cu.execute('Any X WHERE X eid %(x)s', {'x': aff1}, 'x')
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   114
        cu.execute('SET X ref "BLAH" WHERE X eid %(x)s', {'x': aff1}, 'x')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   115
        aff2 = cu.execute('INSERT Affaire X: X ref "AFFREUX", X in_state S WHERE S name "pitetre"')[0][0]
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   116
        cnx2.commit()
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   117
        try:
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   118
            # force sync
519
06390418cd9a pyrorql source now ignore external eids which are themselves coming from another external source already in use by the repository (should have the same uri)
sylvain.thenault@logilab.fr
parents: 342
diff changeset
   119
            self.repo.sources_by_uri['extern'].synchronize(MTIME)
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   120
            self.failUnless(self.execute('Any X WHERE X has_text "blah"'))
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   121
            self.failUnless(self.execute('Any X WHERE X has_text "affreux"'))
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   122
            cu.execute('DELETE Affaire X WHERE X eid %(x)s', {'x': aff2})
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   123
            cnx2.commit()
519
06390418cd9a pyrorql source now ignore external eids which are themselves coming from another external source already in use by the repository (should have the same uri)
sylvain.thenault@logilab.fr
parents: 342
diff changeset
   124
            self.repo.sources_by_uri['extern'].synchronize(MTIME)
06390418cd9a pyrorql source now ignore external eids which are themselves coming from another external source already in use by the repository (should have the same uri)
sylvain.thenault@logilab.fr
parents: 342
diff changeset
   125
            rset = self.execute('Any X WHERE X has_text "affreux"')
06390418cd9a pyrorql source now ignore external eids which are themselves coming from another external source already in use by the repository (should have the same uri)
sylvain.thenault@logilab.fr
parents: 342
diff changeset
   126
            self.failIf(rset)
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   127
        finally:
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   128
            # restore state
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   129
            cu.execute('SET X ref "AFFREF" WHERE X eid %(x)s', {'x': aff1}, 'x')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   130
            cnx2.commit()
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   131
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   132
    def test_simplifiable_var(self):
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   133
        affeid = self.execute('Affaire X WHERE X ref "AFFREF"')[0][0]
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   134
        rset = self.execute('Any X,AA,AB WHERE E eid %(x)s, E in_state X, X name AA, X modification_date AB',
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   135
                            {'x': affeid}, 'x')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   136
        self.assertEquals(len(rset), 1)
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   137
        self.assertEquals(rset[0][1], "pitetre")
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   138
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   139
    def test_simplifiable_var_2(self):
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   140
        affeid = self.execute('Affaire X WHERE X ref "AFFREF"')[0][0]
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   141
        rset = self.execute('Any E WHERE E eid %(x)s, E in_state S, NOT S name "moved"',
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   142
                            {'x': affeid, 'u': self.session.user.eid}, 'x')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   143
        self.assertEquals(len(rset), 1)
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   144
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   145
    def test_sort_func(self):
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   146
        self.execute('Affaire X ORDERBY DUMB_SORT(RF) WHERE X ref RF')
1786
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   147
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   148
    def test_sort_func_ambigous(self):
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   149
        self.execute('Any X ORDERBY DUMB_SORT(RF) WHERE X title RF')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   150
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   151
    def test_in_eid(self):
1952
8e19c813750d fix extid handling: ensure encoded string is given, and store them as base64 (see note in native.py).
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1903
diff changeset
   152
        iec1 = self.repo.extid2eid(self.repo.sources_by_uri['extern'], str(ec1),
519
06390418cd9a pyrorql source now ignore external eids which are themselves coming from another external source already in use by the repository (should have the same uri)
sylvain.thenault@logilab.fr
parents: 342
diff changeset
   153
                                   'Card', self.session)
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   154
        rset = self.execute('Any X WHERE X eid IN (%s, %s)' % (iec1, self.ic1))
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   155
        self.assertEquals(sorted(r[0] for r in rset.rows), sorted([iec1, self.ic1]))
1786
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   156
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   157
    def test_greater_eid(self):
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   158
        rset = self.execute('Any X WHERE X eid > %s' % self.maxeid)
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   159
        self.assertEquals(len(rset.rows), 2) # self.ic1 and self.ic2
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   160
        ec2 = cu.execute('INSERT Card X: X title "glup"')[0][0]
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   161
        cnx2.commit()
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   162
        # 'X eid > something' should not trigger discovery
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   163
        rset = self.execute('Any X WHERE X eid > %s' % self.maxeid)
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   164
        self.assertEquals(len(rset.rows), 2)
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   165
        # trigger discovery using another query
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   166
        crset = self.execute('Card X WHERE X title "glup"')
1786
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   167
        self.assertEquals(len(crset.rows), 1)
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   168
        rset = self.execute('Any X WHERE X eid > %s' % self.maxeid)
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   169
        self.assertEquals(len(rset.rows), 3)
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   170
        rset = self.execute('Any MAX(X)')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   171
        self.assertEquals(len(rset.rows), 1)
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   172
        self.assertEquals(rset.rows[0][0], crset[0][0])
1786
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   173
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   174
    def test_attr_unification_1(self):
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   175
        n1 = self.execute('INSERT Note X: X type "AFFREF"')[0][0]
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   176
        n2 = self.execute('INSERT Note X: X type "AFFREU"')[0][0]
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   177
        rset = self.execute('Any X,Y WHERE X is Note, Y is Affaire, X type T, Y ref T')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   178
        self.assertEquals(len(rset), 1, rset.rows)
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   179
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   180
    def test_attr_unification_2(self):
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   181
        ec2 = cu.execute('INSERT Card X: X title "AFFREF"')[0][0]
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   182
        cnx2.commit()
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   183
        try:
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   184
            c1 = self.execute('INSERT Card C: C title "AFFREF"')[0][0]
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   185
            rset = self.execute('Any X,Y WHERE X is Card, Y is Affaire, X title T, Y ref T')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   186
            self.assertEquals(len(rset), 2, rset.rows)
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   187
        finally:
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   188
            cu.execute('DELETE Card X WHERE X eid %(x)s', {'x': ec2}, 'x')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   189
            cnx2.commit()
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   190
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   191
    def test_attr_unification_neq_1(self):
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   192
        # XXX complete
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   193
        self.execute('Any X,Y WHERE X is Note, Y is Affaire, X creation_date D, Y creation_date > D')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   194
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   195
    def test_attr_unification_neq_2(self):
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   196
        # XXX complete
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   197
        self.execute('Any X,Y WHERE X is Card, Y is Affaire, X creation_date D, Y creation_date > D')
1786
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   198
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   199
    def test_union(self):
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   200
        afeids = self.execute('Affaire X')
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1016
diff changeset
   201
        ueids = self.execute('CWUser X')
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1016
diff changeset
   202
        rset = self.execute('(Any X WHERE X is Affaire) UNION (Any X WHERE X is CWUser)')
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   203
        self.assertEquals(sorted(r[0] for r in rset.rows),
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   204
                          sorted(r[0] for r in afeids + ueids))
1786
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   205
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   206
    def test_subquery1(self):
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   207
        rsetbase = self.execute('Any W,X WITH W,X BEING (Any W,X ORDERBY W,X WHERE X wikiid W)')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   208
        self.assertEquals(len(rsetbase), 4)
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   209
        self.assertEquals(sorted(rsetbase.rows), rsetbase.rows)
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   210
        rset = self.execute('Any W,X LIMIT 2 OFFSET 2 WITH W,X BEING (Any W,X ORDERBY W,X WHERE X wikiid W)')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   211
        self.assertEquals(rset.rows, rsetbase.rows[2:4])
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   212
        rset = self.execute('Any W,X ORDERBY W,X LIMIT 2 OFFSET 2 WITH W,X BEING (Any W,X WHERE X wikiid W)')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   213
        self.assertEquals(rset.rows, rsetbase.rows[2:4])
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   214
        rset = self.execute('Any W,X WITH W,X BEING (Any W,X ORDERBY W,X LIMIT 2 OFFSET 2 WHERE X wikiid W)')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   215
        self.assertEquals(rset.rows, rsetbase.rows[2:4])
1786
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   216
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   217
    def test_subquery2(self):
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   218
        affeid = self.execute('Affaire X WHERE X ref "AFFREF"')[0][0]
1786
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   219
        rset = self.execute('Any X,AA,AB WITH X,AA,AB BEING (Any X,AA,AB WHERE E eid %(x)s, E in_state X, X name AA, X modification_date AB)',
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   220
                            {'x': affeid})
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   221
        self.assertEquals(len(rset), 1)
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   222
        self.assertEquals(rset[0][1], "pitetre")
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   223
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   224
    def test_not_relation(self):
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   225
        states = set(tuple(x) for x in self.execute('Any S,SN WHERE S is State, S name SN'))
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   226
        userstate = self.session.user.in_state[0]
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   227
        states.remove((userstate.eid, userstate.name))
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   228
        notstates = set(tuple(x) for x in self.execute('Any S,SN WHERE S is State, S name SN, NOT X in_state S, X eid %(x)s',
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   229
                                                       {'x': self.session.user.eid}, 'x'))
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   230
        self.assertEquals(notstates, states)
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   231
        aff1 = self.execute('Any X WHERE X is Affaire, X ref "AFFREF"')[0][0]
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   232
        aff1stateeid, aff1statename = self.execute('Any S,SN WHERE X eid %(x)s, X in_state S, S name SN', {'x': aff1}, 'x')[0]
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   233
        self.assertEquals(aff1statename, 'pitetre')
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   234
        states.add((userstate.eid, userstate.name))
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   235
        states.remove((aff1stateeid, aff1statename))
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   236
        notstates = set(tuple(x) for x in self.execute('Any S,SN WHERE S is State, S name SN, NOT X in_state S, X eid %(x)s',
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   237
                                                       {'x': aff1}, 'x'))
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   238
        self.assertSetEquals(notstates, states)
1786
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   239
1840
f4b5c15d1147 test and fix #342997: local eid used for absolute_url of external entities
sylvain.thenault@logilab.fr
parents: 1786
diff changeset
   240
    def test_absolute_url_base_url(self):
f4b5c15d1147 test and fix #342997: local eid used for absolute_url of external entities
sylvain.thenault@logilab.fr
parents: 1786
diff changeset
   241
        ceid = cu.execute('INSERT Card X: X title "without wikiid to get eid based url"')[0][0]
f4b5c15d1147 test and fix #342997: local eid used for absolute_url of external entities
sylvain.thenault@logilab.fr
parents: 1786
diff changeset
   242
        cnx2.commit()
f4b5c15d1147 test and fix #342997: local eid used for absolute_url of external entities
sylvain.thenault@logilab.fr
parents: 1786
diff changeset
   243
        lc = self.execute('Card X WHERE X title "without wikiid to get eid based url"').get_entity(0, 0)
f4b5c15d1147 test and fix #342997: local eid used for absolute_url of external entities
sylvain.thenault@logilab.fr
parents: 1786
diff changeset
   244
        self.assertEquals(lc.absolute_url(), 'http://extern.org/card/eid/%s' % ceid)
f4b5c15d1147 test and fix #342997: local eid used for absolute_url of external entities
sylvain.thenault@logilab.fr
parents: 1786
diff changeset
   245
f4b5c15d1147 test and fix #342997: local eid used for absolute_url of external entities
sylvain.thenault@logilab.fr
parents: 1786
diff changeset
   246
    def test_absolute_url_no_base_url(self):
f4b5c15d1147 test and fix #342997: local eid used for absolute_url of external entities
sylvain.thenault@logilab.fr
parents: 1786
diff changeset
   247
        cu = cnx3.cursor()
f4b5c15d1147 test and fix #342997: local eid used for absolute_url of external entities
sylvain.thenault@logilab.fr
parents: 1786
diff changeset
   248
        ceid = cu.execute('INSERT Card X: X title "without wikiid to get eid based url"')[0][0]
f4b5c15d1147 test and fix #342997: local eid used for absolute_url of external entities
sylvain.thenault@logilab.fr
parents: 1786
diff changeset
   249
        cnx3.commit()
f4b5c15d1147 test and fix #342997: local eid used for absolute_url of external entities
sylvain.thenault@logilab.fr
parents: 1786
diff changeset
   250
        lc = self.execute('Card X WHERE X title "without wikiid to get eid based url"').get_entity(0, 0)
f4b5c15d1147 test and fix #342997: local eid used for absolute_url of external entities
sylvain.thenault@logilab.fr
parents: 1786
diff changeset
   251
        self.assertEquals(lc.absolute_url(), 'http://testing.fr/cubicweb/card/eid/%s' % lc.eid)
f4b5c15d1147 test and fix #342997: local eid used for absolute_url of external entities
sylvain.thenault@logilab.fr
parents: 1786
diff changeset
   252
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   253
    def test_nonregr1(self):
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   254
        ueid = self.session.user.eid
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   255
        affaire = self.execute('Affaire X WHERE X ref "AFFREF"').get_entity(0, 0)
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   256
        self.execute('Any U WHERE U in_group G, (G name IN ("managers", "logilab") OR (X require_permission P?, P name "bla", P require_group G)), X eid %(x)s, U eid %(u)s',
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   257
                     {'x': affaire.eid, 'u': ueid})
1786
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   258
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   259
    def test_nonregr2(self):
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   260
        treid = self.session.user.latest_trinfo().eid
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   261
        rset = self.execute('Any X ORDERBY D DESC WHERE E eid %(x)s, E wf_info_for X, X modification_date D',
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   262
                            {'x': treid})
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   263
        self.assertEquals(len(rset), 1)
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   264
        self.assertEquals(rset.rows[0], [self.session.user.eid])
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   265
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   266
    def test_nonregr3(self):
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   267
        self.execute('DELETE Card X WHERE X eid %(x)s, NOT X multisource_inlined_rel Y', {'x': self.ic1})
1786
eccd1885d42e one more msplanning bug fixed...
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   268
342
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   269
if __name__ == '__main__':
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   270
    from logilab.common.testlib import unittest_main
6becc066fc00 backport unittest_multisources from cubicweb-multisources
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   271
    unittest_main()