equal
deleted
inserted
replaced
1 from logilab.common.testlib import TestCase, mock_object |
1 """ |
|
2 :organization: Logilab |
|
3 :copyright: 2008-2009 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
|
4 :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr |
|
5 """ |
|
6 __docformat__ = "restructuredtext en" |
|
7 |
|
8 from logilab.common.testlib import TestCase |
2 |
9 |
3 import os, os.path as osp |
10 import os, os.path as osp |
4 import time |
11 import time |
5 from shutil import copy |
12 from shutil import copy |
6 |
13 |
13 try: |
20 try: |
14 from google.appengine.api import apiproxy_stub_map |
21 from google.appengine.api import apiproxy_stub_map |
15 from google.appengine.api import datastore_file_stub |
22 from google.appengine.api import datastore_file_stub |
16 from google.appengine.ext import db as gdb |
23 from google.appengine.ext import db as gdb |
17 from cubicweb.goa import db, do_monkey_patch |
24 from cubicweb.goa import db, do_monkey_patch |
18 from cubicweb.goa.dbmyams import load_schema |
|
19 import_appengine_failed = None |
25 import_appengine_failed = None |
20 except ImportError, exc: |
26 except ImportError, exc: |
21 raise |
27 # XXX necessary ? |
22 class db: |
28 class db: |
23 class Model: |
29 class Model: |
24 pass |
30 pass |
25 class DummyProperty: |
31 class DummyProperty: |
26 def __init__(self, *args, **kwargs): |
32 def __init__(self, *args, **kwargs): |
30 BlobProperty = DummyProperty |
36 BlobProperty = DummyProperty |
31 DateProperty = DummyProperty |
37 DateProperty = DummyProperty |
32 ReferenceProperty = DummyProperty |
38 ReferenceProperty = DummyProperty |
33 SelfReferenceProperty = DummyProperty |
39 SelfReferenceProperty = DummyProperty |
34 import_appengine_failed = 'cannot import appengine: %s' % exc |
40 import_appengine_failed = 'cannot import appengine: %s' % exc |
35 |
|
36 |
41 |
37 from cubicweb import CW_SOFTWARE_ROOT |
42 |
38 from cubicweb.server.utils import crypt_password |
|
39 from cubicweb.devtools.fake import FakeRequest |
43 from cubicweb.devtools.fake import FakeRequest |
40 from cubicweb.goa.goavreg import GAERegistry |
44 from cubicweb.goa.goavreg import GAERegistry |
41 from cubicweb.goa.goaconfig import GAEConfiguration |
45 from cubicweb.goa.goaconfig import GAEConfiguration |
42 from cubicweb.goa.dbinit import (create_user, create_groups, fix_entities, |
46 from cubicweb.goa.dbinit import (create_user, create_groups, fix_entities, |
43 init_persistent_schema, insert_versions) |
47 init_persistent_schema, insert_versions) |
57 config = None |
61 config = None |
58 _DS_TEMPL_FILE = 'tmpdb-template' |
62 _DS_TEMPL_FILE = 'tmpdb-template' |
59 |
63 |
60 def load_schema_hook(self, loader): |
64 def load_schema_hook(self, loader): |
61 loader.import_yams_cube_schema('data') |
65 loader.import_yams_cube_schema('data') |
62 |
66 |
63 @property |
67 @property |
64 def DS_FILE(self): |
68 def DS_FILE(self): |
65 return self.DS_TEMPL_FILE.replace('-template', '') |
69 return self.DS_TEMPL_FILE.replace('-template', '') |
66 |
70 |
67 @property |
71 @property |
68 def DS_TEMPL_FILE(self): |
72 def DS_TEMPL_FILE(self): |
69 return self._DS_TEMPL_FILE + '_'.join(sorted(cls.__name__ for cls in self.MODEL_CLASSES)) |
73 return self._DS_TEMPL_FILE + '_'.join(sorted(cls.__name__ for cls in self.MODEL_CLASSES)) |
70 |
74 |
71 def _set_ds_file(self, dsfile): |
75 def _set_ds_file(self, dsfile): |
73 apiproxy_stub_map.apiproxy = apiproxy_stub_map.APIProxyStubMap() |
77 apiproxy_stub_map.apiproxy = apiproxy_stub_map.APIProxyStubMap() |
74 # Use a fresh stub datastore. |
78 # Use a fresh stub datastore. |
75 stub = datastore_file_stub.DatastoreFileStub(self.APP_ID, dsfile, |
79 stub = datastore_file_stub.DatastoreFileStub(self.APP_ID, dsfile, |
76 dsfile+'.history') |
80 dsfile+'.history') |
77 apiproxy_stub_map.apiproxy.RegisterStub('datastore_v3', stub) |
81 apiproxy_stub_map.apiproxy.RegisterStub('datastore_v3', stub) |
78 |
82 |
79 def setUp(self): |
83 def setUp(self): |
80 if import_appengine_failed: |
84 if import_appengine_failed: |
81 self.skip(import_appengine_failed) |
85 self.skip(import_appengine_failed) |
82 # Ensure we're in UTC. |
86 # Ensure we're in UTC. |
83 os.environ['TZ'] = 'UTC' |
87 os.environ['TZ'] = 'UTC' |
89 else: |
93 else: |
90 need_ds_init = True |
94 need_ds_init = True |
91 self._set_ds_file(self.DS_TEMPL_FILE) |
95 self._set_ds_file(self.DS_TEMPL_FILE) |
92 # from google.appengine.api import mail_stub |
96 # from google.appengine.api import mail_stub |
93 # from google3.apphosting.api import urlfetch_stub |
97 # from google3.apphosting.api import urlfetch_stub |
94 # from google3.apphosting.api import user_service_stub |
98 # from google3.apphosting.api import user_service_stub |
95 # # Use a fresh stub UserService. |
99 # # Use a fresh stub UserService. |
96 # apiproxy_stub_map.apiproxy.RegisterStub( |
100 # apiproxy_stub_map.apiproxy.RegisterStub( |
97 # 'user', user_service_stub.UserServiceStub()) |
101 # 'user', user_service_stub.UserServiceStub()) |
98 os.environ['AUTH_DOMAIN'] = self.AUTH_DOMAIN |
102 os.environ['AUTH_DOMAIN'] = self.AUTH_DOMAIN |
99 os.environ['USER_EMAIL'] = self.LOGGED_IN_USER |
103 os.environ['USER_EMAIL'] = self.LOGGED_IN_USER |
150 self.session = self.login(self.LOGGED_IN_USER, 'toto') |
154 self.session = self.login(self.LOGGED_IN_USER, 'toto') |
151 else: |
155 else: |
152 req = FakeRequest(vreg=self.vreg) |
156 req = FakeRequest(vreg=self.vreg) |
153 self.session = self.session_manager.open_session(req) |
157 self.session = self.session_manager.open_session(req) |
154 self.user = self.session.user() |
158 self.user = self.session.user() |
155 |
159 |
156 def tearDown(self): |
160 def tearDown(self): |
157 self.session.close() |
161 self.session.close() |
158 |
162 |
159 def request(self): |
163 def request(self): |
160 req = FakeRequest(vreg=self.vreg) |
164 req = FakeRequest(vreg=self.vreg) |
161 req.set_connection(self.session, self.user) |
165 req.set_connection(self.session, self.user) |
162 return req |
166 return req |
163 |
167 |
164 def add_entity(self, etype, **kwargs): |
168 def add_entity(self, etype, **kwargs): |
165 cu = self.session.cursor() |
169 cu = self.session.cursor() |
166 rql = 'INSERT %s X' % etype |
170 rql = 'INSERT %s X' % etype |
167 if kwargs: |
171 if kwargs: |
168 rql += ': %s' % ', '.join('X %s %%(%s)s' % (key, key) for key in kwargs) |
172 rql += ': %s' % ', '.join('X %s %%(%s)s' % (key, key) for key in kwargs) |
175 def commit(self): |
179 def commit(self): |
176 self.session.commit() |
180 self.session.commit() |
177 |
181 |
178 def rollback(self): |
182 def rollback(self): |
179 self.session.rollback() |
183 self.session.rollback() |
180 |
184 |
181 def create_user(self, login, groups=('users',), req=None): |
185 def create_user(self, login, groups=('users',), req=None): |
182 assert not self.config['use-google-auth'] |
186 assert not self.config['use-google-auth'] |
183 user = self.add_entity('EUser', upassword=str(login), login=unicode(login)) |
187 user = self.add_entity('CWUser', upassword=str(login), login=unicode(login)) |
184 cu = self.session.cursor() |
188 cu = self.session.cursor() |
185 cu.execute('SET X in_group G WHERE X eid %%(x)s, G name IN(%s)' |
189 cu.execute('SET X in_group G WHERE X eid %%(x)s, G name IN(%s)' |
186 % ','.join(repr(g) for g in groups), |
190 % ','.join(repr(g) for g in groups), |
187 {'x': user.eid}, 'x') |
191 {'x': user.eid}, 'x') |
188 return user |
192 return user |
191 assert not self.config['use-google-auth'] |
195 assert not self.config['use-google-auth'] |
192 req = FakeRequest(vreg=self.vreg) |
196 req = FakeRequest(vreg=self.vreg) |
193 req.form['__login'] = login |
197 req.form['__login'] = login |
194 req.form['__password'] = password or login |
198 req.form['__password'] = password or login |
195 return self.session_manager.open_session(req) |
199 return self.session_manager.open_session(req) |
196 |
|