feat: initial implementation
This commit is contained in:
commit
c3cb1d7046
19 changed files with 1296 additions and 0 deletions
48
tests/test_negotiate.py
Normal file
48
tests/test_negotiate.py
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
"""Accept-header negotiation between WML and XHTML-MP."""
|
||||
from __future__ import annotations
|
||||
|
||||
import pytest
|
||||
|
||||
from smolweb.negotiate import FORMAT_HTML, FORMAT_WML, FORMAT_XHTML, negotiate
|
||||
|
||||
|
||||
class TestWildcardNeverSelectsWml:
|
||||
def test_modern_browser_accept_header_gets_html(self):
|
||||
# The exact header Firefox/Chrome send: a browser must never be
|
||||
# handed WML through the */* wildcard.
|
||||
accept = "text/html,application/xhtml+xml;q=0.9,image/webp,*/*;q=0.8"
|
||||
assert negotiate(accept) == FORMAT_HTML
|
||||
|
||||
def test_bare_wildcard_gets_html(self):
|
||||
assert negotiate("*/*") == FORMAT_HTML
|
||||
|
||||
def test_no_accept_header_gets_html(self):
|
||||
assert negotiate(None) == FORMAT_HTML
|
||||
|
||||
|
||||
class TestLiteralMatches:
|
||||
def test_wml_accept_header_gets_wml(self):
|
||||
assert negotiate("text/vnd.wap.wml") == FORMAT_WML
|
||||
|
||||
def test_xhtml_mp_accept_header_gets_xhtml(self):
|
||||
assert negotiate("application/vnd.wap.xhtml+xml") == FORMAT_XHTML
|
||||
|
||||
def test_wml_wins_when_both_present_with_higher_q(self):
|
||||
accept = "text/vnd.wap.wml;q=1.0, application/vnd.wap.xhtml+xml;q=0.5"
|
||||
assert negotiate(accept) == FORMAT_WML
|
||||
|
||||
def test_xhtml_wins_when_both_present_with_higher_q(self):
|
||||
accept = "text/vnd.wap.wml;q=0.5, application/vnd.wap.xhtml+xml;q=1.0"
|
||||
assert negotiate(accept) == FORMAT_XHTML
|
||||
|
||||
def test_unrelated_type_gets_html_fallback(self):
|
||||
assert negotiate("application/json") == FORMAT_HTML
|
||||
|
||||
|
||||
class TestFormatOverride:
|
||||
@pytest.mark.parametrize("fmt", [FORMAT_WML, FORMAT_XHTML, FORMAT_HTML])
|
||||
def test_override_wins_regardless_of_accept(self, fmt):
|
||||
assert negotiate("*/*", format_override=fmt) == fmt
|
||||
|
||||
def test_invalid_override_is_ignored(self):
|
||||
assert negotiate("text/vnd.wap.wml", format_override="bogus") == FORMAT_WML
|
||||
Loading…
Add table
Add a link
Reference in a new issue