1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
from __future__ import annotations
import json
from pygitweb.static_tests.js_runtime import JsPage
from pygitweb.static_tests.pages import MANIFEST, board_shell
def test_set_markdown_renders_and_linkifies_after_the_manifest_loads(js: JsPage) -> None:
js.route("board-ref-manifest", body=MANIFEST)
js.set_html(board_shell() + '<div id="md"></div><textarea id="note"></textarea>')
js.load("board-markdown.js")
assert js.call("board-markdown.js", "getMarkdownFromElement", None) == ""
js.run("__loaded['board-markdown.js'].setMarkdownElement(null, 'x')")
js.run("__loaded['board-markdown.js'].linkifyMarkdownElement(null)")
js.run("__loaded['board-markdown.js'].attachBoardRefAutocomplete(null)")
source = json.dumps("see #abcd @missing")
js.run(f"__loaded['board-markdown.js'].setMarkdownElement(document.getElementById('md'), {source})")
assert js.count("#md .board-ref-link") == 0
assert js.value("document.getElementById('md').dataset.boardMarkdown") == "see #abcd @missing"
js.settle("__loaded['board-context.js'].refreshBoardRefManifest()")
js.run(f"__loaded['board-markdown.js'].setMarkdownElement(document.getElementById('md'), {source})")
assert js.count("#md .board-ref-commit") == 1
assert js.count("#md .board-ref-unresolved") == 1
assert js.count("#md strong") == 0
js.run("__loaded['board-markdown.js'].setMarkdownElement(document.getElementById('md'), '**bold**')")
assert js.count("#md strong") == 1
assert "markdown-body" in js.classes("#md")
js.run("__loaded['board-markdown.js'].attachBoardRefAutocomplete(document.getElementById('note'))")
assert js.attr("#note", "data-board-ref-autocomplete") == "1"
def test_compact_preview_truncates_at_120_characters(js: JsPage) -> None:
long = "word " * 40
js.set_html(
'<div class="board-columns" data-project="demo" data-board="Tasks"></div>'
'<div class="board-card"><div class="board-card-description-preview"></div>'
'<div class="board-card-description-full"></div></div>'
)
js.load("board-markdown.js")
js.run(
"__loaded['board-markdown.js'].syncCompactDescription(document.querySelector('.board-card'), "
+ json.dumps(long)
+ ")"
)
preview = js.text(".board-card-description-preview")
assert preview.endswith("…")
assert len(preview) == 121
js.run("__loaded['board-markdown.js'].syncCompactDescription(document.querySelector('.board-card'), '')")
assert js.text(".board-card-description-preview") == ""
def test_preview_reads_plain_text_when_markdown_was_not_stored(js: JsPage) -> None:
js.set_html(
'<div class="board-card"><div class="board-card-description-preview"></div>'
'<div class="board-card-description-full">plain</div></div>'
)
js.load("board-markdown.js")
text = js.value(
"__loaded['board-markdown.js'].getMarkdownFromElement(document.querySelector('.board-card-description-full'))"
)
assert text == "plain"
js.run("__loaded['board-markdown.js'].syncCompactDescription(document.querySelector('.board-card'))")
assert js.text(".board-card-description-preview") == "plain"
def test_linkify_stops_when_the_board_has_no_project(js: JsPage) -> None:
js.route("board-ref-manifest", body=MANIFEST)
js.set_html(board_shell() + '<div id="md">see #abcd</div>')
js.load("board-markdown.js")
js.settle("__loaded['board-context.js'].refreshBoardRefManifest()")
js.set_html('<div class="board-columns"></div><div id="md">see #abcd</div>')
js.set_location("http://127.0.0.1/")
js.run("__loaded['board-markdown.js'].linkifyMarkdownElement(document.getElementById('md'))")
assert js.count(".board-ref-link") == 0
js.run("__loaded['board-markdown.js'].attachBoardRefAutocomplete(document.createElement('textarea'))")