artifacts: allow unseparated note artifacts
This is needed for longform events. Right now we treat unseparated note artifacts as a list of blocks, but we will likely need to render these blocks into lists of attributed texts with image blocks inbetween.
This commit is contained in:
@@ -20,7 +20,7 @@ final class InvoiceTests: XCTestCase {
|
||||
|
||||
func testParseAnyAmountInvoice() throws {
|
||||
let invstr = "LNBC1P3MR5UJSP5G7SA48YD4JWTTPCHWMY4QYN4UWZQCJQ8NMWKD6QE3HCRVYTDLH9SPP57YM9TSA9NN4M4XU59XMJCXKR7YDV29DDP6LVQUT46ZW6CU3KE9GQDQ9V9H8JXQ8P3MYLZJCQPJRZJQF60PZDVNGGQWQDNERZSQN35L8CVQ3QG2Z5NSZYD0D3Q0JW2TL6VUZA7FYQQWKGQQYQQQQLGQQQQXJQQ9Q9QXPQYSGQ39EM4QJMQFKZGJXZVGL7QJMYNSWA8PGDTAGXXRG5Z92M7VLCGKQK2L2THDF8LM0AUKAURH7FVAWDLRNMVF38W4EYJDNVN9V4Z9CRS5CQCV465C"
|
||||
let parsed = parse_mentions(content: invstr, tags: [])
|
||||
let parsed = parse_mentions(content: invstr, tags: []).blocks
|
||||
|
||||
XCTAssertNotNil(parsed)
|
||||
XCTAssertEqual(parsed.count, 1)
|
||||
@@ -38,7 +38,7 @@ final class InvoiceTests: XCTestCase {
|
||||
let invstr = """
|
||||
LNBC1P3MR5UJSP5G7SA48YD4JWTTPCHWMY4QYN4UWZQCJQ8NMWKD6QE3HCRVYTDLH9SPP57YM9TSA9NN4M4XU59XMJCXKR7YDV29DDP6LVQUT46ZW6CU3KE9GQDQ9V9H8JXQ8P3MYLZJCQPJRZJQF60PZDVNGGQWQDNERZSQN35L8CVQ3QG2Z5NSZYD0D3Q0JW2TL6VUZA7FYQQWKGQQYQQQQLGQQQQXJQQ9Q9QXPQYSGQ39EM4QJMQFKZGJXZVGL7QJMYNSWA8PGDTAGXXRG5Z92M7VLCGKQK2L2THDF8LM0AUKAURH7FVAWDLRNMVF38W4EYJDNVN9V4Z9CRS5CQCV465C hi there
|
||||
"""
|
||||
let parsed = parse_mentions(content: invstr, tags: [])
|
||||
let parsed = parse_mentions(content: invstr, tags: []).blocks
|
||||
|
||||
XCTAssertNotNil(parsed)
|
||||
XCTAssertEqual(parsed.count, 2)
|
||||
@@ -54,7 +54,7 @@ LNBC1P3MR5UJSP5G7SA48YD4JWTTPCHWMY4QYN4UWZQCJQ8NMWKD6QE3HCRVYTDLH9SPP57YM9TSA9NN
|
||||
|
||||
func testParseInvoiceUpper() throws {
|
||||
let invstr = "LNBC100N1P357SL0SP5T9N56WDZTUN39LGDQLR30XQWKSG3K69Q4Q2RKR52APLUJW0ESN0QPP5MRQGLJK62Z20Q4NVGR6LZCYN6FHYLZCCWDVU4K77APG3ZMRKUJJQDPZW35XJUEQD9EJQCFQV3JHXCMJD9C8G6T0DCXQYJW5QCQPJRZJQT56H4GVP5YX36U2UZQA6QWCSK3E2DUUNFXPPZJ9VHYPC3WFE2WSWZ607UQQ3XQQQSQQQQQQQQQQQLQQYG9QYYSGQAGX5H20AEULJ3GDWX3KXS8U9F4MCAKDKWUAKASAMM9562FFYR9EN8YG20LG0YGNR9ZPWP68524KMDA0T5XP2WYTEX35PU8HAPYJAJXQPSQL29R"
|
||||
let parsed = parse_mentions(content: invstr, tags: [])
|
||||
let parsed = parse_mentions(content: invstr, tags: []).blocks
|
||||
|
||||
XCTAssertNotNil(parsed)
|
||||
XCTAssertEqual(parsed.count, 1)
|
||||
@@ -70,7 +70,7 @@ LNBC1P3MR5UJSP5G7SA48YD4JWTTPCHWMY4QYN4UWZQCJQ8NMWKD6QE3HCRVYTDLH9SPP57YM9TSA9NN
|
||||
|
||||
func testParseInvoiceWithPrefix() throws {
|
||||
let invstr = "lightning:lnbc100n1p357sl0sp5t9n56wdztun39lgdqlr30xqwksg3k69q4q2rkr52aplujw0esn0qpp5mrqgljk62z20q4nvgr6lzcyn6fhylzccwdvu4k77apg3zmrkujjqdpzw35xjueqd9ejqcfqv3jhxcmjd9c8g6t0dcxqyjw5qcqpjrzjqt56h4gvp5yx36u2uzqa6qwcsk3e2duunfxppzj9vhypc3wfe2wswz607uqq3xqqqsqqqqqqqqqqqlqqyg9qyysgqagx5h20aeulj3gdwx3kxs8u9f4mcakdkwuakasamm9562ffyr9en8yg20lg0ygnr9zpwp68524kmda0t5xp2wytex35pu8hapyjajxqpsql29r"
|
||||
let parsed = parse_mentions(content: invstr, tags: [])
|
||||
let parsed = parse_mentions(content: invstr, tags: []).blocks
|
||||
|
||||
XCTAssertNotNil(parsed)
|
||||
XCTAssertEqual(parsed.count, 1)
|
||||
@@ -79,7 +79,7 @@ LNBC1P3MR5UJSP5G7SA48YD4JWTTPCHWMY4QYN4UWZQCJQ8NMWKD6QE3HCRVYTDLH9SPP57YM9TSA9NN
|
||||
|
||||
func testParseInvoiceWithPrefixCapitalized() throws {
|
||||
let invstr = "LIGHTNING:LNBC100N1P357SL0SP5T9N56WDZTUN39LGDQLR30XQWKSG3K69Q4Q2RKR52APLUJW0ESN0QPP5MRQGLJK62Z20Q4NVGR6LZCYN6FHYLZCCWDVU4K77APG3ZMRKUJJQDPZW35XJUEQD9EJQCFQV3JHXCMJD9C8G6T0DCXQYJW5QCQPJRZJQT56H4GVP5YX36U2UZQA6QWCSK3E2DUUNFXPPZJ9VHYPC3WFE2WSWZ607UQQ3XQQQSQQQQQQQQQQQLQQYG9QYYSGQAGX5H20AEULJ3GDWX3KXS8U9F4MCAKDKWUAKASAMM9562FFYR9EN8YG20LG0YGNR9ZPWP68524KMDA0T5XP2WYTEX35PU8HAPYJAJXQPSQL29R"
|
||||
let parsed = parse_mentions(content: invstr, tags: [])
|
||||
let parsed = parse_mentions(content: invstr, tags: []).blocks
|
||||
|
||||
XCTAssertNotNil(parsed)
|
||||
XCTAssertEqual(parsed.count, 1)
|
||||
@@ -88,7 +88,7 @@ LNBC1P3MR5UJSP5G7SA48YD4JWTTPCHWMY4QYN4UWZQCJQ8NMWKD6QE3HCRVYTDLH9SPP57YM9TSA9NN
|
||||
|
||||
func testParseInvoice() throws {
|
||||
let invstr = "lnbc100n1p357sl0sp5t9n56wdztun39lgdqlr30xqwksg3k69q4q2rkr52aplujw0esn0qpp5mrqgljk62z20q4nvgr6lzcyn6fhylzccwdvu4k77apg3zmrkujjqdpzw35xjueqd9ejqcfqv3jhxcmjd9c8g6t0dcxqyjw5qcqpjrzjqt56h4gvp5yx36u2uzqa6qwcsk3e2duunfxppzj9vhypc3wfe2wswz607uqq3xqqqsqqqqqqqqqqqlqqyg9qyysgqagx5h20aeulj3gdwx3kxs8u9f4mcakdkwuakasamm9562ffyr9en8yg20lg0ygnr9zpwp68524kmda0t5xp2wytex35pu8hapyjajxqpsql29r"
|
||||
let parsed = parse_mentions(content: invstr, tags: [])
|
||||
let parsed = parse_mentions(content: invstr, tags: []).blocks
|
||||
|
||||
XCTAssertNotNil(parsed)
|
||||
XCTAssertEqual(parsed.count, 1)
|
||||
|
||||
@@ -33,6 +33,18 @@ class MarkdownTests: XCTestCase {
|
||||
let expected = try AttributedString(markdown: "prologue [damus.io](https://damus.io) epilogue", options: md_opts)
|
||||
XCTAssertEqual(md, expected)
|
||||
}
|
||||
|
||||
func test_longform_rendering() throws {
|
||||
let st = test_damus_state()
|
||||
let artifacts = render_note_content(ev: test_longform_event.event, profiles: st.profiles, privkey: st.keypair.privkey)
|
||||
|
||||
switch artifacts {
|
||||
case .separated:
|
||||
XCTAssert(false)
|
||||
case .parts(let parts):
|
||||
XCTAssertEqual(parts.parts.count, 1)
|
||||
}
|
||||
}
|
||||
|
||||
func test_convert_links() throws {
|
||||
let helper = Markdown()
|
||||
|
||||
@@ -19,7 +19,7 @@ final class NIP19Tests: XCTestCase {
|
||||
}
|
||||
|
||||
func test_parse_nprofile() throws {
|
||||
let res = parse_mentions(content: "nostr:nprofile1qqsrhuxx8l9ex335q7he0f09aej04zpazpl0ne2cgukyawd24mayt8gpp4mhxue69uhhytnc9e3k7mgpz4mhxue69uhkg6nzv9ejuumpv34kytnrdaksjlyr9p", tags: [])
|
||||
let res = parse_mentions(content: "nostr:nprofile1qqsrhuxx8l9ex335q7he0f09aej04zpazpl0ne2cgukyawd24mayt8gpp4mhxue69uhhytnc9e3k7mgpz4mhxue69uhkg6nzv9ejuumpv34kytnrdaksjlyr9p", tags: []).blocks
|
||||
XCTAssertEqual(res.count, 1)
|
||||
let expected_ref = ReferencedId(ref_id: "3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d", relay_id: "wss://r.x.com", key: "p")
|
||||
let expected_mention = Mention(index: nil, type: .pubkey, ref: expected_ref)
|
||||
@@ -27,7 +27,7 @@ final class NIP19Tests: XCTestCase {
|
||||
}
|
||||
|
||||
func test_parse_npub() throws {
|
||||
let res = parse_mentions(content: "nostr:npub10elfcs4fr0l0r8af98jlmgdh9c8tcxjvz9qkw038js35mp4dma8qzvjptg ", tags: [])
|
||||
let res = parse_mentions(content: "nostr:npub10elfcs4fr0l0r8af98jlmgdh9c8tcxjvz9qkw038js35mp4dma8qzvjptg ", tags: []).blocks
|
||||
XCTAssertEqual(res.count, 2)
|
||||
let expected_ref = ReferencedId(ref_id: "7e7e9c42a91bfef19fa929e5fda1b72e0ebc1a4c1141673e2794234d86addf4e", relay_id: nil, key: "p")
|
||||
let expected_mention = Mention(index: nil, type: .pubkey, ref: expected_ref)
|
||||
@@ -35,7 +35,7 @@ final class NIP19Tests: XCTestCase {
|
||||
}
|
||||
|
||||
func test_parse_note() throws {
|
||||
let res = parse_mentions(content: " nostr:note1s4p70596lv50x0zftuses32t6ck8x6wgd4edwacyetfxwns2jtysux7vep", tags: [])
|
||||
let res = parse_mentions(content: " nostr:note1s4p70596lv50x0zftuses32t6ck8x6wgd4edwacyetfxwns2jtysux7vep", tags: []).blocks
|
||||
XCTAssertEqual(res.count, 2)
|
||||
let expected_ref = ReferencedId(ref_id: "8543e7d0bafb28f33c495f2198454bd62c7369c86d72d77704cad2674e0a92c9", relay_id: nil, key: "e")
|
||||
let expected_mention = Mention(index: nil, type: .event, ref: expected_ref)
|
||||
@@ -43,7 +43,7 @@ final class NIP19Tests: XCTestCase {
|
||||
}
|
||||
|
||||
func test_mention_with_adjacent() throws {
|
||||
let res = parse_mentions(content: " nostr:note1s4p70596lv50x0zftuses32t6ck8x6wgd4edwacyetfxwns2jtysux7vep?", tags: [])
|
||||
let res = parse_mentions(content: " nostr:note1s4p70596lv50x0zftuses32t6ck8x6wgd4edwacyetfxwns2jtysux7vep?", tags: []).blocks
|
||||
XCTAssertEqual(res.count, 3)
|
||||
let expected_ref = ReferencedId(ref_id: "8543e7d0bafb28f33c495f2198454bd62c7369c86d72d77704cad2674e0a92c9", relay_id: nil, key: "e")
|
||||
let expected_mention = Mention(index: nil, type: .event, ref: expected_ref)
|
||||
|
||||
@@ -21,7 +21,7 @@ class ReplyTests: XCTestCase {
|
||||
func testMentionIsntReply() throws {
|
||||
let content = "this is #[0] a mention"
|
||||
let tags = [["e", "event_id"]]
|
||||
let blocks = parse_mentions(content: content, tags: tags)
|
||||
let blocks = parse_mentions(content: content, tags: tags).blocks
|
||||
let event_refs = interpret_event_refs(blocks: blocks, tags: tags)
|
||||
|
||||
XCTAssertEqual(event_refs.count, 1)
|
||||
@@ -96,7 +96,7 @@ class ReplyTests: XCTestCase {
|
||||
func testRootReplyWithMention() throws {
|
||||
let content = "this is #[1] a mention"
|
||||
let tags = [["e", "thread_id"], ["e", "mentioned_id"]]
|
||||
let blocks = parse_mentions(content: content, tags: tags)
|
||||
let blocks = parse_mentions(content: content, tags: tags).blocks
|
||||
let event_refs = interpret_event_refs(blocks: blocks, tags: tags)
|
||||
|
||||
XCTAssertEqual(event_refs.count, 2)
|
||||
@@ -114,7 +114,7 @@ class ReplyTests: XCTestCase {
|
||||
func testEmptyMention() throws {
|
||||
let content = "this is some & content"
|
||||
let tags: [[String]] = []
|
||||
let blocks = parse_mentions(content: content, tags: tags)
|
||||
let blocks = parse_mentions(content: content, tags: tags).blocks
|
||||
let post_blocks = parse_post_blocks(content: content)
|
||||
let post_tags = make_post_tags(post_blocks: post_blocks, tags: tags, silent_mentions: false)
|
||||
let event_refs = interpret_event_refs(blocks: blocks, tags: tags)
|
||||
@@ -148,7 +148,7 @@ class ReplyTests: XCTestCase {
|
||||
func testManyMentions() throws {
|
||||
let content = "#[10]"
|
||||
let tags: [[String]] = [[],[],[],[],[],[],[],[],[],[],["p", "3e999f94e2cb34ef44a64b351141ac4e51b5121b2d31aed4a6c84602a1144692"]]
|
||||
let blocks = parse_mentions(content: content, tags: tags)
|
||||
let blocks = parse_mentions(content: content, tags: tags).blocks
|
||||
let mentions = blocks.filter { $0.is_mention }
|
||||
XCTAssertEqual(mentions.count, 1)
|
||||
}
|
||||
@@ -156,7 +156,7 @@ class ReplyTests: XCTestCase {
|
||||
func testThreadedReply() throws {
|
||||
let content = "this is some content"
|
||||
let tags = [["e", "thread_id"], ["e", "reply_id"]]
|
||||
let blocks = parse_mentions(content: content, tags: tags)
|
||||
let blocks = parse_mentions(content: content, tags: tags).blocks
|
||||
let event_refs = interpret_event_refs(blocks: blocks, tags: tags)
|
||||
|
||||
XCTAssertEqual(event_refs.count, 2)
|
||||
@@ -172,7 +172,7 @@ class ReplyTests: XCTestCase {
|
||||
func testRootReply() throws {
|
||||
let content = "this is a reply"
|
||||
let tags = [["e", "thread_id"]]
|
||||
let blocks = parse_mentions(content: content, tags: tags)
|
||||
let blocks = parse_mentions(content: content, tags: tags).blocks
|
||||
let event_refs = interpret_event_refs(blocks: blocks, tags: tags)
|
||||
|
||||
XCTAssertEqual(event_refs.count, 1)
|
||||
@@ -186,14 +186,14 @@ class ReplyTests: XCTestCase {
|
||||
|
||||
func testNoReply() throws {
|
||||
let content = "this is a #[0] reply"
|
||||
let blocks = parse_mentions(content: content, tags: [])
|
||||
let blocks = parse_mentions(content: content, tags: []).blocks
|
||||
let event_refs = interpret_event_refs(blocks: blocks, tags: [])
|
||||
|
||||
XCTAssertEqual(event_refs.count, 0)
|
||||
}
|
||||
|
||||
func testParseMention() throws {
|
||||
let parsed = parse_mentions(content: "this is #[0] a mention", tags: [["e", "event_id"]])
|
||||
let parsed = parse_mentions(content: "this is #[0] a mention", tags: [["e", "event_id"]]).blocks
|
||||
|
||||
XCTAssertNotNil(parsed)
|
||||
XCTAssertEqual(parsed.count, 3)
|
||||
@@ -522,7 +522,7 @@ class ReplyTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testParseInvalidMention() throws {
|
||||
let parsed = parse_mentions(content: "this is #[0] a mention", tags: [])
|
||||
let parsed = parse_mentions(content: "this is #[0] a mention", tags: []).blocks
|
||||
|
||||
XCTAssertNotNil(parsed)
|
||||
XCTAssertEqual(parsed.count, 3)
|
||||
|
||||
@@ -71,7 +71,7 @@ class damusTests: XCTestCase {
|
||||
[my website](https://jb55.com)
|
||||
"""
|
||||
|
||||
let parsed = parse_mentions(content: md, tags: [])
|
||||
let parsed = parse_mentions(content: md, tags: []).blocks
|
||||
|
||||
XCTAssertNotNil(parsed)
|
||||
XCTAssertEqual(parsed.count, 1)
|
||||
@@ -79,7 +79,7 @@ class damusTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testParseUrlUpper() {
|
||||
let parsed = parse_mentions(content: "a HTTPS://jb55.COM b", tags: [])
|
||||
let parsed = parse_mentions(content: "a HTTPS://jb55.COM b", tags: []).blocks
|
||||
|
||||
XCTAssertNotNil(parsed)
|
||||
XCTAssertEqual(parsed.count, 3)
|
||||
@@ -114,7 +114,7 @@ class damusTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testParseUrl() {
|
||||
let parsed = parse_mentions(content: "a https://jb55.com b", tags: [])
|
||||
let parsed = parse_mentions(content: "a https://jb55.com b", tags: []).blocks
|
||||
|
||||
XCTAssertNotNil(parsed)
|
||||
XCTAssertEqual(parsed.count, 3)
|
||||
@@ -122,7 +122,7 @@ class damusTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testParseUrlEnd() {
|
||||
let parsed = parse_mentions(content: "a https://jb55.com", tags: [])
|
||||
let parsed = parse_mentions(content: "a https://jb55.com", tags: []).blocks
|
||||
|
||||
XCTAssertNotNil(parsed)
|
||||
XCTAssertEqual(parsed.count, 2)
|
||||
@@ -131,7 +131,7 @@ class damusTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testParseUrlStart() {
|
||||
let parsed = parse_mentions(content: "https://jb55.com br", tags: [])
|
||||
let parsed = parse_mentions(content: "https://jb55.com br", tags: []).blocks
|
||||
|
||||
XCTAssertNotNil(parsed)
|
||||
XCTAssertEqual(parsed.count, 2)
|
||||
@@ -141,7 +141,7 @@ class damusTests: XCTestCase {
|
||||
|
||||
func testNoParseUrlWithOnlyWhitespace() {
|
||||
let testString = "https:// "
|
||||
let parsed = parse_mentions(content: testString, tags: [])
|
||||
let parsed = parse_mentions(content: testString, tags: []).blocks
|
||||
|
||||
XCTAssertNotNil(parsed)
|
||||
XCTAssertEqual(parsed[0].is_text, testString)
|
||||
@@ -149,14 +149,14 @@ class damusTests: XCTestCase {
|
||||
|
||||
func testNoParseUrlTrailingCharacters() {
|
||||
let testString = "https://foo.bar, "
|
||||
let parsed = parse_mentions(content: testString, tags: [])
|
||||
let parsed = parse_mentions(content: testString, tags: []).blocks
|
||||
|
||||
XCTAssertNotNil(parsed)
|
||||
XCTAssertEqual(parsed[0].is_url?.absoluteString, "https://foo.bar")
|
||||
}
|
||||
|
||||
func testParseMentionBlank() {
|
||||
let parsed = parse_mentions(content: "", tags: [["e", "event_id"]])
|
||||
let parsed = parse_mentions(content: "", tags: [["e", "event_id"]]).blocks
|
||||
|
||||
XCTAssertNotNil(parsed)
|
||||
XCTAssertEqual(parsed.count, 0)
|
||||
@@ -178,7 +178,7 @@ class damusTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testParseHashtag() {
|
||||
let parsed = parse_mentions(content: "some hashtag #bitcoin derp", tags: [])
|
||||
let parsed = parse_mentions(content: "some hashtag #bitcoin derp", tags: []).blocks
|
||||
|
||||
XCTAssertNotNil(parsed)
|
||||
XCTAssertEqual(parsed.count, 3)
|
||||
@@ -188,7 +188,7 @@ class damusTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testHashtagWithComma() {
|
||||
let parsed = parse_mentions(content: "some hashtag #bitcoin, cool", tags: [])
|
||||
let parsed = parse_mentions(content: "some hashtag #bitcoin, cool", tags: []).blocks
|
||||
|
||||
XCTAssertNotNil(parsed)
|
||||
XCTAssertEqual(parsed.count, 3)
|
||||
@@ -198,7 +198,7 @@ class damusTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testHashtagWithEmoji() {
|
||||
let parsed = parse_mentions(content: "some hashtag #bitcoin☕️ cool", tags: [])
|
||||
let parsed = parse_mentions(content: "some hashtag #bitcoin☕️ cool", tags: []).blocks
|
||||
|
||||
XCTAssertNotNil(parsed)
|
||||
XCTAssertEqual(parsed.count, 3)
|
||||
@@ -208,7 +208,7 @@ class damusTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testParseHashtagEnd() {
|
||||
let parsed = parse_mentions(content: "some hashtag #bitcoin", tags: [])
|
||||
let parsed = parse_mentions(content: "some hashtag #bitcoin", tags: []).blocks
|
||||
|
||||
XCTAssertNotNil(parsed)
|
||||
XCTAssertEqual(parsed.count, 2)
|
||||
@@ -217,7 +217,7 @@ class damusTests: XCTestCase {
|
||||
}
|
||||
|
||||
func testParseMentionOnlyText() {
|
||||
let parsed = parse_mentions(content: "there is no mention here", tags: [["e", "event_id"]])
|
||||
let parsed = parse_mentions(content: "there is no mention here", tags: [["e", "event_id"]]).blocks
|
||||
|
||||
XCTAssertNotNil(parsed)
|
||||
XCTAssertEqual(parsed.count, 1)
|
||||
|
||||
Reference in New Issue
Block a user