Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions src/test/test_link_preview.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,20 @@ def test_page_carries_every_tag_an_unfurler_reads():
assert 'http-equiv="refresh" content="0; url=https://v2.virtualflybrain.org/org.geppetto.frontend/geppetto?id=VFB_jrchjrch"' in page


def test_page_qualifies_for_pinterest_article_rich_pin():
# Pinterest's Rich Pin validator requires og:type to be exactly "article"
# or "blog" -- "website" (what this used to send) is never eligible, so
# every VFB term page silently failed Pinterest's Rich Pin check even
# though the ordinary og:/twitter: preview worked fine everywhere else.
# og:site_name is "strongly suggested" by the same docs and was already
# present; article:section is optional but free to provide here.
page = link_preview.render_preview_html(_neuron())
tags = _tags(page)
assert tags["og:type"] == "article"
assert tags["og:site_name"] == link_preview.SITE_NAME
assert "article:section" in tags


def test_page_escapes_hostile_ontology_text():
info = _class_with_example()
info["Name"] = 'x"><script>alert(1)</script>'
Expand Down
3 changes: 2 additions & 1 deletion src/vfbquery/link_preview.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,12 +139,13 @@ def render_preview_html(info):
<title>{m['title']}</title>
<meta name="description" content="{m['description']}">
<link rel="canonical" href="{m['url']}">
<meta property="og:type" content="website">
<meta property="og:type" content="article">
<meta property="og:site_name" content="{html.escape(SITE_NAME)}">
<meta property="og:title" content="{m['title']}">
<meta property="og:description" content="{m['description']}">
<meta property="og:url" content="{m['url']}">
<meta property="og:image" content="{m['image']}">
<meta property="article:section" content="{html.escape(kind_of(info))}">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="{m['title']}">
<meta name="twitter:description" content="{m['description']}">
Expand Down
Loading