// PostClass.Text はリンクを除去するのみでエスケープは行わない
// (TweetFormatter によって既にエスケープされた文字列が格納されているため)
- var expected = "<a class=\"quote-tweet-link\" href=\"https://twitter.com/status/status/12345\">" +
+ var expected = "<a class=\"quote-tweet-link\" href=\"https://twitter.com/kim_upsilon/status/12345\">" +
"<blockquote class=\"quote-tweet\">" +
"<p>@twitterapi hogehoge</p> — upsilon (@kim_upsilon) " + DateTime.Parse("2015/03/30 3:30:00") +
"</blockquote></a>";
var statusId = 12345L; // リンク先のステータスID
var html = "<marquee>hogehoge</marquee>"; // HTMLをそのまま出力する (エスケープしない)
- var expected = "<a class=\"quote-tweet-link\" href=\"https://twitter.com/status/status/12345\">" +
+ var expected = "<a class=\"quote-tweet-link\" href=\"https://twitter.com/twitter/status/12345\">" +
"<blockquote class=\"quote-tweet\"><marquee>hogehoge</marquee></blockquote>" +
"</a>";
- Assert.Equal(expected, TweenMain.FormatQuoteTweetHtml(statusId, html));
+ Assert.Equal(expected, TweenMain.FormatQuoteTweetHtml("twitter", statusId, html));
}
[Fact]
" (@" + WebUtility.HtmlEncode(post.ScreenName) + ") " +
WebUtility.HtmlEncode(post.CreatedAt.ToString());
- return FormatQuoteTweetHtml(post.StatusId, innerHtml);
+ return FormatQuoteTweetHtml(post.ScreenName, post.StatusId, innerHtml);
}
internal static string FormatQuoteTweetHtml(long statusId, string innerHtml)
{
- return "<a class=\"quote-tweet-link\" href=\"https://twitter.com/status/status/" + statusId + "\">" +
+ // screenName が不明な場合、とりあえず https://twitter.com/statuses/status/{statusId} にリンクする
+ return FormatQuoteTweetHtml("statuses", statusId, innerHtml);
+ }
+
+ internal static string FormatQuoteTweetHtml(string screenName, long statusId, string innerHtml)
+ {
+ return "<a class=\"quote-tweet-link\" href=\"https://twitter.com/" + WebUtility.HtmlEncode(screenName) + "/status/" + statusId + "\">" +
"<blockquote class=\"quote-tweet\">" + innerHtml + "</blockquote>" +
"</a>";
}