Update tests and fix URI parsing
[electrum-nvc.git] / lib / tests / test_util.py
1 import unittest
2 from lib.util import format_satoshis, parse_URI
3
4 class TestUtil(unittest.TestCase):
5
6     def test_format_satoshis(self):
7         result = format_satoshis(1234)
8         expected = "0.00001234"
9         self.assertEqual(expected, result)
10
11     def test_format_satoshis_diff_positive(self):
12         result = format_satoshis(1234, is_diff=True)
13         expected = "+0.00001234"
14         self.assertEqual(expected, result)
15
16     def test_format_satoshis_diff_negative(self):
17         result = format_satoshis(-1234, is_diff=True)
18         expected = "-0.00001234"
19         self.assertEqual(expected, result)
20
21     def _do_test_parse_URI(self, uri, expected_address, expected_amount, expected_label, expected_message, expected_request_url):
22         address, amount, label, message, request_url = parse_URI(uri)
23         self.assertEqual(expected_address, address)
24         self.assertEqual(expected_amount, amount)
25         self.assertEqual(expected_label, label)
26         self.assertEqual(expected_message, message)
27         self.assertEqual(expected_request_url, request_url)
28
29     def test_parse_URI_address(self):
30         self._do_test_parse_URI('bitcoin:15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma', '15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma', '', '', '', '')
31
32     def test_parse_URI_only_address(self):
33         self._do_test_parse_URI('15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma', '15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma', None, None, None, None)
34
35
36     def test_parse_URI_address_label(self):
37         self._do_test_parse_URI('bitcoin:15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma?label=electrum%20test', '15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma', '', 'electrum test', '', '')
38
39     def test_parse_URI_address_message(self):
40         self._do_test_parse_URI('bitcoin:15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma?message=electrum%20test', '15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma', '', '', 'electrum test', '')
41
42     def test_parse_URI_address_amount(self):
43         self._do_test_parse_URI('bitcoin:15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma?amount=0.0003', '15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma', 30000, '', '', '')
44
45     def test_parse_URI_address_request_url(self):
46         self._do_test_parse_URI('bitcoin:15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma?r=http://domain.tld/page?h%3D2a8628fc2fbe', '15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma', '', '', '', 'http://domain.tld/page?h%3D2a8628fc2fbe')
47
48     def test_parse_URI_ignore_args(self):
49         self._do_test_parse_URI('bitcoin:15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma?test=test', '15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma', '', '', '', '')
50
51     def test_parse_URI_multiple_args(self):
52         self._do_test_parse_URI('bitcoin:15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma?amount=0.00004&label=electrum-test&message=electrum%20test&test=none&r=http://domain.tld/page', '15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma', 4000, 'electrum-test', 'electrum test', 'http://domain.tld/page')
53
54     def test_parse_URI_no_address_request_url(self):
55         self._do_test_parse_URI('bitcoin:?r=http://domain.tld/page?h%3D2a8628fc2fbe', '', '', '', '', 'http://domain.tld/page?h%3D2a8628fc2fbe')
56
57     def test_parse_URI_invalid_address(self):
58         self.assertRaises(AssertionError, parse_URI, 'bitcoin:invalidaddress')
59
60     def test_parse_URI_invalid(self):
61         self.assertRaises(AssertionError, parse_URI, 'notbitcoin:15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma')
62
63     def test_parse_URI_parameter_polution(self):
64         self.assertRaises(Exception, parse_URI, 'bitcoin:15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma?amount=0.0003&label=test&amount=30.0')
65