summaryrefslogtreecommitdiff
path: root/test/web/rich_media/parsers/twitter_card_test.exs
blob: 219f005a2b9d7b54cdc1c53f60630385912df983 (plain)
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# Pleroma: A lightweight social networking server
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only

defmodule Pleroma.Web.RichMedia.Parsers.TwitterCardTest do
  use ExUnit.Case, async: true
  alias Pleroma.Web.RichMedia.Parsers.TwitterCard

  test "returns error when html not contains twitter card" do
    assert TwitterCard.parse([{"html", [], [{"head", [], []}, {"body", [], []}]}], %{}) == %{}
  end

  test "parses twitter card with only name attributes" do
    html =
      File.read!("test/fixtures/nypd-facial-recognition-children-teenagers3.html")
      |> Floki.parse_document!()

    assert TwitterCard.parse(html, %{}) ==
             %{
               "app:id:googleplay" => "com.nytimes.android",
               "app:name:googleplay" => "NYTimes",
               "app:url:googleplay" => "nytimes://reader/id/100000006583622",
               "site" => nil,
               "description" =>
                 "With little oversight, the N.Y.P.D. has been using powerful surveillance technology on photos of children and teenagers.",
               "image" =>
                 "https://static01.nyt.com/images/2019/08/01/nyregion/01nypd-juveniles-promo/01nypd-juveniles-promo-facebookJumbo.jpg",
               "type" => "article",
               "url" =>
                 "https://www.nytimes.com/2019/08/01/nyregion/nypd-facial-recognition-children-teenagers.html",
               "title" =>
                 "She Was Arrested at 14. Then Her Photo Went to a Facial Recognition Database."
             }
  end

  test "parses twitter card with only property attributes" do
    html =
      File.read!("test/fixtures/nypd-facial-recognition-children-teenagers2.html")
      |> Floki.parse_document!()

    assert TwitterCard.parse(html, %{}) ==
             %{
               "card" => "summary_large_image",
               "description" =>
                 "With little oversight, the N.Y.P.D. has been using powerful surveillance technology on photos of children and teenagers.",
               "image" =>
                 "https://static01.nyt.com/images/2019/08/01/nyregion/01nypd-juveniles-promo/01nypd-juveniles-promo-videoSixteenByNineJumbo1600.jpg",
               "image:alt" => "",
               "title" =>
                 "She Was Arrested at 14. Then Her Photo Went to a Facial Recognition Database.",
               "url" =>
                 "https://www.nytimes.com/2019/08/01/nyregion/nypd-facial-recognition-children-teenagers.html",
               "type" => "article"
             }
  end

  test "parses twitter card with name & property attributes" do
    html =
      File.read!("test/fixtures/nypd-facial-recognition-children-teenagers.html")
      |> Floki.parse_document!()

    assert TwitterCard.parse(html, %{}) ==
             %{
               "app:id:googleplay" => "com.nytimes.android",
               "app:name:googleplay" => "NYTimes",
               "app:url:googleplay" => "nytimes://reader/id/100000006583622",
               "card" => "summary_large_image",
               "description" =>
                 "With little oversight, the N.Y.P.D. has been using powerful surveillance technology on photos of children and teenagers.",
               "image" =>
                 "https://static01.nyt.com/images/2019/08/01/nyregion/01nypd-juveniles-promo/01nypd-juveniles-promo-videoSixteenByNineJumbo1600.jpg",
               "image:alt" => "",
               "site" => nil,
               "title" =>
                 "She Was Arrested at 14. Then Her Photo Went to a Facial Recognition Database.",
               "url" =>
                 "https://www.nytimes.com/2019/08/01/nyregion/nypd-facial-recognition-children-teenagers.html",
               "type" => "article"
             }
  end

  test "respect only first title tag on the page" do
    image_path =
      "https://assets.atlasobscura.com/media/W1siZiIsInVwbG9hZHMvYXNzZXRzLzkwYzgyMzI4LThlMDUtNGRiNS05MDg3LTUzMGUxZTM5N2RmMmVkOTM5ZDM4MGM4OTIx" <>
        "YTQ5MF9EQVIgZXhodW1hdGlvbiBvZiBNYXJnYXJldCBDb3JiaW4gZ3JhdmUgMTkyNi5qcGciXSxbInAiLCJjb252ZXJ0IiwiIl0sWyJwIiwiY29udmVydCIsIi1xdWFsaXR5IDgxIC1hdXRvLW9" <>
        "yaWVudCJdLFsicCIsInRodW1iIiwiNjAweD4iXV0/DAR%20exhumation%20of%20Margaret%20Corbin%20grave%201926.jpg"

    html =
      File.read!("test/fixtures/margaret-corbin-grave-west-point.html") |> Floki.parse_document!()

    assert TwitterCard.parse(html, %{}) ==
             %{
               "site" => "@atlasobscura",
               "title" => "The Missing Grave of Margaret Corbin, Revolutionary War Veteran",
               "card" => "summary_large_image",
               "image" => image_path,
               "description" =>
                 "She's the only woman veteran honored with a monument at West Point. But where was she buried?",
               "site_name" => "Atlas Obscura",
               "type" => "article",
               "url" => "http://www.atlasobscura.com/articles/margaret-corbin-grave-west-point"
             }
  end

  test "takes first founded title in html head if there is html markup error" do
    html =
      File.read!("test/fixtures/nypd-facial-recognition-children-teenagers4.html")
      |> Floki.parse_document!()

    assert TwitterCard.parse(html, %{}) ==
             %{
               "site" => nil,
               "title" =>
                 "She Was Arrested at 14. Then Her Photo Went to a Facial Recognition Database.",
               "app:id:googleplay" => "com.nytimes.android",
               "app:name:googleplay" => "NYTimes",
               "app:url:googleplay" => "nytimes://reader/id/100000006583622",
               "description" =>
                 "With little oversight, the N.Y.P.D. has been using powerful surveillance technology on photos of children and teenagers.",
               "image" =>
                 "https://static01.nyt.com/images/2019/08/01/nyregion/01nypd-juveniles-promo/01nypd-juveniles-promo-facebookJumbo.jpg",
               "type" => "article",
               "url" =>
                 "https://www.nytimes.com/2019/08/01/nyregion/nypd-facial-recognition-children-teenagers.html"
             }
  end
end