aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_webpage.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_webpage.py')
-rw-r--r--tests/test_webpage.py68
1 files changed, 34 insertions, 34 deletions
diff --git a/tests/test_webpage.py b/tests/test_webpage.py
index 97abb91..06f2af7 100644
--- a/tests/test_webpage.py
+++ b/tests/test_webpage.py
@@ -9,51 +9,51 @@ from claude_logbook import webpage
PAYLOAD_RE = re.compile(
r'<script id="payload" type="application/json">(.*?)</script>', re.S)
-REGISTRO = {"id": "abc", "p": "/proj", "u": 1, "c": [{"r": "u", "x": "hola"}]}
+LOG_NAME = {"id": "abc", "p": "/proj", "u": 1, "c": [{"r": "u", "x": "hola"}]}
class TestPayload(unittest.TestCase):
- def test_escapa_el_cierre_de_etiqueta(self):
+ def test_escapes_the_closing_tag(self):
raw = webpage.encode_payload({"s": [{"x": "mirá este </script> de acá"}]})
self.assertNotIn("</", raw)
self.assertEqual(json.loads(raw)["s"][0]["x"], "mirá este </script> de acá")
- def test_no_escapa_a_ascii(self):
+ def test_does_not_escape_to_ascii(self):
self.assertIn("ñ", webpage.encode_payload({"s": [{"x": "año"}]}))
- def test_separa_sesiones_de_memorias(self):
- payload = webpage.build_payload([REGISTRO], [{"name": "algo"}])
- self.assertEqual(payload["s"], [REGISTRO])
+ def test_separates_sessions_from_memories(self):
+ payload = webpage.build_payload([LOG_NAME], [{"name": "algo"}])
+ self.assertEqual(payload["s"], [LOG_NAME])
self.assertEqual(payload["m"], [{"name": "algo"}])
- def test_sin_memorias_igual_trae_la_clave(self):
- self.assertEqual(webpage.build_payload([REGISTRO])["m"], [])
+ def test_no_memories_still_has_the_key(self):
+ self.assertEqual(webpage.build_payload([LOG_NAME])["m"], [])
class TestRender(unittest.TestCase):
- def test_reemplaza_el_marcador(self):
- html = webpage.render([REGISTRO], template="<b>__DATA__</b>")
+ def test_replaces_the_marker(self):
+ html = webpage.render([LOG_NAME], template="<b>__DATA__</b>")
self.assertNotIn("__DATA__", html)
self.assertIn('"id":"abc"', html)
- def test_falla_si_el_template_no_tiene_marcador(self):
+ def test_fails_if_the_template_has_no_marker(self):
with self.assertRaises(webpage.TemplateError):
- webpage.render([REGISTRO], template="<b>sin marcador</b>")
+ webpage.render([LOG_NAME], template="<b>sin marcador</b>")
- def test_falla_si_el_marcador_esta_repetido(self):
+ def test_fails_if_the_marker_is_repeated(self):
with self.assertRaises(webpage.TemplateError):
- webpage.render([REGISTRO], template="__DATA__ y __DATA__")
-
- def test_una_transcripcion_con_html_no_corta_el_script(self):
- # El caso que motiva el escape: una sesión donde se habló de este mismo
- # generador tiene "</script>" y "__DATA__" adentro del texto.
- peligrosa = dict(REGISTRO, c=[{"r": "u", "x": "poné </script><img> y __DATA__"}])
- html = webpage.render([peligrosa])
-
- bloques = PAYLOAD_RE.findall(html)
- self.assertEqual(len(bloques), 1)
- vuelta = json.loads(bloques[0])
- self.assertEqual(vuelta["s"][0]["c"][0]["x"],
+ webpage.render([LOG_NAME], template="__DATA__ y __DATA__")
+
+ def test_transcript_with_html_does_not_cut_the_script(self):
+ # The case that motivates the escape: a session that talked about this very
+ # generator has "</script>" and "__DATA__" inside the text.
+ dangerous = dict(LOG_NAME, c=[{"r": "u", "x": "poné </script><img> y __DATA__"}])
+ html = webpage.render([dangerous])
+
+ blocks = PAYLOAD_RE.findall(html)
+ self.assertEqual(len(blocks), 1)
+ round_trip = json.loads(blocks[0])
+ self.assertEqual(round_trip["s"][0]["c"][0]["x"],
"poné </script><img> y __DATA__")
@@ -61,28 +61,28 @@ class TestTemplate(unittest.TestCase):
def setUp(self):
self.html = webpage.template_text()
- def test_el_template_del_paquete_tiene_un_solo_marcador(self):
+ def test_packaged_template_has_a_single_marker(self):
self.assertEqual(self.html.count(webpage.MARKER), 1)
- def test_es_un_documento_completo(self):
+ def test_is_a_complete_document(self):
# Sin doctype ni charset, un file:// se abre en quirks mode y con la
- # codificación del sistema: los acentos salen rotos.
+ # system encoding: accents come out broken.
self.assertTrue(self.html.lstrip().startswith("<!doctype html>"))
self.assertIn('<meta charset="utf-8">', self.html)
self.assertIn('name="viewport"', self.html)
self.assertTrue(self.html.rstrip().endswith("</html>"))
- def test_no_pide_nada_por_red(self):
+ def test_makes_no_network_requests(self):
for atributo in ("src=\"http", "href=\"http", "@import"):
self.assertNotIn(atributo, self.html)
- def test_se_puede_pasar_otro_template(self):
+ def test_another_template_can_be_passed(self):
with tempfile.NamedTemporaryFile("w", suffix=".html", delete=False,
encoding="utf-8") as f:
f.write("propio __DATA__")
- ruta = f.name
- self.addCleanup(os.unlink, ruta)
- self.assertTrue(webpage.template_text(ruta).startswith("propio"))
+ path_str = f.name
+ self.addCleanup(os.unlink, path_str)
+ self.assertTrue(webpage.template_text(path_str).startswith("propio"))
class TestWrite(unittest.TestCase):
@@ -90,7 +90,7 @@ class TestWrite(unittest.TestCase):
with tempfile.TemporaryDirectory() as d:
out = os.path.join(d, "s.html")
stats = webpage.write(
- [REGISTRO, dict(REGISTRO, id="def", p="/otro", u=2)], out)
+ [LOG_NAME, dict(LOG_NAME, id="def", p="/otro", u=2)], out)
self.assertEqual(stats, {"sesiones": 2, "proyectos": 2,
"mensajes": 3, "bloques": 2,
"memorias": 0})