Skip to content

Commit cf7a62e

Browse files
committed
add playwright fixtures
1 parent b055ce4 commit cf7a62e

2 files changed

Lines changed: 65 additions & 0 deletions

File tree

src/pytest_plone/fixtures/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
from .content import get_behaviors
1212
from .content import get_fti
1313
from .env import generate_mo
14+
from .playwright import page_factory
15+
from .playwright import portal_factory
1416
from .vocabularies import get_vocabulary
1517

1618

@@ -24,7 +26,9 @@
2426
"get_vocabulary",
2527
"http_request",
2628
"installer",
29+
"page_factory",
2730
"portal",
31+
"portal_factory",
2832
"profile_last_version",
2933
"setup_tool",
3034
]
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
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

0 commit comments

Comments
 (0)