""" Test Yonyou BIP system login functionality """ import sys import logging from pathlib import Path # Add project root to Python path PROJECT_ROOT = Path(__file__).resolve().parent.parent sys.path.insert(0, str(PROJECT_ROOT)) from playwright.sync_api import sync_playwright from utils.auth import login, logout import os # Load environment variables from dotenv import load_dotenv load_dotenv(PROJECT_ROOT / ".env") # Configure browser path browser_path = os.getenv("PLAYWRIGHT_BROWSERS_PATH") if not browser_path: raise ValueError("PLAYWRIGHT_BROWSERS_PATH environment variable is required") os.environ["PLAYWRIGHT_BROWSERS_PATH"] = browser_path # Setup logging logger = logging.getLogger('bipauto.tests.login') logger.setLevel(logging.INFO) if not logger.handlers: handler = logging.StreamHandler() handler.setFormatter(logging.Formatter("[%(levelname)s] %(name)s: %(message)s")) logger.addHandler(handler) logger.propagate = False logger.info("=" * 60) logger.info("Testing Yonyou BIP Login and Logout") logger.info("=" * 60) # Display configuration information logger.info("Configuration:") logger.info(f" URL: {os.getenv('ERP_URL')}") logger.info(f" Username: {os.getenv('ERP_USERNAME')}") logger.info(f" Headless: {os.getenv('ERP_HEADLESS')}") logger.info(f" Ignore HTTPS Errors: {os.getenv('ERP_IGNORE_HTTPS_ERRORS')}") # Construct complete login URL base_url = os.getenv('ERP_URL') if not base_url: raise ValueError("ERP_URL environment variable is required") url = f"{base_url.rstrip('/')}/yonbip/resources/uap/rbac/login/main/index.html" try: # Get required environment variables username = os.getenv('ERP_USERNAME') password = os.getenv('ERP_PASSWORD') headless = os.getenv('ERP_HEADLESS', 'false').lower() in ('true', '1', 'yes') ignore_https_errors = os.getenv('ERP_IGNORE_HTTPS_ERRORS', 'true').lower() in ('true', '1', 'yes') if not username or not password: raise ValueError("ERP_USERNAME and ERP_PASSWORD environment variables are required") with sync_playwright() as p: logger.info("[1/5] Starting browser...") browser, context, page, main_frame = login( playwright=p, username=username, password=password, url=url, headless=headless, ignore_https_errors=ignore_https_errors, verbose=True ) logger.info("Login successful!") # Wait a moment to observe the page after login logger.info("[3/5] Waiting 3 seconds to observe the page after login...") import time time.sleep(3) # Test logout logger.info("[4/5] Testing logout...") logout(main_frame, verbose=True) logger.info("Logout successful!") # Wait a moment to observe the page after logout logger.info("Waiting 2 seconds to observe the page after logout...") time.sleep(2) logger.info("Login and logout test completed successfully!") # Check if auto-close browser auto_close = os.getenv("ERP_AUTO_CLOSE_BROWSER", "true").lower() in ("true", "1", "yes") if not auto_close: logger.info("Browser will stay open for 10 seconds for manual observation...") time.sleep(10) # Close browser logger.info("Closing browser session...") context.close() browser.close() except Exception as e: logger.error(f"Login/logout test failed!") logger.error(f"Error: {e}") import traceback traceback.print_exc() logger.info("=" * 60) logger.info("Test completed") logger.info("=" * 60)