def test_split_expense_tooltip_shows_users_display_name()

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()