File tree Expand file tree Collapse file tree
src/pytest_plone/fixtures Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1111from .content import get_behaviors
1212from .content import get_fti
1313from .env import generate_mo
14+ from .playwright import page_factory
15+ from .playwright import portal_factory
1416from .vocabularies import get_vocabulary
1517
1618
2426 "get_vocabulary" ,
2527 "http_request" ,
2628 "installer" ,
29+ "page_factory" ,
2730 "portal" ,
31+ "portal_factory" ,
2832 "profile_last_version" ,
2933 "setup_tool" ,
3034]
Original file line number Diff line number Diff line change 1+ from playwright .sync_api import Page
2+ from plone import api
3+ from plone .app .testing .interfaces import SITE_OWNER_NAME
4+ from plone .app .testing .interfaces import SITE_OWNER_PASSWORD
5+ from plone .app .testing .interfaces import TEST_USER_NAME
6+ from zope .component .hooks import setSite
7+
8+ import base64
9+ import pytest
10+ import transaction
11+
12+
13+ def generate_basic_authentication_header_value (username : str , password : str ) -> str :
14+ token = base64 .b64encode (f"{ username } :{ password } " .encode ()).decode ("ascii" )
15+ return f"Basic { token } "
16+
17+
18+ @pytest .fixture ()
19+ def portal_factory (acceptance , request ):
20+ def factory (roles : list , username : str = TEST_USER_NAME ):
21+ if not roles :
22+ roles = ["Member" ]
23+ portal = acceptance ["portal" ]
24+ setSite (portal )
25+ with api .env .adopt_roles (["Manager" , "Member" ]):
26+ api .user .grant_roles (
27+ username = username ,
28+ roles = roles ,
29+ )
30+ transaction .commit ()
31+
32+ def cleanup ():
33+ with api .env .adopt_roles (["Manager" , "Member" ]):
34+ api .user .revoke_roles (
35+ username = username ,
36+ roles = roles ,
37+ )
38+ transaction .commit ()
39+
40+ request .addfinalizer (cleanup )
41+ return portal
42+
43+ return factory
44+
45+
46+ @pytest .fixture ()
47+ def page_factory (new_context ):
48+ def factory (
49+ username : str = SITE_OWNER_NAME , password : str = SITE_OWNER_PASSWORD
50+ ) -> Page :
51+ context = new_context (
52+ extra_http_headers = {
53+ "Authorization" : generate_basic_authentication_header_value (
54+ username , password
55+ ),
56+ }
57+ )
58+ page = context .new_page ()
59+ return page
60+
61+ return factory
You can’t perform that action at this time.
0 commit comments