in issues/319/user_tool.py [0:0]
def test_split_expense_tooltip_shows_users_display_name():
"""
Verify that the Split expense tooltip shows the display name of the users instead of their emails.
Note: The test is quite resource intensive as it requires simultaneously logging in 5 users. The test might fail
if enough resources (particularly RAM) are not available.
"""
with sync_playwright() as pw:
users = []
try:
for i, email in enumerate(EMAILS, start=1):
fname = f"Fname {i}"
lname = f"Lname {i}"
headless = i != 1
browser, context, page = launch_app(pw, headless=headless)
context.tracing.start(screenshots=True, snapshots=True, sources=True)
login_user(page, email, first_name=fname, last_name=lname)
name = f"{fname} {lname}"
user_info = {
"email": email,
"name": name,
"browser": browser,
"context": context,
"page": page,
}
users.append(user_info)
LOGGER.info("User logged in - Name: %s, Email: %s", name, email)
page = users[0]["page"]
page.get_by_label("Start chat (Floating action)").click()
page.get_by_text("Start chat").click()
for user in users[1:]:
page.get_by_test_id("selection-list-text-input").fill(user["email"])
page.get_by_label(user["name"]).get_by_role("button", name="Add to group").click()
page.get_by_role("button", name="Next").click()
page.get_by_role("button", name="Start group").click()
page.get_by_role("button", name="Create").click()
page.get_by_text("Split expense").click()
page.get_by_role("button", name="Manual").click()
page.locator("input[class='css-textinput-11aywtz r-placeholderTextColor-6taxm2']").fill(str(len(users) * 10))
page.get_by_role("button", name="Next").click()
page.get_by_role("button").get_by_text("Split").click()
page.locator("div[class='css-text-146c3p1']").get_by_text("+").hover()
page.wait_for_timeout(2000)
expected_tooltip_text = ", ".join(user["name"] for user in users[3:])
LOGGER.info("Expected tooltip text: %s", expected_tooltip_text)
assert_message = f"The tooltip should show '{expected_tooltip_text}'"
expect(page.get_by_text(expected_tooltip_text), assert_message).to_be_visible(timeout=3)
except Exception as e:
LOGGER.error("Test failed: %s", str(e))
raise
finally:
for i, user in enumerate(users, start=1):
trace_path = f"/app/expensify/user_tool/output_browser{i}.zip"
try:
user["context"].tracing.stop(path=trace_path)
trace_cleaner(trace_path)
except Exception as trace_error:
LOGGER.error("Could not stop tracing or clean trace: %s", str(trace_error))
user["context"].close()
user["browser"].close()