InvoiceTests.swift (9442B)
1 // 2 // InvoiceTests.swift 3 // damusTests 4 // 5 // Created by William Casarin on 2022-10-18. 6 // 7 8 import XCTest 9 @testable import damus 10 11 12 final class InvoiceTests: XCTestCase { 13 14 override func setUpWithError() throws { 15 // Put setup code here. This method is called before the invocation of each test method in the class. 16 } 17 18 override func tearDownWithError() throws { 19 // Put teardown code here. This method is called after the invocation of each test method in the class. 20 } 21 22 23 func testParseAnyAmountInvoice() throws { 24 let invstr = "LNBC1P3MR5UJSP5G7SA48YD4JWTTPCHWMY4QYN4UWZQCJQ8NMWKD6QE3HCRVYTDLH9SPP57YM9TSA9NN4M4XU59XMJCXKR7YDV29DDP6LVQUT46ZW6CU3KE9GQDQ9V9H8JXQ8P3MYLZJCQPJRZJQF60PZDVNGGQWQDNERZSQN35L8CVQ3QG2Z5NSZYD0D3Q0JW2TL6VUZA7FYQQWKGQQYQQQQLGQQQQXJQQ9Q9QXPQYSGQ39EM4QJMQFKZGJXZVGL7QJMYNSWA8PGDTAGXXRG5Z92M7VLCGKQK2L2THDF8LM0AUKAURH7FVAWDLRNMVF38W4EYJDNVN9V4Z9CRS5CQCV465C" 25 26 guard let blockGroup: NdbBlockGroup = try? NdbBlockGroup.parse(content: invstr) else { 27 XCTFail("Parsing threw an error") 28 return 29 } 30 31 blockGroup.withList({ blockList in 32 XCTAssertEqual(blockList.count, 1) 33 let success: Bool? = blockList.useItem(at: 0, { block in 34 switch block { 35 case .invoice(let invoiceData): 36 guard let invoice = invoiceData.as_invoice() else { 37 XCTFail("Cannot get invoice from invoice block") 38 return false 39 } 40 XCTAssertEqual(invoice.amount, .any) 41 XCTAssertEqual(invoice.string, invstr) 42 return true 43 default: 44 XCTFail("Block is not an invoice") 45 return false 46 } 47 }) 48 XCTAssertEqual(success, true) 49 }) 50 } 51 52 /* 53 // gh-3144: It was decided on a standup meeting that we do not need invoices to render, few people use this feature. 54 func testTextAfterInvoice() throws { 55 let invstr = """ 56 LNBC1P3MR5UJSP5G7SA48YD4JWTTPCHWMY4QYN4UWZQCJQ8NMWKD6QE3HCRVYTDLH9SPP57YM9TSA9NN4M4XU59XMJCXKR7YDV29DDP6LVQUT46ZW6CU3KE9GQDQ9V9H8JXQ8P3MYLZJCQPJRZJQF60PZDVNGGQWQDNERZSQN35L8CVQ3QG2Z5NSZYD0D3Q0JW2TL6VUZA7FYQQWKGQQYQQQQLGQQQQXJQQ9Q9QXPQYSGQ39EM4QJMQFKZGJXZVGL7QJMYNSWA8PGDTAGXXRG5Z92M7VLCGKQK2L2THDF8LM0AUKAURH7FVAWDLRNMVF38W4EYJDNVN9V4Z9CRS5CQCV465C hi there 57 """ 58 59 guard let blockGroup: NdbBlockGroup = try? NdbBlockGroup.parse(content: invstr) else { 60 XCTFail("Parsing threw an error") 61 return 62 } 63 64 blockGroup.withList({ blockList in 65 XCTAssertEqual(blockList.count, 2) 66 67 // Check invoice block 68 let invoiceSuccess: Bool? = blockList.useItem(at: 0, { block in 69 switch block { 70 case .invoice(let invoiceData): 71 guard let invoice = invoiceData.as_invoice() else { 72 XCTFail("Cannot get invoice from invoice block") 73 return false 74 } 75 XCTAssertEqual(invoice.amount, .any) 76 return true 77 default: 78 XCTFail("First block is not an invoice") 79 return false 80 } 81 }) 82 XCTAssertEqual(invoiceSuccess, true) 83 84 // Check text block 85 let textSuccess: Bool? = blockList.useItem(at: 1, { block in 86 switch block { 87 case .text(let text): 88 XCTAssertEqual(text.as_str(), " hi there") 89 return true 90 default: 91 XCTFail("Second block is not text") 92 return false 93 } 94 }) 95 XCTAssertEqual(textSuccess, true) 96 }) 97 } 98 */ 99 100 func testParseInvoiceUpper() throws { 101 let invstr = "LNBC100N1P357SL0SP5T9N56WDZTUN39LGDQLR30XQWKSG3K69Q4Q2RKR52APLUJW0ESN0QPP5MRQGLJK62Z20Q4NVGR6LZCYN6FHYLZCCWDVU4K77APG3ZMRKUJJQDPZW35XJUEQD9EJQCFQV3JHXCMJD9C8G6T0DCXQYJW5QCQPJRZJQT56H4GVP5YX36U2UZQA6QWCSK3E2DUUNFXPPZJ9VHYPC3WFE2WSWZ607UQQ3XQQQSQQQQQQQQQQQLQQYG9QYYSGQAGX5H20AEULJ3GDWX3KXS8U9F4MCAKDKWUAKASAMM9562FFYR9EN8YG20LG0YGNR9ZPWP68524KMDA0T5XP2WYTEX35PU8HAPYJAJXQPSQL29R" 102 103 guard let blockGroup: NdbBlockGroup = try? NdbBlockGroup.parse(content: invstr) else { 104 XCTFail("Parsing threw an error") 105 return 106 } 107 108 blockGroup.withList({ blockList in 109 XCTAssertEqual(blockList.count, 1) 110 let success: Bool? = blockList.useItem(at: 0, { block in 111 switch block { 112 case .invoice(let invoiceData): 113 guard let invoice = invoiceData.as_invoice() else { 114 XCTFail("Cannot get invoice from invoice block") 115 return false 116 } 117 XCTAssertEqual(invoice.amount, .specific(10000)) 118 XCTAssertEqual(invoice.expiry, 604800) 119 XCTAssertEqual(invoice.created_at, 1666139119) 120 XCTAssertEqual(invoice.string, invstr) 121 return true 122 default: 123 XCTFail("Block is not an invoice") 124 return false 125 } 126 }) 127 XCTAssertEqual(success, true) 128 }) 129 } 130 131 func testParseInvoiceWithPrefix() throws { 132 let invstr = "lightning:lnbc100n1p357sl0sp5t9n56wdztun39lgdqlr30xqwksg3k69q4q2rkr52aplujw0esn0qpp5mrqgljk62z20q4nvgr6lzcyn6fhylzccwdvu4k77apg3zmrkujjqdpzw35xjueqd9ejqcfqv3jhxcmjd9c8g6t0dcxqyjw5qcqpjrzjqt56h4gvp5yx36u2uzqa6qwcsk3e2duunfxppzj9vhypc3wfe2wswz607uqq3xqqqsqqqqqqqqqqqlqqyg9qyysgqagx5h20aeulj3gdwx3kxs8u9f4mcakdkwuakasamm9562ffyr9en8yg20lg0ygnr9zpwp68524kmda0t5xp2wytex35pu8hapyjajxqpsql29r" 133 134 guard let blockGroup: NdbBlockGroup = try? NdbBlockGroup.parse(content: invstr) else { 135 XCTFail("Parsing threw an error") 136 return 137 } 138 139 blockGroup.withList({ blockList in 140 XCTAssertEqual(blockList.count, 1) 141 let success: Bool? = blockList.useItem(at: 0, { block in 142 switch block { 143 case .invoice(_): 144 return true 145 default: 146 XCTFail("Block is not an invoice") 147 return false 148 } 149 }) 150 XCTAssertEqual(success, true) 151 }) 152 } 153 154 func testParseInvoiceWithPrefixCapitalized() throws { 155 let invstr = "LIGHTNING:LNBC100N1P357SL0SP5T9N56WDZTUN39LGDQLR30XQWKSG3K69Q4Q2RKR52APLUJW0ESN0QPP5MRQGLJK62Z20Q4NVGR6LZCYN6FHYLZCCWDVU4K77APG3ZMRKUJJQDPZW35XJUEQD9EJQCFQV3JHXCMJD9C8G6T0DCXQYJW5QCQPJRZJQT56H4GVP5YX36U2UZQA6QWCSK3E2DUUNFXPPZJ9VHYPC3WFE2WSWZ607UQQ3XQQQSQQQQQQQQQQQLQQYG9QYYSGQAGX5H20AEULJ3GDWX3KXS8U9F4MCAKDKWUAKASAMM9562FFYR9EN8YG20LG0YGNR9ZPWP68524KMDA0T5XP2WYTEX35PU8HAPYJAJXQPSQL29R" 156 157 guard let blockGroup: NdbBlockGroup = try? NdbBlockGroup.parse(content: invstr) else { 158 XCTFail("Parsing threw an error") 159 return 160 } 161 162 blockGroup.withList({ blockList in 163 XCTAssertEqual(blockList.count, 1) 164 let success: Bool? = blockList.useItem(at: 0, { block in 165 switch block { 166 case .invoice(_): 167 return true 168 default: 169 XCTFail("Block is not an invoice") 170 return false 171 } 172 }) 173 XCTAssertEqual(success, true) 174 }) 175 } 176 177 /* 178 // gh-3144: It was decided on a standup meeting that we do not need invoices to render, few people use this feature. 179 func testParseInvoice() throws { 180 let invstr = " lnbc100n1p357sl0sp5t9n56wdztun39lgdqlr30xqwksg3k69q4q2rkr52aplujw0esn0qpp5mrqgljk62z20q4nvgr6lzcyn6fhylzccwdvu4k77apg3zmrkujjqdpzw35xjueqd9ejqcfqv3jhxcmjd9c8g6t0dcxqyjw5qcqpjrzjqt56h4gvp5yx36u2uzqa6qwcsk3e2duunfxppzj9vhypc3wfe2wswz607uqq3xqqqsqqqqqqqqqqqlqqyg9qyysgqagx5h20aeulj3gdwx3kxs8u9f4mcakdkwuakasamm9562ffyr9en8yg20lg0ygnr9zpwp68524kmda0t5xp2wytex35pu8hapyjajxqpsql29r" 181 182 guard let blockGroup: NdbBlockGroup = try? NdbBlockGroup.parse(content: invstr) else { 183 XCTFail("Parsing threw an error") 184 return 185 } 186 blockGroup.withList({ blockList in 187 XCTAssertEqual(blockList.count, 3) 188 let success: Bool? = blockList.useItem(at: 1, { block in 189 switch block { 190 case .invoice(let invoiceData): 191 guard let invoice = invoiceData.as_invoice() else { 192 XCTFail("Cannot get invoice from invoice block") 193 return false 194 } 195 XCTAssertEqual(invoice.amount, .specific(10000)) 196 XCTAssertEqual(invoice.expiry, 604800) 197 XCTAssertEqual(invoice.created_at, 1666139119) 198 XCTAssertEqual(invoice.string, invstr) 199 return true 200 default: 201 XCTFail("Block is not an invoice") 202 return false 203 } 204 }) 205 XCTAssertEqual(success, true) 206 }) 207 } 208 */ 209 210 }