You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
trezor-firmware/core/tests/test_apps.nem.mosaic.py

169 lines
4.6 KiB

from common import *
if not utils.BITCOIN_ONLY:
from trezor.messages.NEMMosaic import NEMMosaic
from apps.nem.mosaic.helpers import get_mosaic_definition
from apps.nem.transfer import *
from apps.nem.transfer.serialize import *
@unittest.skipUnless(not utils.BITCOIN_ONLY, "altcoin")
class TestNemMosaic(unittest.TestCase):
def test_get_mosaic_definition(self):
m = get_mosaic_definition("nem", "xem", 104)
self.assertEqual(m["name"], "NEM")
self.assertEqual(m["ticker"], " XEM")
m = get_mosaic_definition("nem", "xxx", 104)
self.assertEqual(m, None)
m = get_mosaic_definition("aaaa", "xxx", 104)
self.assertEqual(m, None)
m = get_mosaic_definition("pacnem", "cheese", 104)
self.assertEqual(m["name"], "PacNEM Score Tokens")
self.assertEqual(m["ticker"], " PAC:CHS")
self.assertEqual(m["fee"], 100)
def test_mosaic_canonicalization(self):
a = NEMMosaic()
a.namespace = 'abc'
a.quantity = 3
a.mosaic = 'mosaic'
b = NEMMosaic()
b.namespace = 'abc'
b.quantity = 4
b.mosaic = 'a'
c = NEMMosaic()
c.namespace = 'zzz'
c.quantity = 3
c.mosaic = 'mosaic'
d = NEMMosaic()
d.namespace = 'abc'
d.quantity = 8
d.mosaic = 'mosaic'
e = NEMMosaic()
e.namespace = 'aaa'
e.quantity = 1
e.mosaic = 'mosaic'
f = NEMMosaic()
f.namespace = 'aaa'
f.quantity = 1
f.mosaic = 'mosaicz'
g = NEMMosaic()
g.namespace = 'zzz'
g.quantity = 30
g.mosaic = 'mosaic'
res = canonicalize_mosaics([a, b, c, d, e, f, g])
self.assertEqual(res, [e, f, b, a, c])
self.assertEqual(res[2].quantity, b.quantity)
self.assertEqual(res[3].quantity, 3 + 8) # a + d
self.assertEqual(res[4].quantity, 3 + 30) # c + g
def test_mosaic_merge(self):
a = NEMMosaic()
a.namespace = 'abc'
a.quantity = 1
a.mosaic = 'mosaic'
b = NEMMosaic()
b.namespace = 'abc'
b.quantity = 1
b.mosaic = 'mosaic'
merged = merge_mosaics([a, b])
self.assertEqual(merged[0].quantity, 2)
self.assertEqual(len(merged), 1)
a.quantity = 1
b.quantity = 10
merged = merge_mosaics([a, b])
self.assertEqual(merged[0].quantity, 11)
a.namespace = 'abcdef'
merged = merge_mosaics([a, b])
self.assertEqual(len(merged), 2)
c = NEMMosaic()
c.namespace = 'abc'
c.mosaic = 'xxx'
c.quantity = 2
merged = merge_mosaics([a, b, c])
self.assertEqual(len(merged), 3)
a.namespace = 'abcdef'
a.quantity = 1
a.mosaic = 'mosaic'
b.namespace = 'abc'
b.quantity = 2
b.mosaic = 'mosaic'
c.namespace = 'abc'
c.mosaic = 'mosaic'
c.quantity = 3
merged = merge_mosaics([a, b, c])
self.assertEqual(merged[0].quantity, 1)
self.assertEqual(merged[1].quantity, 5)
self.assertEqual(len(merged), 2)
a.namespace = 'abc'
a.quantity = 1
a.mosaic = 'mosaic'
b.namespace = 'abc'
b.quantity = 2
b.mosaic = 'mosaic'
c.namespace = 'abc'
c.mosaic = 'mosaic'
c.quantity = 3
merged = merge_mosaics([a, b, c])
self.assertEqual(merged[0].quantity, 6)
self.assertEqual(len(merged), 1)
def test_mosaic_sort(self):
a = NEMMosaic()
a.namespace = 'abcz'
a.quantity = 1
a.mosaic = 'mosaic'
b = NEMMosaic()
b.namespace = 'abca'
b.quantity = 1
b.mosaic = 'mosaic'
res = sort_mosaics([a, b])
self.assertEqual(res, [b, a])
a.namespace = ''
b.namespace = 'a.b.c'
res = sort_mosaics([a, b])
self.assertEqual(res, [a, b])
a.namespace = 'z.z.z'
b.namespace = 'a.b.c'
res = sort_mosaics([a, b])
self.assertEqual(res, [b, a])
a.namespace = 'a'
b.namespace = 'a'
a.mosaic = 'mosaic'
b.mosaic = 'mosaic'
res = sort_mosaics([a, b])
self.assertEqual(res, [a, b])
a.mosaic = 'www'
b.mosaic = 'aaa'
res = sort_mosaics([a, b])
self.assertEqual(res, [b, a])
c = NEMMosaic()
c.namespace = 'a'
c.mosaic = 'zzz'
res = sort_mosaics([a, b, c])
self.assertEqual(res, [b, a, c])
c.mosaic = 'bbb'
res = sort_mosaics([a, b, c])
self.assertEqual(res, [b, c, a])
if __name__ == '__main__':
unittest.main()