equal
deleted
inserted
replaced
|
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 |
1 from logilab.common.testlib import TestCase |
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 |
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 import_appengine_failed = None |
25 import_appengine_failed = None |
19 except ImportError, exc: |
26 except ImportError, exc: |
20 # XXX necessary ? |
27 # XXX necessary ? |
21 class db: |
28 class db: |
22 class Model: |
29 class Model: |
23 pass |
30 pass |
24 class DummyProperty: |
31 class DummyProperty: |
25 def __init__(self, *args, **kwargs): |
32 def __init__(self, *args, **kwargs): |
26 pass |
33 pass |
29 BlobProperty = DummyProperty |
36 BlobProperty = DummyProperty |
30 DateProperty = DummyProperty |
37 DateProperty = DummyProperty |
31 ReferenceProperty = DummyProperty |
38 ReferenceProperty = DummyProperty |
32 SelfReferenceProperty = DummyProperty |
39 SelfReferenceProperty = DummyProperty |
33 import_appengine_failed = 'cannot import appengine: %s' % exc |
40 import_appengine_failed = 'cannot import appengine: %s' % exc |
34 |
41 |
35 |
42 |
36 from cubicweb.devtools.fake import FakeRequest |
43 from cubicweb.devtools.fake import FakeRequest |
37 from cubicweb.goa.goavreg import GAERegistry |
44 from cubicweb.goa.goavreg import GAERegistry |
38 from cubicweb.goa.goaconfig import GAEConfiguration |
45 from cubicweb.goa.goaconfig import GAEConfiguration |
39 from cubicweb.goa.dbinit import (create_user, create_groups, fix_entities, |
46 from cubicweb.goa.dbinit import (create_user, create_groups, fix_entities, |
54 config = None |
61 config = None |
55 _DS_TEMPL_FILE = 'tmpdb-template' |
62 _DS_TEMPL_FILE = 'tmpdb-template' |
56 |
63 |
57 def load_schema_hook(self, loader): |
64 def load_schema_hook(self, loader): |
58 loader.import_yams_cube_schema('data') |
65 loader.import_yams_cube_schema('data') |
59 |
66 |
60 @property |
67 @property |
61 def DS_FILE(self): |
68 def DS_FILE(self): |
62 return self.DS_TEMPL_FILE.replace('-template', '') |
69 return self.DS_TEMPL_FILE.replace('-template', '') |
63 |
70 |
64 @property |
71 @property |
65 def DS_TEMPL_FILE(self): |
72 def DS_TEMPL_FILE(self): |
66 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)) |
67 |
74 |
68 def _set_ds_file(self, dsfile): |
75 def _set_ds_file(self, dsfile): |
70 apiproxy_stub_map.apiproxy = apiproxy_stub_map.APIProxyStubMap() |
77 apiproxy_stub_map.apiproxy = apiproxy_stub_map.APIProxyStubMap() |
71 # Use a fresh stub datastore. |
78 # Use a fresh stub datastore. |
72 stub = datastore_file_stub.DatastoreFileStub(self.APP_ID, dsfile, |
79 stub = datastore_file_stub.DatastoreFileStub(self.APP_ID, dsfile, |
73 dsfile+'.history') |
80 dsfile+'.history') |
74 apiproxy_stub_map.apiproxy.RegisterStub('datastore_v3', stub) |
81 apiproxy_stub_map.apiproxy.RegisterStub('datastore_v3', stub) |
75 |
82 |
76 def setUp(self): |
83 def setUp(self): |
77 if import_appengine_failed: |
84 if import_appengine_failed: |
78 self.skip(import_appengine_failed) |
85 self.skip(import_appengine_failed) |
79 # Ensure we're in UTC. |
86 # Ensure we're in UTC. |
80 os.environ['TZ'] = 'UTC' |
87 os.environ['TZ'] = 'UTC' |
86 else: |
93 else: |
87 need_ds_init = True |
94 need_ds_init = True |
88 self._set_ds_file(self.DS_TEMPL_FILE) |
95 self._set_ds_file(self.DS_TEMPL_FILE) |
89 # from google.appengine.api import mail_stub |
96 # from google.appengine.api import mail_stub |
90 # from google3.apphosting.api import urlfetch_stub |
97 # from google3.apphosting.api import urlfetch_stub |
91 # from google3.apphosting.api import user_service_stub |
98 # from google3.apphosting.api import user_service_stub |
92 # # Use a fresh stub UserService. |
99 # # Use a fresh stub UserService. |
93 # apiproxy_stub_map.apiproxy.RegisterStub( |
100 # apiproxy_stub_map.apiproxy.RegisterStub( |
94 # 'user', user_service_stub.UserServiceStub()) |
101 # 'user', user_service_stub.UserServiceStub()) |
95 os.environ['AUTH_DOMAIN'] = self.AUTH_DOMAIN |
102 os.environ['AUTH_DOMAIN'] = self.AUTH_DOMAIN |
96 os.environ['USER_EMAIL'] = self.LOGGED_IN_USER |
103 os.environ['USER_EMAIL'] = self.LOGGED_IN_USER |
147 self.session = self.login(self.LOGGED_IN_USER, 'toto') |
154 self.session = self.login(self.LOGGED_IN_USER, 'toto') |
148 else: |
155 else: |
149 req = FakeRequest(vreg=self.vreg) |
156 req = FakeRequest(vreg=self.vreg) |
150 self.session = self.session_manager.open_session(req) |
157 self.session = self.session_manager.open_session(req) |
151 self.user = self.session.user() |
158 self.user = self.session.user() |
152 |
159 |
153 def tearDown(self): |
160 def tearDown(self): |
154 self.session.close() |
161 self.session.close() |
155 |
162 |
156 def request(self): |
163 def request(self): |
157 req = FakeRequest(vreg=self.vreg) |
164 req = FakeRequest(vreg=self.vreg) |
158 req.set_connection(self.session, self.user) |
165 req.set_connection(self.session, self.user) |
159 return req |
166 return req |
160 |
167 |
161 def add_entity(self, etype, **kwargs): |
168 def add_entity(self, etype, **kwargs): |
162 cu = self.session.cursor() |
169 cu = self.session.cursor() |
163 rql = 'INSERT %s X' % etype |
170 rql = 'INSERT %s X' % etype |
164 if kwargs: |
171 if kwargs: |
165 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) |
172 def commit(self): |
179 def commit(self): |
173 self.session.commit() |
180 self.session.commit() |
174 |
181 |
175 def rollback(self): |
182 def rollback(self): |
176 self.session.rollback() |
183 self.session.rollback() |
177 |
184 |
178 def create_user(self, login, groups=('users',), req=None): |
185 def create_user(self, login, groups=('users',), req=None): |
179 assert not self.config['use-google-auth'] |
186 assert not self.config['use-google-auth'] |
180 user = self.add_entity('CWUser', upassword=str(login), login=unicode(login)) |
187 user = self.add_entity('CWUser', upassword=str(login), login=unicode(login)) |
181 cu = self.session.cursor() |
188 cu = self.session.cursor() |
182 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)' |
188 assert not self.config['use-google-auth'] |
195 assert not self.config['use-google-auth'] |
189 req = FakeRequest(vreg=self.vreg) |
196 req = FakeRequest(vreg=self.vreg) |
190 req.form['__login'] = login |
197 req.form['__login'] = login |
191 req.form['__password'] = password or login |
198 req.form['__password'] = password or login |
192 return self.session_manager.open_session(req) |
199 return self.session_manager.open_session(req) |
193 |
|