issues/275/user_tool.py (117 lines of code) (raw):

import sys, os base_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) sys.path.insert(0, base_path) PROXY = False PROXY_OTP = True from utils.trace_cleaner import trace_cleaner """ The test verifies if there are no duplicates when searching for a specific room. """ import time from datetime import datetime import pytest from playwright.async_api import Page, expect, async_playwright from utils.login import sign_in from utils.email_handler import EmailHandler from utils.browser import start_browser, close_browser from utils.email_handler import get_specific_derived_email BASE_EMAIL = "testerfreelancer555@gmail.com" PASSWORD = "" ISSUE_NUMBER = "43094" SUFFIX_1 = f"{ISSUE_NUMBER}1" SUFFIX_2 = f"{ISSUE_NUMBER}2" async def create_a_new_workspace(page): await page.get_by_label("My settings").click() await page.get_by_test_id("InitialSettingsPage").get_by_label("Workspaces").get_by_text("Workspaces").click() await page.wait_for_timeout(3000) # Waiting the page to load because the loading page has two buttons which might cause an exception because none of them work try: await page.get_by_label("New workspace").click() except: await page.get_by_label("New workspace").first.click() # In case there is no workspace yet await page.get_by_test_id("WorkspacePageWithSections").get_by_text("Name").click() random_name = "1733413785" await page.get_by_role("textbox", name="Name").fill(random_name) await page.wait_for_timeout(2000) # waiting the page to load before saving the workspace await page.get_by_role("button", name="Save").click() return random_name async def create_room_in_workspace(page: Page, room_name: str, workspace_name: str): plus_icon = page.locator('button[aria-label="Start chat (Floating action)"]') await expect(plus_icon).to_be_visible() await plus_icon.click() start_chat = page.locator('div[aria-label="Start chat"]') await expect(start_chat).to_be_visible() await start_chat.click() room_button = page.locator('button[aria-label="Room"]') await expect(room_button).to_be_visible() await room_button.click() await page.locator('input[aria-label="Room name"]').fill(room_name) await page.get_by_test_id("WorkspaceNewRoomPage").get_by_text("Workspace").first.click() await page.get_by_label(workspace_name).click() await page.locator('button[tabindex="0"][data-listener="Enter"]', has_text="Create room").click() async def add_member_to_workspace(page: Page, member_email: str): members_button = page.locator('div[aria-label="Members"][role="menuitem"]') await expect(members_button).to_be_visible() await members_button.click() invite_members = page.get_by_text("Invite member") await expect(invite_members).to_be_visible() await invite_members.click() await page.locator('input[type="text"]').fill(member_email) await page.wait_for_timeout(1000) button = page.locator(f'button[aria-label="Test_2 User_2"]').nth(1) await button.click() await page.locator('button[tabindex="0"][data-listener="Enter"]').nth(0).click() await page.locator('button[tabindex="0"][data-listener="Enter"]', has_text="Invite").click() await page.wait_for_timeout(1000) back_arrow_button = page.locator('button[aria-label="Back"]') await back_arrow_button.click() async def sign_in_new_dot(page: Page, email: str, password: str): """ Sign in into the new Expensify dot. """ with EmailHandler(email, password) as email_handler: if not PROXY_OTP: email_handler.clean_inbox() # Clean inbox await page.goto("https://dev.new.expensify.com:8082") await page.get_by_test_id("username").fill(email) await page.get_by_role("button", name="Continue").click() otp = "123456" if PROXY_OTP else email_handler.read_otp_code() await page.wait_for_timeout(1000) if PROXY_OTP else False await page.get_by_test_id("validateCode").fill(otp) await page.get_by_text("Please enter the magic code").wait_for(state="hidden") @pytest.mark.asyncio async def test_duplicated_search(): trace_path = "/app/expensify/user_tool/output_browser1.zip" async with async_playwright() as playwright: proxy = {"server": "http://127.0.0.1:8080/"} if PROXY else None launch_args=[ "--ignore-certificate-errors", "--disable-web-security", "--disable-features=IsolateOrigins,site-per-process" ] playwright = await async_playwright().start() browser = await playwright.chromium.launch(slow_mo=2000, headless=True, args=launch_args, proxy=proxy) context = await browser.new_context() page = await context.new_page() await context.tracing.start(screenshots=True, snapshots=True, sources=True) try: alice_email = get_specific_derived_email(email=BASE_EMAIL, suffix=SUFFIX_1) bob_email = get_specific_derived_email(email=BASE_EMAIL, suffix=SUFFIX_2) await sign_in_new_dot(page, email=alice_email, password=PASSWORD) workspace_name = await create_a_new_workspace(page) await add_member_to_workspace(page, bob_email) await create_room_in_workspace(page, "room1", workspace_name) await create_room_in_workspace(page, "room2", workspace_name) await page.wait_for_timeout(2000) await page.get_by_label("My settings").click() await page.get_by_text("Sign out").click() await sign_in_new_dot(page, email=bob_email, password=PASSWORD) find_button = page.locator('div[aria-label="Find something..."]') await expect(find_button).to_be_visible() await find_button.click() await page.locator('input[aria-label="Name, email, or phone number"]').fill("room1") button_locator = page.locator('button[aria-label="#room1"][role="button"]') await button_locator.first.wait_for(state="visible") search_results = await page.locator('button[aria-label="#room1"][role="button"]').evaluate_all("list => list.map(element => element.textContent)") count = 0 for item in search_results: if len(item.split(workspace_name)) > 1: count += 1 assert count == 1 finally: await context.tracing.stop(path=trace_path) trace_cleaner(trace_path) await close_browser(context, page, playwright)