test_favicon.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. from pathlib import Path
  2. import requests
  3. from bs4 import BeautifulSoup
  4. from nicegui import ui
  5. from .screen import PORT, Screen
  6. def assert_favicon_url_starts_with(screen: Screen, content: str):
  7. soup = BeautifulSoup(screen.selenium.page_source, 'html.parser')
  8. icon_link = soup.find("link", rel="icon")
  9. assert icon_link['href'].startswith(content)
  10. def test_default(screen: Screen):
  11. ui.label('Hello, world')
  12. screen.open('/')
  13. response = requests.get(f'http://localhost:{PORT}/favicon.ico')
  14. assert response.status_code == 200
  15. def test_emoji(screen: Screen):
  16. ui.label('Hello, world')
  17. screen.ui_run_kwargs['favicon'] = '👋'
  18. screen.open('/')
  19. response = requests.get(f'http://localhost:{PORT}/favicon.ico')
  20. assert response.status_code == 200, 'default favicon should still be available for plain FastAPI requests running in the browser'
  21. assert (Path(__file__).parent.parent / 'nicegui' / 'static' / 'favicon.ico').read_bytes() == response.content
  22. assert_favicon_url_starts_with(screen, 'data:image/svg+xml')
  23. def test_custom_file(screen: Screen):
  24. ui.label('Hello, world')
  25. screen.ui_run_kwargs['favicon'] = Path(__file__).parent.parent / 'website' / 'static' / 'logo_square.png'
  26. screen.open('/')
  27. assert_favicon_url_starts_with(screen, '/favicon.ico')
  28. response = requests.get(f'http://localhost:{PORT}/favicon.ico')
  29. assert response.status_code == 200
  30. assert screen.ui_run_kwargs['favicon'].read_bytes() == response.content