111 lines
3.9 KiB
Python
111 lines
3.9 KiB
Python
import pytest
|
|
import playwright.sync_api
|
|
from playwright.sync_api import expect
|
|
import uuid
|
|
import time
|
|
|
|
|
|
def test_full_user_flow(playwright: playwright.sync_api.Playwright):
|
|
"""
|
|
Test the complete user flow:
|
|
1. Navigate to localhost:5001
|
|
2. Go to signup page from login
|
|
3. Create a new user
|
|
4. Configure IMAP with specified details
|
|
5. Sync folders
|
|
6. Verify at least 3 folder cards are displayed
|
|
"""
|
|
|
|
# Launch browser
|
|
browser = playwright.chromium.launch(headless=False)
|
|
context = browser.new_context()
|
|
page = context.new_page()
|
|
|
|
try:
|
|
# Generate unique data for this test run
|
|
import random
|
|
random_number = random.randint(1000, 9999)
|
|
test_email = f"testuser{random_number}@example.com"
|
|
test_username = f"user{random_number}"
|
|
|
|
# Step 1: Navigate to localhost:5000 (login page)
|
|
page.goto("http://localhost:5001")
|
|
|
|
# Wait for page to load
|
|
page.wait_for_load_state("networkidle")
|
|
|
|
# Step 2: Navigate to signup page
|
|
# Click the "Sign up" link
|
|
page.click("a:has-text('Sign up')")
|
|
|
|
# Wait for navigation to complete
|
|
page.wait_for_load_state("networkidle")
|
|
|
|
# Step 3: Create a new user
|
|
# Fill out signup form
|
|
page.fill("input[name='first_name']", "Test")
|
|
page.fill("input[name='last_name']", "User")
|
|
page.fill("input[name='email']", test_email)
|
|
page.fill("input[name='password']", "TestPassword123")
|
|
page.fill("input[name='confirm_password']", "TestPassword123")
|
|
page.check("input[name='terms']")
|
|
|
|
# Submit signup form
|
|
page.click("button:has-text('Create Account')")
|
|
|
|
# Wait for navigation to complete
|
|
page.wait_for_load_state("networkidle")
|
|
|
|
# Step 3: Configure IMAP
|
|
# Wait for and click the "Configure IMAP" button
|
|
configure_button = page.locator("button:has-text('Configure IMAP')")
|
|
configure_button.click()
|
|
|
|
# Wait for modal to appear
|
|
page.wait_for_selector("#imap-modal")
|
|
|
|
# Fill out IMAP configuration form
|
|
page.fill("input[name='server']", "localhost")
|
|
page.fill("input[name='port']", "5143")
|
|
page.fill("input[name='username']", "user1@example.com")
|
|
page.fill("input[name='password']", "password1")
|
|
|
|
# Uncheck SSL checkbox
|
|
page.uncheck("input[name='use_ssl']")
|
|
|
|
# Submit IMAP configuration form
|
|
page.click("button[type='submit']")
|
|
|
|
# Wait for connection test to complete
|
|
page.wait_for_selector("h3:has-text('Configure IMAP Folders')")
|
|
|
|
# Step 5: Click "Save and Continue" on the final modal
|
|
page.click("button:has-text('Save and Continue')")
|
|
|
|
# Wait for modal to close and navigation to complete
|
|
page.wait_for_load_state("networkidle")
|
|
|
|
# Wait for modal to appear and folders to sync
|
|
page.wait_for_selector("#folders-list .card", timeout=10000)
|
|
|
|
# Step 6: Verify at least 3 folder cards are displayed
|
|
folder_cards = page.locator(".card.bg-base-100.shadow-xl")
|
|
|
|
# Wait for at least 3 folder cards to be visible
|
|
page.wait_for_function("document.querySelectorAll('.card.bg-base-100.shadow-xl').length >= 3", timeout=15000)
|
|
|
|
# Get the count of folder cards
|
|
count = folder_cards.count()
|
|
print(f"Found {count} folder cards")
|
|
|
|
# Verify we have at least 3 folder cards
|
|
assert count >= 3, f"Expected at least 3 folder cards, but found {count}"
|
|
|
|
# Verify each folder card has the expected structure
|
|
for i in range(min(3, count)):
|
|
card = folder_cards.nth(i)
|
|
expect(card).to_be_visible()
|
|
|
|
finally:
|
|
# Close browser
|
|
browser.close() |