import pytest
from fasthtml.fastapp import fast_app

from myfasthtml.auth.utils import create_auth_beforeware
from myfasthtml.core.utils import quoted_str
from myfasthtml.test.testclient import MyTestClient


def test_non_protected_route():
  app, rt = fast_app()
  user = MyTestClient(app)
  
  @rt('/')
  def index(): return "Welcome"
  
  @rt('/login')
  def index(): return "Sign In"
  
  user.open("/")
  user.should_see("Welcome")


def test_all_routes_are_protected():
  beforeware = create_auth_beforeware()
  app, rt = fast_app(before=beforeware)
  user = MyTestClient(app)
  
  @rt('/')
  def index(): return "Welcome"
  
  @rt('/login')
  def index(): return "Sign In"
  
  user.open("/")
  user.should_see("Sign In")


@pytest.mark.parametrize("actual,expected", [
    ("string", '"string"'),
    ("string with 'single quotes'", '''"string with 'single quotes'"'''),
    ('string with "double quotes"', """'string with "double quotes"'"""),
    ("""string with 'single' and "double" quotes""", '''"string with 'single' and \\"double\\" quotes"'''),
    (None, "None"),
    (123, "123"),
])
def test_i_can_quote_str(actual, expected):
  assert quoted_str(actual) == expected
