38
38
39
39
import warehouse
40
40
41
- from warehouse import admin , config , static
41
+ from warehouse import admin , config , email , static
42
42
from warehouse .accounts import services as account_services
43
- from warehouse .accounts .interfaces import ITokenService
43
+ from warehouse .accounts .interfaces import ITokenService , IUserService
44
44
from warehouse .admin .flags import AdminFlag , AdminFlagValue
45
45
from warehouse .email import services as email_services
46
46
from warehouse .email .interfaces import IEmailSender
47
47
from warehouse .macaroons import services as macaroon_services
48
48
from warehouse .metrics import IMetricsService
49
49
from warehouse .organizations import services as organization_services
50
+ from warehouse .organizations .interfaces import IOrganizationService
50
51
51
52
from .common .db import Session
53
+ from .common .db .accounts import EmailFactory , UserFactory
52
54
53
55
54
56
def pytest_collection_modifyitems (items ):
@@ -120,14 +122,18 @@ def find_service(self, iface=None, context=None, name=""):
120
122
121
123
122
124
@pytest .fixture
123
- def pyramid_services (metrics , email_service , token_service ):
125
+ def pyramid_services (
126
+ email_service , metrics , organization_service , token_service , user_service
127
+ ):
124
128
services = _Services ()
125
129
126
130
# Register our global services.
127
- services .register_service (metrics , IMetricsService , None , name = "" )
128
131
services .register_service (email_service , IEmailSender , None , name = "" )
132
+ services .register_service (metrics , IMetricsService , None , name = "" )
133
+ services .register_service (organization_service , IOrganizationService , None , name = "" )
129
134
services .register_service (token_service , ITokenService , None , name = "password" )
130
135
services .register_service (token_service , ITokenService , None , name = "email" )
136
+ services .register_service (user_service , IUserService , None , name = "" )
131
137
132
138
return services
133
139
@@ -159,6 +165,14 @@ def pyramid_config(pyramid_request):
159
165
yield config
160
166
161
167
168
+ @pytest .fixture
169
+ def pyramid_user (pyramid_request ):
170
+ user = UserFactory .create ()
171
+ EmailFactory .create (user = user , verified = True )
172
+ pyramid_request .user = user
173
+ return user
174
+
175
+
162
176
@pytest .fixture
163
177
def cli ():
164
178
runner = click .testing .CliRunner ()
@@ -351,7 +365,7 @@ def db_request(pyramid_request, db_session):
351
365
return pyramid_request
352
366
353
367
354
- @pytest .fixture ()
368
+ @pytest .fixture
355
369
def enable_organizations (db_request ):
356
370
flag = db_request .db .query (AdminFlag ).get (
357
371
AdminFlagValue .DISABLE_ORGANIZATIONS .value
@@ -361,6 +375,40 @@ def enable_organizations(db_request):
361
375
flag .enabled = True
362
376
363
377
378
+ @pytest .fixture
379
+ def send_email (pyramid_request , monkeypatch ):
380
+ send_email_stub = pretend .stub (
381
+ delay = pretend .call_recorder (lambda * args , ** kwargs : None )
382
+ )
383
+ pyramid_request .task = pretend .call_recorder (
384
+ lambda * args , ** kwargs : send_email_stub
385
+ )
386
+ pyramid_request .
registry .
settings = {
"mail.sender" :
"[email protected] " }
387
+ monkeypatch .setattr (email , "send_email" , send_email_stub )
388
+ return send_email_stub
389
+
390
+
391
+ @pytest .fixture
392
+ def make_email_renderers (pyramid_config ):
393
+ def _make_email_renderers (
394
+ name ,
395
+ subject = "Email Subject" ,
396
+ body = "Email Body" ,
397
+ html = "Email HTML Body" ,
398
+ ):
399
+ subject_renderer = pyramid_config .testing_add_renderer (
400
+ f"email/{ name } /subject.txt"
401
+ )
402
+ subject_renderer .string_response = subject
403
+ body_renderer = pyramid_config .testing_add_renderer (f"email/{ name } /body.txt" )
404
+ body_renderer .string_response = body
405
+ html_renderer = pyramid_config .testing_add_renderer (f"email/{ name } /body.html" )
406
+ html_renderer .string_response = html
407
+ return subject_renderer , body_renderer , html_renderer
408
+
409
+ return _make_email_renderers
410
+
411
+
364
412
class _TestApp (_webtest .TestApp ):
365
413
def xmlrpc (self , path , method , * args ):
366
414
body = xmlrpc .client .dumps (args , methodname = method )
0 commit comments