damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

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 }