def test_decode(self): enc_payreq = self.commands.add('1.23')[0] dec_payreq = self.commands.decode(enc_payreq) # self.assertIn('To ', dec_payreq) -> Aliases are not supported yet self.assertIn('Pubkey ', dec_payreq) self.assertIn('Amount ', dec_payreq) self.assertIn('Description ', dec_payreq) self.assertIn('Created on ', dec_payreq) self.assertIn('Expires ', dec_payreq) # TODO: test expired # Optional outputs cls = build_lighterer_mock('nodescription') with patch('lighterer.Lighterer', cls): nodesc = Commands('fake', 0, None, None) dec_payreq = nodesc.decode(enc_payreq) self.assertNotIn('Description ', dec_payreq)
class TestLighterer(unittest.TestCase): def setUp(self): cls = build_lighterer_mock() with patch('lighterer.Lighterer', cls): self.commands = Commands('fake', 0, None, None) def test_aliases(self): # null string alias pub = ('03aa434d9ff5d5470033aa654f201dbbd' 'ce79955c61e9e48a6674d203ae3b689f5') self.assertEqual(self.commands._alias(pub, pub), pub) self.assertNotEqual(self.commands._alias(pub), pub) # mani = ('03db61876a9a50e5724048170aeb14f00' # '96e503def38dc149d2a4ca71efd95a059') # self.assertEqual(self.commands._alias(mani), 'mani_al_cielo') false = ('020000000000000000000000000000000' '000000000000000000000000000000000') self.assertEqual(self.commands._alias(false, false), false) with open('cities.txt', 'rt') as fd: cities = [x.strip() for x in fd.readlines()] self.assertIn(self.commands._alias(false).split(maxsplit=1)[1], cities) CITYSCAPE = '\U0001f3d9' CITY_DUSK = '\U0001f306' # TODO: test both conditions if self.commands.aliases: self.assertEqual(self.commands._alias(false).split()[0], CITY_DUSK) else: self.assertEqual(self.commands._alias(false).split()[0], CITYSCAPE) def test_cities_file(self): """cities.txt must be ascii encoded""" with open('cities.txt', 'rt') as fd: data = fd.readlines() for city in data: try: city.encode('ascii') except UnicodeEncodeError: self.fail('{} is not ascii encoded'.format(city.strip())) def test_private_chs(self): self.assertNotIn(PRIVATE, ''.join( self.commands.channels())) self.assertNotIn(PRIVATE, self.commands.chs()) cls = build_lighterer_mock('private') with patch('lighterer.Lighterer', cls): private = Commands('fake', 0, None, None) self.assertIn(PRIVATE, ''.join( private.channels())) self.assertIn(PRIVATE, private.chs()) def test_active_flag(self): """chs and channels commands are involved""" # Case 0: all the channels are active output = '\n'.join(self.commands.channels()) occ_channels = output.count(ACTIVE) self.assertIn(ACTIVE, output) self.assertNotIn(NACTIVE, output) output = self.commands.chs() occ_chs = output.count(ACTIVE) self.assertIn(ACTIVE, output) self.assertNotIn(NACTIVE, output) self.assertEqual(occ_channels, occ_chs) # Case 1: 1 active ch and 1 not active ch # channels and chs call get: # - all channels # - active channels cls = build_lighterer_mock(None, 'active') with patch('lighterer.Lighterer', cls): active = Commands('fake', 0, None, None) output = '\n'.join(active.channels()) self.assertEqual(output.count(ACTIVE), 1) self.assertEqual(output.count(NACTIVE), 1) @patch('requests.get') def test_commands(self, mock_get): mock_get.return_value = FakeRequests() uri = self.commands._lit.getinfo().node_uri self.assertIn(uri, self.commands.info()) self.assertIn(uri, self.commands.uri()) self.commands.add() self.commands.add('123') self.commands.add('0.001') self.commands.add('7') self.commands.add('6.7€') self.commands.add('6.8e') self.commands.add('6.9E') self.commands.balance() self.assertIsInstance(self.commands.channels(pending=False), list) # Not implemented # self.assertIsInstance(self.commands.channels(pending=True), list) self.assertIsInstance(self.commands.pending(), list) self.commands.chs() self.commands.is_pay_req(PAY_REQ) assert re.match('^(bc|tb)1', self.commands.address()) self.commands.pay(PAY_REQ) self.commands.pay(PAY_REQ, '0.001') self.commands.pay(PAY_REQ, '7') self.commands.pay(PAY_REQ, '6.7€') self.commands.pay(PAY_REQ, '6.8e') self.commands.pay(PAY_REQ, '6.9E') self.commands.pay(PROTOCOL + PAY_REQ) self.assertEqual(len(self.commands.add('1.23')), 2) self.assertEqual(len(self.commands.channels(pending=False)), 2) # self.assertEqual(len(self.commands.channels(pending=True)), 7) # self.assertEqual(len(self.commands.pending()), 1) self.assertEqual(len(self.commands.channels('no-one', False)), 0) self.assertEqual(len(self.commands.channels('03db61876a9a50e5', False)), 1) self.assertEqual(len(self.commands.channels('03db61876a', False)), 1) def test_cmd_payment(self): PAID = '\U0001f44d' NOT_PAID = '\U0001f44e' NOT_FOUND = 'Invoice not found' # Random r hash. Mock does not check the hash value r_hash = '86' * 32 no_hash = '67' * 32 self.assertIn(PAID, self.commands.payment(r_hash)) self.assertIn(PAID, self.commands.payment()) cls = build_lighterer_mock('notfound') with patch('lighterer.Lighterer', cls): notfound = Commands('fake', 0, None, None) self.assertIn(NOT_FOUND, notfound.payment(no_hash)) # Load unpaid mock cls = build_lighterer_mock('unpaid') with patch('lighterer.Lighterer', cls): unpaid = Commands('fake', 0, None, None) self.assertIn(NOT_PAID, unpaid.payment(r_hash)) self.assertIn(NOT_PAID, unpaid.payment()) # TODO: check the order of invoices r_last = cls().listinvoices()[0].payment_hash self.assertIn(self.commands.payment().split()[0], (PAID, NOT_PAID)) self.assertIn(r_last, self.commands.payment()) # Expiration tests # TODO: next version of payment command # self.assertIn('Expired on', self.commands.payment()) # self.assertNotIn('Settled on', self.commands.payment()) # self.assertNotIn('Expires', self.commands.payment(r_hash)) # self.assertIn('Settled on', self.commands.payment(r_hash)) def test_decode(self): enc_payreq = self.commands.add('1.23')[0] dec_payreq = self.commands.decode(enc_payreq) # self.assertIn('To ', dec_payreq) -> Aliases are not supported yet self.assertIn('Pubkey ', dec_payreq) self.assertIn('Amount ', dec_payreq) self.assertIn('Description ', dec_payreq) self.assertIn('Created on ', dec_payreq) self.assertIn('Expires ', dec_payreq) # TODO: test expired # Optional outputs cls = build_lighterer_mock('nodescription') with patch('lighterer.Lighterer', cls): nodesc = Commands('fake', 0, None, None) dec_payreq = nodesc.decode(enc_payreq) self.assertNotIn('Description ', dec_payreq) # TODO: implement aliases # Test: invoice without alias # self.assertNotIn('To ', dec_payreq) def test_decode_error(self): cls = build_lighterer_mock('error') with patch('lighterer.Lighterer', cls): error = Commands('fake', 0, None, None) self.assertIn('This is not a payment request', error.decode('No'))
def test_decode_error(self): cls = build_lighterer_mock('error') with patch('lighterer.Lighterer', cls): error = Commands('fake', 0, None, None) self.assertIn('This is not a payment request', error.decode('No'))