| 1 | import 'package:cw_core/amount/money.dart'; |
| 2 | import 'package:cw_core/crypto_currency.dart'; |
| 3 | import 'package:cw_core/lnurl.dart'; |
| 4 | import 'package:cw_core/utils/proxy_wrapper.dart'; |
| 5 | import 'package:cw_core/utils/tor/abstract.dart'; |
| 6 | import 'package:flutter_test/flutter_test.dart'; |
| 7 | |
| 8 | void main() { |
| 9 | group('lnurl', () { |
| 10 | test('decode lnurl', () { |
| 11 | final content = LNURL.decode( |
| 12 | "lnurl1dp68gurn8ghj7cmpddjjucmpwd5z7tnhv4kxctttdehhwm30d3h82unvwqhkkmmwwd6xj9vpzq4"); |
| 13 | expect(content, Uri.parse("https://cake.cash/.well-known/lnurlp/konsti")); |
| 14 | }); |
| 15 | |
| 16 | // This tests includes a rest request to an URL that expired and due to the lack of an alternative URL we ignore this test |
| 17 | // test('get amount', () async { |
| 18 | // CakeTor.instance = await CakeTorInstance.getInstance(); |
| 19 | // |
| 20 | // final content = await LNURL.getPayRequestAmount( |
| 21 | // "LNURL1DP68GURN8GHJ7CTSWQHXY6T5WFJHZAT9WD6ZU6T09AUZ7URJDAU8JTMKXYHKCM308A5N6MNHVVNXJEPAXGMNWWPEX3JRGDTPXVNXZ0FCX5CRQVPSXQNX602VFE24YNP9XGC8W6T5DQJNYVRPD4HH2MN5GTRNLZ"); |
| 22 | // expect(content, Money.fromInt(8500, CryptoCurrency.btcln)); |
| 23 | // }); |
| 24 | |
| 25 | test('get no amount', () async { |
| 26 | CakeTor.instance = await CakeTorInstance.getInstance(); |
| 27 | |
| 28 | final content = await LNURL.getPayRequestAmount( |
| 29 | "lnurl1dp68gurn8ghj7cmpddjjucmpwd5z7tnhv4kxctttdehhwm30d3h82unvwqhkkmmwwd6xj9vpzq4"); |
| 30 | expect(content, null); |
| 31 | }); |
| 32 | |
| 33 | test('encode lnurl', () { |
| 34 | final content = LNURL.encode("https://cake.cash/.well-known/lnurlp/konsti"); |
| 35 | expect(content, |
| 36 | "lnurl1dp68gurn8ghj7cmpddjjucmpwd5z7tnhv4kxctttdehhwm30d3h82unvwqhkkmmwwd6xj9vpzq4"); |
| 37 | }); |
| 38 | }); |
| 39 | |
| 40 | group("isBolt11ZeroInvoice", () { |
| 41 | test("should identify a zero amount invoice", () { |
| 42 | final invoice = |
| 43 | "lnbc1p5564y8pp5vm48jp3w82yjssrtdhvrjacwwzp59hqjm2lq6fud5thfznyuswgqsp54mykkptx9mlqhpe93f9pcgt9p5ml5xhclyn7qsltqy9ldf25j3qqxqyz5vqnp4qvyndeaqzman7h898jxm98dzkm0mlrsx36s93smrur7h0azyyuxc5rzjqwghf7zxvfkxq5a6sr65g0gdkv768p83mhsnt0msszapamzx2qvuxqqqqrt49lmtcqqqqqqqqqqq86qq9qrzjq25carzepgd4vqsyn44jrk85ezrpju92xyrk9apw4cdjh6yrwt5jgqqqqrt49lmtcqqqqqqqqqqq86qq9qrzjqfvmpdwfesckajzfcf7ff2vqaz9jdgpcsa9xc0fq8ny749dy8y5geapyqr6zgqqqq8hxk2qqae4jsqyugqcqzpgdqq9qyyssqycdyx8r09wgm8vny3n8pf2e0crcdq9mgx3ncxvzsrkljxyrcuwx8zjtje7du40nzdy7x2he67v9asp6ac6ed75r33yyt9pzeepygcmsptc4ve4"; |
| 44 | expect(isBolt11ZeroInvoice(invoice), true); |
| 45 | }); |
| 46 | |
| 47 | test("should identify a non zero amount invoice", () { |
| 48 | final invoice = |
| 49 | "lnbc1u1p5564nxpp5mrklx2pjaggkcfs9r5tfk84wszzy9gypcnrt9yjq7n6uf95s70xqsp59fph78twjra598n2mll2arw5enluy7a4uf4y9a94ddd30hm98njsxq9z0rgqnp4qvyndeaqzman7h898jxm98dzkm0mlrsx36s93smrur7h0azyyuxc5rzjqwghf7zxvfkxq5a6sr65g0gdkv768p83mhsnt0msszapamzx2qvuxqqqqrt49lmtcqqqqqqqqqqq86qq9qrzjq25carzepgd4vqsyn44jrk85ezrpju92xyrk9apw4cdjh6yrwt5jgqqqqrt49lmtcqqqqqqqqqqq86qq9qcqzpgdql2djkuepqw3hjqsmpddjjq4mpd3kx2aq9qyyssq3nf60ey9fgkf0elu2y8j96rx5pm4gx2a976h8yadx83dyg0ltnysrxhep8e2p3yvz4kf597qk3rttgdy72wwqq0mwr8hdht3pqpchyqq0aa9v0"; |
| 50 | expect(isBolt11ZeroInvoice(invoice), false); |
| 51 | }); |
| 52 | |
| 53 | test("should identify a zero amount prefixed invoice", () { |
| 54 | final invoice = |
| 55 | "lightning:lnbc1p5564y8pp5vm48jp3w82yjssrtdhvrjacwwzp59hqjm2lq6fud5thfznyuswgqsp54mykkptx9mlqhpe93f9pcgt9p5ml5xhclyn7qsltqy9ldf25j3qqxqyz5vqnp4qvyndeaqzman7h898jxm98dzkm0mlrsx36s93smrur7h0azyyuxc5rzjqwghf7zxvfkxq5a6sr65g0gdkv768p83mhsnt0msszapamzx2qvuxqqqqrt49lmtcqqqqqqqqqqq86qq9qrzjq25carzepgd4vqsyn44jrk85ezrpju92xyrk9apw4cdjh6yrwt5jgqqqqrt49lmtcqqqqqqqqqqq86qq9qrzjqfvmpdwfesckajzfcf7ff2vqaz9jdgpcsa9xc0fq8ny749dy8y5geapyqr6zgqqqq8hxk2qqae4jsqyugqcqzpgdqq9qyyssqycdyx8r09wgm8vny3n8pf2e0crcdq9mgx3ncxvzsrkljxyrcuwx8zjtje7du40nzdy7x2he67v9asp6ac6ed75r33yyt9pzeepygcmsptc4ve4"; |
| 56 | expect(isBolt11ZeroInvoice(invoice), true); |
| 57 | }); |
| 58 | |
| 59 | test("should identify a non zero amount prefixed invoice", () { |
| 60 | final invoice = |
| 61 | "lightning:lnbc1u1p5564nxpp5mrklx2pjaggkcfs9r5tfk84wszzy9gypcnrt9yjq7n6uf95s70xqsp59fph78twjra598n2mll2arw5enluy7a4uf4y9a94ddd30hm98njsxq9z0rgqnp4qvyndeaqzman7h898jxm98dzkm0mlrsx36s93smrur7h0azyyuxc5rzjqwghf7zxvfkxq5a6sr65g0gdkv768p83mhsnt0msszapamzx2qvuxqqqqrt49lmtcqqqqqqqqqqq86qq9qrzjq25carzepgd4vqsyn44jrk85ezrpju92xyrk9apw4cdjh6yrwt5jgqqqqrt49lmtcqqqqqqqqqqq86qq9qcqzpgdql2djkuepqw3hjqsmpddjjq4mpd3kx2aq9qyyssq3nf60ey9fgkf0elu2y8j96rx5pm4gx2a976h8yadx83dyg0ltnysrxhep8e2p3yvz4kf597qk3rttgdy72wwqq0mwr8hdht3pqpchyqq0aa9v0"; |
| 62 | expect(isBolt11ZeroInvoice(invoice), false); |
| 63 | }); |
| 64 | }); |
| 65 | |
| 66 | group("getBolt11Amount", () { |
| 67 | test("should identify a zero amount invoice", () { |
| 68 | final invoice = |
| 69 | "lnbc1p5564y8pp5vm48jp3w82yjssrtdhvrjacwwzp59hqjm2lq6fud5thfznyuswgqsp54mykkptx9mlqhpe93f9pcgt9p5ml5xhclyn7qsltqy9ldf25j3qqxqyz5vqnp4qvyndeaqzman7h898jxm98dzkm0mlrsx36s93smrur7h0azyyuxc5rzjqwghf7zxvfkxq5a6sr65g0gdkv768p83mhsnt0msszapamzx2qvuxqqqqrt49lmtcqqqqqqqqqqq86qq9qrzjq25carzepgd4vqsyn44jrk85ezrpju92xyrk9apw4cdjh6yrwt5jgqqqqrt49lmtcqqqqqqqqqqq86qq9qrzjqfvmpdwfesckajzfcf7ff2vqaz9jdgpcsa9xc0fq8ny749dy8y5geapyqr6zgqqqq8hxk2qqae4jsqyugqcqzpgdqq9qyyssqycdyx8r09wgm8vny3n8pf2e0crcdq9mgx3ncxvzsrkljxyrcuwx8zjtje7du40nzdy7x2he67v9asp6ac6ed75r33yyt9pzeepygcmsptc4ve4"; |
| 70 | expect(getBolt11Amount(invoice), null); |
| 71 | }); |
| 72 | |
| 73 | test("should get the amount 1 BTC encoded as bitcoin", () { |
| 74 | final invoice = |
| 75 | "lnbc11p5exaxspp5u6e6lx90rw2vqr2e5axt8ur3v98qnmqfsmh8r0l0mcm7ry70vyvsdqqcqzzsxqrrsssp5eqydmrufk39dwhuxzajwx4xyffn0mlcu3qa8vjwry6qev5gsepkq9qxpqysgqt0zldve9uxt3txjt8wp0gev52lquljgugy26nneue85pjwk5yak4hs2d8533tus07pq5ka6zrnd0ruaeepwres8p7ws5mx63xlwff5sqlxcy8a"; |
| 76 | expect(getBolt11Amount(invoice), Money.fromInt(100000000, CryptoCurrency.btcln)); |
| 77 | }); |
| 78 | |
| 79 | test("should get the amount 0,1 BTC encoded as millibitcoin", () { |
| 80 | final invoice = |
| 81 | "lnbc100m1p5exagmpp5n4c5tml3h8h7k4gthc9papkyeymceqqvcldkng4nvxwzj7nu9jnsdqqcqzzsxqrrsssp58kgzrh7y3pevantduc4yg33aa6r79ed6xgmhr0dy40zc8pxrz5ms9qxpqysgqcq27km3v3wcz6pntmsfnz259zy6tff0uwjz9kamdrvmxmdv09gp44mh0ygn7gweqf4zdev4x8e67p5kcvahethchdkkjexhtk7emuqcpasz0lp"; |
| 82 | expect(getBolt11Amount(invoice), Money.fromInt(10000000, CryptoCurrency.btcln)); |
| 83 | }); |
| 84 | |
| 85 | test("should get the amount 1000 SATS encoded as microbitcoin", () { |
| 86 | final invoice = |
| 87 | "lnbc10u1p5exfgvpp5n3s9dsw9ddax5c3h8437ya7y4g582uyufyna626yr9vqdfjrhwzqdqqcqzzsxqrrsssp5mmkyp5h35fpaxm4063f3kc7d4nmgd4gd8fv8086wxd784m76kmpq9qxpqysgqye9r0vahpjy9l2je6vakxzk3cjnsyx76r29c4amkz4cmapq5tqt5l7rl0emkd003jjvz2d8jqrw6wc4cduvapuyeseh7a855l82wutcpeq30kg"; |
| 88 | expect(getBolt11Amount(invoice), Money.fromInt(1000, CryptoCurrency.btcln)); |
| 89 | }); |
| 90 | |
| 91 | test("should get the amount 1 SAT encoded as nanobitcoin", () { |
| 92 | final invoice = |
| 93 | "lnbc10n1p5exazppp5szh273r6nzvwydzsdlg0ws0vhxwnc6nqtqt4sjt0vu6x6l8t5csqdqqcqzzsxqrrsssp5nkup6uht7xlfqaj8lxpe5kx0ejum9p4pvv3nlnndr9ykzge3393s9qxpqysgqufh05a7qs0ezeckvmh7tjkr9ngng96nq274twg20z45ysp7afpdrttm2ky73cpjwpjqsmtzzd79w6lyvszgmkanwn8mj0jcfunrwv3qprg3z3j"; |
| 94 | expect(getBolt11Amount(invoice), Money.fromInt(1, CryptoCurrency.btcln)); |
| 95 | }); |
| 96 | }); |
| 97 | } |