From 765738d9ee771fbbcba653d3a4ab766175e6456b Mon Sep 17 00:00:00 2001 From: Frederik Jaeckel Date: Wed, 7 Jun 2023 20:06:36 +0200 Subject: [PATCH] test: add more context --- tests/asset.py | 993 ++++++++++++++++++++++++------------------------ tests/rate.py | 42 +- tests/source.py | 109 +++--- tests/wizard.py | 87 +++-- 4 files changed, 616 insertions(+), 615 deletions(-) diff --git a/tests/asset.py b/tests/asset.py index 98497d1..d184fc3 100644 --- a/tests/asset.py +++ b/tests/asset.py @@ -85,25 +85,25 @@ class AssetTestCase(object): name='Product 1', description='some asset') - asset = self.prep_asset_item( - company=company, - product=product) - self.assertEqual(asset.symbol, 'usd/u') - self.assertEqual(asset.asset_symbol.symbol, 'usd/u') + asset = self.prep_asset_item( + company=company, + product=product) + self.assertEqual(asset.symbol, 'usd/u') + self.assertEqual(asset.asset_symbol.symbol, 'usd/u') - # check ranges - Asset.write(*[ - [asset], - { - 'currency_digits': 1, - }]) - self.assertRaisesRegex( - UserError, - 'ss', - Asset.write, - *[[asset], { - 'currency_digits': -1, - }]) + # check ranges + Asset.write(*[ + [asset], + { + 'currency_digits': 1, + }]) + self.assertRaisesRegex( + UserError, + 'ss', + Asset.write, + *[[asset], { + 'currency_digits': -1, + }]) @with_transaction() def test_asset_rec_name(self): @@ -117,24 +117,26 @@ class AssetTestCase(object): name='Product 1', description='some asset') - asset = self.prep_asset_item( - company=company, - product=product) + asset = self.prep_asset_item( + company=company, + product=product) - self.assertEqual(asset.rec_name, 'Product 1 | - usd/u | -') + self.assertEqual(asset.rec_name, 'Product 1 | - usd/u | -') - Asset.write(*[ - [asset], - { - 'rates': [('create', [{ - 'date': date(2022, 5, 15), - 'rate': Decimal('2.45'), - }])], - }]) - self.assertEqual( - asset.rec_name, - 'Product 1 | 2.4500 usd/u | 05/15/2022') - self.assertEqual(Asset.search_count([('name', '=', 'Product 1')]), 1) + Asset.write(*[ + [asset], + { + 'rates': [('create', [{ + 'date': date(2022, 5, 15), + 'rate': Decimal('2.45'), + }])], + }]) + self.assertEqual( + asset.rec_name, + 'Product 1 | 2.4500 usd/u | 05/15/2022') + self.assertEqual( + Asset.search_count([('name', '=', 'Product 1')]), + 1) @with_transaction() def test_asset_order_and_search_rate_and_date(self): @@ -151,71 +153,67 @@ class AssetTestCase(object): name='Product 2', description='some asset') - asset1 = self.prep_asset_item( - company=company, - product=product1) - asset2 = self.prep_asset_item( - company=company, - product=product2) + asset1 = self.prep_asset_item(company=company, product=product1) + asset2 = self.prep_asset_item(company=company, product=product2) - Asset.write(*[ - [asset1], - { - 'rates': [('create', [{ - 'date': date(2022, 5, 18), - 'rate': Decimal('3.5'), - }, { - 'date': date(2022, 5, 15), - 'rate': Decimal('2.45'), - }])], - }, - [asset2], - { - 'rates': [('create', [{ - 'date': date(2022, 5, 17), - 'rate': Decimal('2.6'), - }, { - 'date': date(2022, 5, 14), - 'rate': Decimal('2.4'), - }])], - }, - ]) - self.assertEqual( - asset1.rec_name, - 'Product 1 | 3.5000 usd/u | 05/18/2022') - self.assertEqual( - asset2.rec_name, - 'Product 2 | 2.6000 usd/u | 05/17/2022') + Asset.write(*[ + [asset1], + { + 'rates': [('create', [{ + 'date': date(2022, 5, 18), + 'rate': Decimal('3.5'), + }, { + 'date': date(2022, 5, 15), + 'rate': Decimal('2.45'), + }])], + }, + [asset2], + { + 'rates': [('create', [{ + 'date': date(2022, 5, 17), + 'rate': Decimal('2.6'), + }, { + 'date': date(2022, 5, 14), + 'rate': Decimal('2.4'), + }])], + }, + ]) + self.assertEqual( + asset1.rec_name, + 'Product 1 | 3.5000 usd/u | 05/18/2022') + self.assertEqual( + asset2.rec_name, + 'Product 2 | 2.6000 usd/u | 05/17/2022') - assets = Asset.search([], order=[('date', 'ASC')]) - self.assertEqual(len(assets), 2) - self.assertEqual(assets[0].date, date(2022, 5, 17)) - self.assertEqual(assets[1].date, date(2022, 5, 18)) + assets = Asset.search([], order=[('date', 'ASC')]) + self.assertEqual(len(assets), 2) + self.assertEqual(assets[0].date, date(2022, 5, 17)) + self.assertEqual(assets[1].date, date(2022, 5, 18)) - assets = Asset.search([], order=[('date', 'DESC')]) - self.assertEqual(len(assets), 2) - self.assertEqual(assets[0].date, date(2022, 5, 18)) - self.assertEqual(assets[1].date, date(2022, 5, 17)) + assets = Asset.search([], order=[('date', 'DESC')]) + self.assertEqual(len(assets), 2) + self.assertEqual(assets[0].date, date(2022, 5, 18)) + self.assertEqual(assets[1].date, date(2022, 5, 17)) - assets = Asset.search([], order=[('rate', 'ASC')]) - self.assertEqual(len(assets), 2) - self.assertEqual(assets[0].rate, Decimal('2.6')) - self.assertEqual(assets[1].rate, Decimal('3.5')) + assets = Asset.search([], order=[('rate', 'ASC')]) + self.assertEqual(len(assets), 2) + self.assertEqual(assets[0].rate, Decimal('2.6')) + self.assertEqual(assets[1].rate, Decimal('3.5')) - assets = Asset.search([], order=[('rate', 'DESC')]) - self.assertEqual(len(assets), 2) - self.assertEqual(assets[0].rate, Decimal('3.5')) - self.assertEqual(assets[1].rate, Decimal('2.6')) + assets = Asset.search([], order=[('rate', 'DESC')]) + self.assertEqual(len(assets), 2) + self.assertEqual(assets[0].rate, Decimal('3.5')) + self.assertEqual(assets[1].rate, Decimal('2.6')) - self.assertEqual(Asset.search_count([ - ('date', '=', date(2022, 5, 17)), - ]), 1) - self.assertEqual(Asset.search_count([ - ('date', '>=', date(2022, 5, 17)), - ]), 2) - self.assertEqual(Asset.search_count([ - ('date', '<', date(2022, 5, 17)), - ]), 0) + self.assertEqual(Asset.search_count([ + ('date', '=', date(2022, 5, 17)), + ]), 1) + self.assertEqual(Asset.search_count([ + ('date', '>=', date(2022, 5, 17)), + ]), 2) + self.assertEqual(Asset.search_count([ + ('date', '<', date(2022, 5, 17)), + ]), 0) @with_transaction() def test_asset_percentages_dateselect1(self): @@ -231,59 +229,57 @@ class AssetTestCase(object): name='Product 1', description='some asset') - asset1 = self.prep_asset_item( - company=company, - product=product) - self.assertEqual(asset1.rec_name, 'Product 1 | - usd/u | -') + asset1 = self.prep_asset_item(company=company, product=product) + self.assertEqual(asset1.rec_name, 'Product 1 | - usd/u | -') - Asset.write(*[ - [asset1], - { - 'rates': [('create', [{ - 'date': date(2022, 5, 15), - 'rate': Decimal('2.45'), - }, { - 'date': date(2022, 5, 16), - 'rate': Decimal('2.6'), - }, { - 'date': date(2022, 5, 12), - 'rate': Decimal('2.0'), - }, { - 'date': date(2022, 5, 3), - 'rate': Decimal('3.6'), - }])], - }, - ]) - self.assertEqual( - asset1.rec_name, - 'Product 1 | 2.6000 usd/u | 05/16/2022') - self.assertEqual(len(asset1.rates), 4) - self.assertEqual(asset1.rates[0].date, date(2022, 5, 16)) - self.assertEqual(asset1.rates[1].date, date(2022, 5, 15)) - self.assertEqual(asset1.rates[2].date, date(2022, 5, 12)) - self.assertEqual(asset1.rates[3].date, date(2022, 5, 3)) - - # query fixed date - tab_percent = Asset.get_percentage_sql(days=0) - with Transaction().set_context({ - 'qdate': date(2022, 5, 16)}): - query = tab_percent.select( - tab_percent.id, - tab_percent.date, - tab_percent.percent, - where=tab_percent.id == asset1.id, - ) - cursor.execute(*query) - records = cursor.fetchall() - - # there should be one record, three colums - self.assertEqual(len(records), 1) - self.assertEqual(len(records[0]), 3) - self.assertEqual(records[0][0], asset1.id) - self.assertEqual(records[0][1], date(2022, 5, 16)) + Asset.write(*[ + [asset1], + { + 'rates': [('create', [{ + 'date': date(2022, 5, 15), + 'rate': Decimal('2.45'), + }, { + 'date': date(2022, 5, 16), + 'rate': Decimal('2.6'), + }, { + 'date': date(2022, 5, 12), + 'rate': Decimal('2.0'), + }, { + 'date': date(2022, 5, 3), + 'rate': Decimal('3.6'), + }])], + }, + ]) self.assertEqual( - records[0][2].quantize(Decimal('0.01')), - Decimal('6.12')) + asset1.rec_name, + 'Product 1 | 2.6000 usd/u | 05/16/2022') + self.assertEqual(len(asset1.rates), 4) + self.assertEqual(asset1.rates[0].date, date(2022, 5, 16)) + self.assertEqual(asset1.rates[1].date, date(2022, 5, 15)) + self.assertEqual(asset1.rates[2].date, date(2022, 5, 12)) + self.assertEqual(asset1.rates[3].date, date(2022, 5, 3)) + + # query fixed date + tab_percent = Asset.get_percentage_sql(days=0) + with Transaction().set_context({ + 'qdate': date(2022, 5, 16)}): + query = tab_percent.select( + tab_percent.id, + tab_percent.date, + tab_percent.percent, + where=tab_percent.id == asset1.id, + ) + cursor.execute(*query) + records = cursor.fetchall() + + # there should be one record, three colums + self.assertEqual(len(records), 1) + self.assertEqual(len(records[0]), 3) + self.assertEqual(records[0][0], asset1.id) + self.assertEqual(records[0][1], date(2022, 5, 16)) + self.assertEqual( + records[0][2].quantize(Decimal('0.01')), + Decimal('6.12')) @with_transaction() def test_asset_percentages_daterange(self): @@ -298,104 +294,100 @@ class AssetTestCase(object): name='Product 1', description='some asset') - asset1 = self.prep_asset_item( - company=company, - product=product) - asset2 = self.prep_asset_item( - company=company, - product=product) + asset1 = self.prep_asset_item(company=company, product=product) + asset2 = self.prep_asset_item(company=company, product=product) - self.assertEqual(asset1.rec_name, 'Product 1 | - usd/u | -') - self.assertEqual(asset2.rec_name, 'Product 1 | - usd/u | -') + self.assertEqual(asset1.rec_name, 'Product 1 | - usd/u | -') + self.assertEqual(asset2.rec_name, 'Product 1 | - usd/u | -') - Asset.write(*[ - [asset1], - { - 'rates': [('create', [{ - 'date': date(2022, 5, 15), - 'rate': Decimal('2.45'), - }, { - 'date': date(2022, 5, 16), - 'rate': Decimal('2.6'), - }])], - }, - [asset2], - { - 'rates': [('create', [{ - 'date': date(2022, 5, 14), - 'rate': Decimal('5.75'), - }, { - 'date': date(2022, 5, 15), - 'rate': Decimal('5.25'), - }])], - }, - ]) - self.assertEqual( - asset1.rec_name, - 'Product 1 | 2.6000 usd/u | 05/16/2022') - self.assertEqual( - asset2.rec_name, - 'Product 1 | 5.2500 usd/u | 05/15/2022') - self.assertEqual(asset1.change_day1, Decimal('6.12')) - self.assertEqual(asset2.change_day1, Decimal('-8.7')) - self.assertEqual(asset1.change_month1, None) - self.assertEqual(asset2.change_month1, None) - self.assertEqual(asset1.change_month3, None) - self.assertEqual(asset2.change_month3, None) - self.assertEqual(asset1.change_month6, None) - self.assertEqual(asset2.change_month6, None) - self.assertEqual(asset1.change_month12, None) - self.assertEqual(asset2.change_month12, None) + Asset.write(*[ + [asset1], + { + 'rates': [('create', [{ + 'date': date(2022, 5, 15), + 'rate': Decimal('2.45'), + }, { + 'date': date(2022, 5, 16), + 'rate': Decimal('2.6'), + }])], + }, + [asset2], + { + 'rates': [('create', [{ + 'date': date(2022, 5, 14), + 'rate': Decimal('5.75'), + }, { + 'date': date(2022, 5, 15), + 'rate': Decimal('5.25'), + }])], + }, + ]) + self.assertEqual( + asset1.rec_name, + 'Product 1 | 2.6000 usd/u | 05/16/2022') + self.assertEqual( + asset2.rec_name, + 'Product 1 | 5.2500 usd/u | 05/15/2022') + self.assertEqual(asset1.change_day1, Decimal('6.12')) + self.assertEqual(asset2.change_day1, Decimal('-8.7')) + self.assertEqual(asset1.change_month1, None) + self.assertEqual(asset2.change_month1, None) + self.assertEqual(asset1.change_month3, None) + self.assertEqual(asset2.change_month3, None) + self.assertEqual(asset1.change_month6, None) + self.assertEqual(asset2.change_month6, None) + self.assertEqual(asset1.change_month12, None) + self.assertEqual(asset2.change_month12, None) - # check ordering - assets = Asset.search([ - ('change_day1', '!=', Decimal('0.0')), - ], order=[('change_day1', 'ASC')]) - self.assertEqual(len(assets), 2) - self.assertEqual(assets[0].change_day1, Decimal('-8.7')) - self.assertEqual(assets[1].change_day1, Decimal('6.12')) + # check ordering + assets = Asset.search([ + ('change_day1', '!=', Decimal('0.0')), + ], order=[('change_day1', 'ASC')]) + self.assertEqual(len(assets), 2) + self.assertEqual(assets[0].change_day1, Decimal('-8.7')) + self.assertEqual(assets[1].change_day1, Decimal('6.12')) - assets = Asset.search([ - ('change_day1', '!=', Decimal('0.0')), - ], order=[('change_day1', 'DESC')]) - self.assertEqual(len(assets), 2) - self.assertEqual(assets[0].change_day1, Decimal('6.12')) - self.assertEqual(assets[1].change_day1, Decimal('-8.7')) + assets = Asset.search([ + ('change_day1', '!=', Decimal('0.0')), + ], order=[('change_day1', 'DESC')]) + self.assertEqual(len(assets), 2) + self.assertEqual(assets[0].change_day1, Decimal('6.12')) + self.assertEqual(assets[1].change_day1, Decimal('-8.7')) - # check 5-day-range - # four days - Asset.write(*[ - [asset1], - { - 'rates': [('write', [asset1.rates[1]], { - 'date': date(2022, 5, 12), - })], - }]) - self.assertEqual(asset1.rates[0].date, date(2022, 5, 16)) - self.assertEqual(asset1.rates[1].date, date(2022, 5, 12)) - self.assertEqual(asset1.change_day1, Decimal('6.12')) - # five days - Asset.write(*[ - [asset1], - { - 'rates': [('write', [asset1.rates[1]], { - 'date': date(2022, 5, 11), - })], - }]) - self.assertEqual(asset1.rates[0].date, date(2022, 5, 16)) - self.assertEqual(asset1.rates[1].date, date(2022, 5, 11)) - self.assertEqual(asset1.change_day1, Decimal('6.12')) - # six days - Asset.write(*[ - [asset1], - { - 'rates': [('write', [asset1.rates[1]], { - 'date': date(2022, 5, 10), - })], - }]) - self.assertEqual(asset1.rates[0].date, date(2022, 5, 16)) - self.assertEqual(asset1.rates[1].date, date(2022, 5, 10)) - self.assertEqual(asset1.change_day1, None) + # check 5-day-range + # four days + Asset.write(*[ + [asset1], + { + 'rates': [('write', [asset1.rates[1]], { + 'date': date(2022, 5, 12), + })], + }]) + self.assertEqual(asset1.rates[0].date, date(2022, 5, 16)) + self.assertEqual(asset1.rates[1].date, date(2022, 5, 12)) + self.assertEqual(asset1.change_day1, Decimal('6.12')) + # five days + Asset.write(*[ + [asset1], + { + 'rates': [('write', [asset1.rates[1]], { + 'date': date(2022, 5, 11), + })], + }]) + self.assertEqual(asset1.rates[0].date, date(2022, 5, 16)) + self.assertEqual(asset1.rates[1].date, date(2022, 5, 11)) + self.assertEqual(asset1.change_day1, Decimal('6.12')) + # six days + Asset.write(*[ + [asset1], + { + 'rates': [('write', [asset1.rates[1]], { + 'date': date(2022, 5, 10), + })], + }]) + self.assertEqual(asset1.rates[0].date, date(2022, 5, 16)) + self.assertEqual(asset1.rates[1].date, date(2022, 5, 10)) + self.assertEqual(asset1.change_day1, None) @with_transaction() def test_asset_percentges_values(self): @@ -409,78 +401,76 @@ class AssetTestCase(object): name='Product 1', description='some asset') - asset1 = self.prep_asset_item( - company=company, - product=product) + asset1 = self.prep_asset_item(company=company, product=product) - self.assertEqual(asset1.rec_name, 'Product 1 | - usd/u | -') + self.assertEqual(asset1.rec_name, 'Product 1 | - usd/u | -') - Asset.write(*[ - [asset1], - { - 'rates': [('create', [{ - 'date': date(2022, 5, 15), - 'rate': Decimal('2.45'), - }, { - 'date': date(2022, 5, 16), - 'rate': Decimal('2.6'), - }, { - 'date': date(2022, 4, 14), - 'rate': Decimal('2.2'), - }, { - 'date': date(2022, 2, 14), - 'rate': Decimal('2.8'), - },])], - }]) - self.assertEqual( - asset1.rec_name, - 'Product 1 | 2.6000 usd/u | 05/16/2022') - self.assertEqual(len(asset1.rates), 4) - self.assertEqual(asset1.rates[0].date, date(2022, 5, 16)) - self.assertEqual(asset1.rates[1].date, date(2022, 5, 15)) - self.assertEqual(asset1.rates[2].date, date(2022, 4, 14)) - self.assertEqual(asset1.rates[3].date, date(2022, 2, 14)) + Asset.write(*[ + [asset1], + { + 'rates': [('create', [{ + 'date': date(2022, 5, 15), + 'rate': Decimal('2.45'), + }, { + 'date': date(2022, 5, 16), + 'rate': Decimal('2.6'), + }, { + 'date': date(2022, 4, 14), + 'rate': Decimal('2.2'), + }, { + 'date': date(2022, 2, 14), + 'rate': Decimal('2.8'), + },])], + }]) + self.assertEqual( + asset1.rec_name, + 'Product 1 | 2.6000 usd/u | 05/16/2022') + self.assertEqual(len(asset1.rates), 4) + self.assertEqual(asset1.rates[0].date, date(2022, 5, 16)) + self.assertEqual(asset1.rates[1].date, date(2022, 5, 15)) + self.assertEqual(asset1.rates[2].date, date(2022, 4, 14)) + self.assertEqual(asset1.rates[3].date, date(2022, 2, 14)) - self.assertEqual(asset1.change_day1, Decimal('6.12')) - self.assertEqual(asset1.change_month1, Decimal('18.18')) - self.assertEqual(asset1.change_month3, Decimal('-7.14')) - self.assertEqual(asset1.change_month6, None) - self.assertEqual(asset1.change_month12, None) + self.assertEqual(asset1.change_day1, Decimal('6.12')) + self.assertEqual(asset1.change_month1, Decimal('18.18')) + self.assertEqual(asset1.change_month3, Decimal('-7.14')) + self.assertEqual(asset1.change_month6, None) + self.assertEqual(asset1.change_month12, None) - # call order-functions - Asset.search([], order=[('change_day1', 'ASC')]) - Asset.search([], order=[('change_month1', 'ASC')]) - Asset.search([], order=[('change_month3', 'ASC')]) - Asset.search([], order=[('change_month6', 'ASC')]) - Asset.search([], order=[('change_month12', 'ASC')]) + # call order-functions + Asset.search([], order=[('change_day1', 'ASC')]) + Asset.search([], order=[('change_month1', 'ASC')]) + Asset.search([], order=[('change_month3', 'ASC')]) + Asset.search([], order=[('change_month6', 'ASC')]) + Asset.search([], order=[('change_month12', 'ASC')]) - # searcher - self.assertEqual( - Asset.search_count([('change_day1', '>', Decimal('6.1'))]), - 1) - self.assertEqual( - Asset.search_count([('change_day1', '>', Decimal('6.15'))]), - 0) - self.assertEqual( - Asset.search_count([('change_day1', '=', Decimal('6.12'))]), - 1) + # searcher + self.assertEqual( + Asset.search_count([('change_day1', '>', Decimal('6.1'))]), + 1) + self.assertEqual( + Asset.search_count([('change_day1', '>', Decimal('6.15'))]), + 0) + self.assertEqual( + Asset.search_count([('change_day1', '=', Decimal('6.12'))]), + 1) - self.assertEqual( - Asset.search_count([('change_month1', '>', Decimal('18.0'))]), - 1) - self.assertEqual( - Asset.search_count([('change_month1', '>', Decimal('18.18'))]), - 0) - self.assertEqual( - Asset.search_count([('change_month1', '=', Decimal('18.18'))]), - 1) + self.assertEqual( + Asset.search_count([('change_month1', '>', Decimal('18.0'))]), + 1) + self.assertEqual( + Asset.search_count([('change_month1', '>', Decimal('18.18'))]), + 0) + self.assertEqual( + Asset.search_count([('change_month1', '=', Decimal('18.18'))]), + 1) - self.assertEqual( - Asset.search_count([('change_month3', '=', Decimal('-7.14'))]), - 1) - self.assertEqual( - Asset.search_count([('change_month6', '=', None)]), - 1) + self.assertEqual( + Asset.search_count([('change_month3', '=', Decimal('-7.14'))]), + 1) + self.assertEqual( + Asset.search_count([('change_month6', '=', None)]), + 1) @with_transaction() def test_asset_check_onlinesource_onoff(self): @@ -495,28 +485,26 @@ class AssetTestCase(object): name='Product 1', description='some asset') - asset = self.prep_asset_item( - company=company, - product=product) + asset = self.prep_asset_item(company=company, product=product) - o_source, = OnlineSource.create([{ - 'name': 'Source 1', - }]) + o_source, = OnlineSource.create([{ + 'name': 'Source 1', + }]) - self.assertEqual(len(asset.updtsources), 0) - self.assertEqual(asset.updttime, time(14, 0)) + self.assertEqual(len(asset.updtsources), 0) + self.assertEqual(asset.updttime, time(14, 0)) - asset.updtsources = [o_source] - asset.updttime = time(10, 45) - asset.save() - self.assertEqual(len(asset.updtsources), 1) - self.assertEqual(asset.updtsources[0].rec_name, 'Source 1') - self.assertEqual(asset.updttime, time(10, 45)) + asset.updtsources = [o_source] + asset.updttime = time(10, 45) + asset.save() + self.assertEqual(len(asset.updtsources), 1) + self.assertEqual(asset.updtsources[0].rec_name, 'Source 1') + self.assertEqual(asset.updttime, time(10, 45)) - asset.updtsources = [] - asset.on_change_updtsources() - self.assertEqual(len(asset.updtsources), 0) - self.assertEqual(asset.updttime, None) + asset.updtsources = [] + asset.on_change_updtsources() + self.assertEqual(len(asset.updtsources), 0) + self.assertEqual(asset.updttime, None) @with_transaction() def test_asset_check_update_select(self): @@ -533,97 +521,95 @@ class AssetTestCase(object): name='Product 1', description='some asset') - asset = self.prep_asset_item( - company=company, - product=product) + asset = self.prep_asset_item(company=company, product=product) - o_source, = OnlineSource.create([{ - 'name': 'Source 1', - }]) - Asset.write(*[ - [asset], - { - 'updtsources': [('add', [o_source.id])], - 'updttime': time(10, 45), - }]) + o_source, = OnlineSource.create([{ + 'name': 'Source 1', + }]) + Asset.write(*[ + [asset], + { + 'updtsources': [('add', [o_source.id])], + 'updttime': time(10, 45), + }]) - with Transaction().set_context({ + with Transaction().set_context({'qdate': date(2022, 10, 14)}): + # re-read to make context work + asset2, = Asset.browse([asset.id]) + + self.assertEqual(len(asset2.updtsources), 1) + self.assertEqual(asset2.updtsources[0].rec_name, 'Source 1') + self.assertEqual(asset2.updttime, time(10, 45)) + self.assertEqual(len(asset2.rates), 0) + # qdate = 2022-10-14 simulates existence of record at this day + # next call would be the 15. - but its saturday, + # next-call-date is moved to 17. + self.assertEqual( + asset2.nextupdate, + datetime(2022, 10, 17, 10, 45)) + + self.assertEqual( + Asset.search_count([ + ('nextupdate', '<', datetime(2022, 10, 17, 10, 45))]), + 0) + self.assertEqual( + Asset.search_count([ + ('nextupdate', '>=', datetime(2022, 10, 17, 10, 45))]), + 1) + + # add rate at next monday + Asset.write(*[ + [asset], + { + 'rates': [('create', [{ + 'date': date(2022, 10, 17), # monday + 'rate': Decimal('1.5'), + }])], + }]) + self.assertEqual(len(asset.rates), 1) - 'qdate': date(2022, 10, 14)}): - # re-read to make context work asset2, = Asset.browse([asset.id]) - - self.assertEqual(len(asset2.updtsources), 1) - self.assertEqual(asset2.updtsources[0].rec_name, 'Source 1') - self.assertEqual(asset2.updttime, time(10, 45)) - self.assertEqual(len(asset2.rates), 0) - # qdate = 2022-10-14 simulates existence of record at this day - # next call would be the 15. - but its saturday, - # next-call-date is moved to 17. - self.assertEqual(asset2.nextupdate, datetime(2022, 10, 17, 10, 45)) + self.assertEqual(asset.updtsources[0].rec_name, 'Source 1') + self.assertEqual(asset.updttime, time(10, 45)) + self.assertEqual(len(asset.rates), 1) + self.assertEqual(asset.rates[0].date, date(2022, 10, 17)) + self.assertEqual(asset.nextupdate, datetime(2022, 10, 18, 10, 45)) self.assertEqual( Asset.search_count([ - ('nextupdate', '<', datetime(2022, 10, 17, 10, 45))]), + ('nextupdate', '<', datetime(2022, 10, 18, 10, 45))]), 0) self.assertEqual( Asset.search_count([ - ('nextupdate', '>=', datetime(2022, 10, 17, 10, 45))]), + ('nextupdate', '>=', datetime(2022, 10, 18, 10, 45))]), 1) - # add rate at next monday - Asset.write(*[ - [asset], - { - 'rates': [('create', [{ - 'date': date(2022, 10, 17), # monday - 'rate': Decimal('1.5'), - }])], - }]) - self.assertEqual(len(asset.rates), 1) + # add rate at today + Asset.write(*[ + [asset], + { + 'rates': [('create', [{ + 'date': date(2022, 10, 18), + 'rate': Decimal('1.5'), + }])], + }]) + self.assertEqual(len(asset.rates), 2) - asset2, = Asset.browse([asset.id]) - self.assertEqual(asset.updtsources[0].rec_name, 'Source 1') - self.assertEqual(asset.updttime, time(10, 45)) - self.assertEqual(len(asset.rates), 1) - self.assertEqual(asset.rates[0].date, date(2022, 10, 17)) - self.assertEqual(asset.nextupdate, datetime(2022, 10, 18, 10, 45)) + asset2, = Asset.browse([asset.id]) + self.assertEqual(asset2.updtsources[0].rec_name, 'Source 1') + self.assertEqual(asset2.updttime, time(10, 45)) + self.assertEqual(len(asset2.rates), 2) + self.assertEqual(asset2.rates[0].date, date(2022, 10, 18)) + self.assertEqual(asset2.nextupdate, datetime(2022, 10, 19, 10, 45)) - self.assertEqual( - Asset.search_count([ - ('nextupdate', '<', datetime(2022, 10, 18, 10, 45))]), - 0) - self.assertEqual( - Asset.search_count([ - ('nextupdate', '>=', datetime(2022, 10, 18, 10, 45))]), - 1) - - # add rate at today - Asset.write(*[ - [asset], - { - 'rates': [('create', [{ - 'date': date(2022, 10, 18), - 'rate': Decimal('1.5'), - }])], - }]) - self.assertEqual(len(asset.rates), 2) - - asset2, = Asset.browse([asset.id]) - self.assertEqual(asset2.updtsources[0].rec_name, 'Source 1') - self.assertEqual(asset2.updttime, time(10, 45)) - self.assertEqual(len(asset2.rates), 2) - self.assertEqual(asset2.rates[0].date, date(2022, 10, 18)) - self.assertEqual(asset2.nextupdate, datetime(2022, 10, 19, 10, 45)) - - self.assertEqual( - Asset.search_count([ - ('nextupdate', '<', datetime(2022, 10, 19, 10, 45))]), - 0) - self.assertEqual( - Asset.search_count([ - ('nextupdate', '>=', datetime(2022, 10, 19, 10, 45))]), - 1) + self.assertEqual( + Asset.search_count([ + ('nextupdate', '<', datetime(2022, 10, 19, 10, 45))]), + 0) + self.assertEqual( + Asset.search_count([ + ('nextupdate', '>=', datetime(2022, 10, 19, 10, 45))]), + 1) @with_transaction() def test_asset_indentifiers(self): @@ -640,102 +626,115 @@ class AssetTestCase(object): product2 = self.prep_asset_product( name='Product gram', unit='g') - asset1 = self.prep_asset_item(company=company, product=product1) - asset2 = self.prep_asset_item(company=company, product=product2) + asset1 = self.prep_asset_item(company=company, product=product1) + asset2 = self.prep_asset_item(company=company, product=product2) - Product.write(*[ - [product1], - { - 'identifiers': [('create', [{ - 'type': 'wkn', - 'code': '965515', - }, { - 'type': 'secsymb', - 'code': '1472977', - }, { - 'type': 'isin', - 'code': 'XC0009655157', - }, ])], - }, - [product2], - { - 'identifiers': [('create', [{ - 'type': 'wkn', - 'code': '965310', - }, { - 'type': 'secsymb', - 'code': '1431157', - }, { - 'type': 'isin', - 'code': 'XC0009653103', - }, ])], - }, - ]) + Product.write(*[ + [product1], + { + 'identifiers': [('create', [{ + 'type': 'wkn', + 'code': '965515', + }, { + 'type': 'secsymb', + 'code': '1472977', + }, { + 'type': 'isin', + 'code': 'XC0009655157', + }, ])], + }, + [product2], + { + 'identifiers': [('create', [{ + 'type': 'wkn', + 'code': '965310', + }, { + 'type': 'secsymb', + 'code': '1431157', + }, { + 'type': 'isin', + 'code': 'XC0009653103', + }, ])], + }, + ]) - self.assertEqual(asset1.wkn, '965515') - self.assertEqual(asset1.isin, 'XC0009655157') - self.assertEqual(asset1.secsymb, '1472977') + self.assertEqual(asset1.wkn, '965515') + self.assertEqual(asset1.isin, 'XC0009655157') + self.assertEqual(asset1.secsymb, '1472977') - self.assertEqual(Asset.search_count([('wkn', '=', '965515')]), 1) - self.assertEqual(Asset.search_count([('isin', '=', 'XC0009655157')]), 1) - self.assertEqual(Asset.search_count([('secsymb', '=', '1472977')]), 1) + self.assertEqual( + Asset.search_count([('wkn', '=', '965515')]), + 1) + self.assertEqual( + Asset.search_count([('isin', '=', 'XC0009655157')]), + 1) + self.assertEqual( + Asset.search_count([('secsymb', '=', '1472977')]), + 1) - self.assertEqual( - Asset.search_count([('rec_name', '=', '965515')]), - 1) - self.assertEqual( - Asset.search_count([('rec_name', '=', 'XC0009655157')]), - 1) - self.assertEqual( - Asset.search_count([('rec_name', '=', '1472977')]), - 1) + self.assertEqual( + Asset.search_count([('rec_name', '=', '965515')]), + 1) + self.assertEqual( + Asset.search_count([('rec_name', '=', 'XC0009655157')]), + 1) + self.assertEqual( + Asset.search_count([('rec_name', '=', '1472977')]), + 1) - self.assertEqual(Asset.search_count([('name', '=', '965515')]), 1) - self.assertEqual(Asset.search_count([('name', '=', 'XC0009655157')]), 1) - self.assertEqual(Asset.search_count([('name', '=', '1472977')]), 1) + self.assertEqual( + Asset.search_count([('name', '=', '965515')]), + 1) + self.assertEqual( + Asset.search_count([('name', '=', 'XC0009655157')]), + 1) + self.assertEqual( + Asset.search_count([('name', '=', '1472977')]), + 1) + self.assertEqual( + Asset.search_count([('name', '=', 'Product unit')]), + 1) - self.assertEqual(Asset.search_count([('name', '=', 'Product unit')]), 1) + self.assertEqual(Asset.search_count([ + ('wkn', 'ilike', '9655%'), + ]), 1) + self.assertEqual(Asset.search_count([ + ('wkn', 'ilike', '965%'), + ]), 2) - self.assertEqual(Asset.search_count([ - ('wkn', 'ilike', '9655%'), - ]), 1) - self.assertEqual(Asset.search_count([ - ('wkn', 'ilike', '965%'), - ]), 2) + self.assertEqual(asset2.wkn, '965310') + self.assertEqual(asset2.isin, 'XC0009653103') + self.assertEqual(asset2.secsymb, '1431157') - self.assertEqual(asset2.wkn, '965310') - self.assertEqual(asset2.isin, 'XC0009653103') - self.assertEqual(asset2.secsymb, '1431157') + # order wkn + assets = Asset.search([], order=[('wkn', 'ASC')]) + self.assertEqual(len(assets), 2) + self.assertEqual(assets[0].wkn, '965310') + self.assertEqual(assets[1].wkn, '965515') + assets = Asset.search([], order=[('wkn', 'DESC')]) + self.assertEqual(len(assets), 2) + self.assertEqual(assets[0].wkn, '965515') + self.assertEqual(assets[1].wkn, '965310') - # order wkn - assets = Asset.search([], order=[('wkn', 'ASC')]) - self.assertEqual(len(assets), 2) - self.assertEqual(assets[0].wkn, '965310') - self.assertEqual(assets[1].wkn, '965515') - assets = Asset.search([], order=[('wkn', 'DESC')]) - self.assertEqual(len(assets), 2) - self.assertEqual(assets[0].wkn, '965515') - self.assertEqual(assets[1].wkn, '965310') + # order isin + assets = Asset.search([], order=[('isin', 'ASC')]) + self.assertEqual(len(assets), 2) + self.assertEqual(assets[0].isin, 'XC0009653103') + self.assertEqual(assets[1].isin, 'XC0009655157') + assets = Asset.search([], order=[('wkn', 'DESC')]) + self.assertEqual(len(assets), 2) + self.assertEqual(assets[0].isin, 'XC0009655157') + self.assertEqual(assets[1].isin, 'XC0009653103') - # order isin - assets = Asset.search([], order=[('isin', 'ASC')]) - self.assertEqual(len(assets), 2) - self.assertEqual(assets[0].isin, 'XC0009653103') - self.assertEqual(assets[1].isin, 'XC0009655157') - assets = Asset.search([], order=[('wkn', 'DESC')]) - self.assertEqual(len(assets), 2) - self.assertEqual(assets[0].isin, 'XC0009655157') - self.assertEqual(assets[1].isin, 'XC0009653103') - - # order secsymb - assets = Asset.search([], order=[('secsymb', 'ASC')]) - self.assertEqual(len(assets), 2) - self.assertEqual(assets[0].secsymb, '1431157') - self.assertEqual(assets[1].secsymb, '1472977') - assets = Asset.search([], order=[('wkn', 'DESC')]) - self.assertEqual(len(assets), 2) - self.assertEqual(assets[0].secsymb, '1472977') - self.assertEqual(assets[1].secsymb, '1431157') + # order secsymb + assets = Asset.search([], order=[('secsymb', 'ASC')]) + self.assertEqual(len(assets), 2) + self.assertEqual(assets[0].secsymb, '1431157') + self.assertEqual(assets[1].secsymb, '1472977') + assets = Asset.search([], order=[('wkn', 'DESC')]) + self.assertEqual(len(assets), 2) + self.assertEqual(assets[0].secsymb, '1472977') + self.assertEqual(assets[1].secsymb, '1431157') @with_transaction() def test_asset_check_product_update(self): @@ -749,23 +748,23 @@ class AssetTestCase(object): name='Product gram', unit='g') self.assertEqual(product2.default_uom.digits, 2) - asset = self.prep_asset_item(company=company, product=product1) + asset = self.prep_asset_item(company=company, product=product1) - self.assertEqual(asset.product.rec_name, 'Product unit') - self.assertEqual(asset.product.default_uom.rec_name, 'Unit') - self.assertEqual(asset.uom.rec_name, 'Unit') - self.assertEqual(asset.currency_digits, 4) + self.assertEqual(asset.product.rec_name, 'Product unit') + self.assertEqual(asset.product.default_uom.rec_name, 'Unit') + self.assertEqual(asset.uom.rec_name, 'Unit') + self.assertEqual(asset.currency_digits, 4) - asset.product = product2 - asset.on_change_product() - asset.save() + asset.product = product2 + asset.on_change_product() + asset.save() - self.assertEqual(asset.product.rec_name, 'Product gram') - self.assertEqual(asset.product.default_uom.rec_name, 'Gram') - self.assertEqual(asset.uom.rec_name, 'Gram') + self.assertEqual(asset.product.rec_name, 'Product gram') + self.assertEqual(asset.product.default_uom.rec_name, 'Gram') + self.assertEqual(asset.uom.rec_name, 'Gram') - asset.on_change_currency() - asset.save() - self.assertEqual(asset.currency_digits, 2) + asset.on_change_currency() + asset.save() + self.assertEqual(asset.currency_digits, 2) # end AssetTestCase diff --git a/tests/rate.py b/tests/rate.py index bc8b75d..1f61754 100644 --- a/tests/rate.py +++ b/tests/rate.py @@ -25,28 +25,26 @@ class RateTestCase(object): name='Product 1', description='some asset') - asset = self.prep_asset_item( - company=company, - product=product) + asset = self.prep_asset_item(company=company, product=product) - Asset.write(*[ - [asset], - { - 'rates': [('create', [{ - 'date': date(2022, 5, 1), - 'rate': Decimal('2.5'), - }, { - 'date': date(2022, 5, 2), - 'rate': Decimal('2.8'), - }])], - }]) - self.assertEqual(len(asset.rates), 2) - self.assertEqual(asset.rates[0].date, date(2022, 5, 2)) - self.assertEqual(asset.rates[0].rate, Decimal('2.8')) - self.assertEqual(asset.rates[0].uom.rec_name, 'Unit') - self.assertEqual(asset.rates[0].asset_digits, 4) - self.assertEqual(asset.rates[0].currency.rec_name, 'usd') - self.assertEqual(asset.rates[0].symbol, '%') - self.assertEqual(asset.change_symbol.symbol, '%') + Asset.write(*[ + [asset], + { + 'rates': [('create', [{ + 'date': date(2022, 5, 1), + 'rate': Decimal('2.5'), + }, { + 'date': date(2022, 5, 2), + 'rate': Decimal('2.8'), + }])], + }]) + self.assertEqual(len(asset.rates), 2) + self.assertEqual(asset.rates[0].date, date(2022, 5, 2)) + self.assertEqual(asset.rates[0].rate, Decimal('2.8')) + self.assertEqual(asset.rates[0].uom.rec_name, 'Unit') + self.assertEqual(asset.rates[0].asset_digits, 4) + self.assertEqual(asset.rates[0].currency.rec_name, 'usd') + self.assertEqual(asset.rates[0].symbol, '%') + self.assertEqual(asset.change_symbol.symbol, '%') # end RateTestCase diff --git a/tests/source.py b/tests/source.py index 141463a..f784e4c 100644 --- a/tests/source.py +++ b/tests/source.py @@ -26,74 +26,73 @@ class SourceTestCase(object): Product = pool.get('product.product') company = self.prep_asset_company() - osource, = OSource.create([{ - 'name': 'Source 1', - 'url': 'https://foo.bar/${isin}/${nsin}/${symbol}', - 'rgxdate': 'Course Date (\\d+.\\d+.\\d+) Today', - 'rgxdatefmt': '%d.%m.%Y', - 'rgxrate': 'High (\\d+,\\d+) EUR', - 'rgxdecimal': ',', - }]) - self.assertEqual(osource.rec_name, 'Source 1') - with Transaction().set_context({'company': company.id}): + osource, = OSource.create([{ + 'name': 'Source 1', + 'url': 'https://foo.bar/${isin}/${nsin}/${symbol}', + 'rgxdate': 'Course Date (\\d+.\\d+.\\d+) Today', + 'rgxdatefmt': '%d.%m.%Y', + 'rgxrate': 'High (\\d+,\\d+) EUR', + 'rgxdecimal': ',', + }]) + self.assertEqual(osource.rec_name, 'Source 1') + product = self.prep_asset_product( name='Product 1', description='some asset') - Product.write(*[ - [product], - { - 'identifiers': [('create', [{ - 'type': 'wkn', - 'code': '965515', - }, { - 'type': 'secsymb', - 'code': '1472977', - }, { - 'type': 'isin', - 'code': 'XC0009655157', - }, ])], - }]) + Product.write(*[ + [product], + { + 'identifiers': [('create', [{ + 'type': 'wkn', + 'code': '965515', + }, { + 'type': 'secsymb', + 'code': '1472977', + }, { + 'type': 'isin', + 'code': 'XC0009655157', + }, ])], + }]) - asset = self.prep_asset_item( - company=company, - product=product) + asset = self.prep_asset_item(company=company, product=product) - Asset.write(*[ - [asset], - { - 'updtsources': [('add', [osource.id])], - }]) + Asset.write(*[ + [asset], + { + 'updtsources': [('add', [osource.id])], + }]) - with Transaction().set_context({ - 'qdate': date(2022, 10, 1), # saturday - 'qdatetime': datetime(2022, 10, 2, 10, 0, 0)}): - asset2, = Asset.browse([asset]) - self.assertEqual(asset2.wkn, '965515') - self.assertEqual(asset2.isin, 'XC0009655157') - self.assertEqual(asset2.secsymb, '1472977') - self.assertEqual(asset2.updttime, time(14, 0)) - self.assertEqual(len(asset2.updtsources), 1) - self.assertEqual(asset2.updtsources[0].rec_name, 'Source 1') - self.assertEqual(asset2.updtdays, 'work') - self.assertEqual(asset2.nextupdate, datetime(2022, 10, 3, 14, 0)) - self.assertEqual(len(asset.rates), 0) + with Transaction().set_context({ + 'qdate': date(2022, 10, 1), # saturday + 'qdatetime': datetime(2022, 10, 2, 10, 0, 0)}): + asset2, = Asset.browse([asset]) + self.assertEqual(asset2.wkn, '965515') + self.assertEqual(asset2.isin, 'XC0009655157') + self.assertEqual(asset2.secsymb, '1472977') + self.assertEqual(asset2.updttime, time(14, 0)) + self.assertEqual(len(asset2.updtsources), 1) + self.assertEqual(asset2.updtsources[0].rec_name, 'Source 1') + self.assertEqual(asset2.updtdays, 'work') + self.assertEqual( + asset2.nextupdate, datetime(2022, 10, 3, 14, 0)) + self.assertEqual(len(asset.rates), 0) - # fake server-response - resp1 = Response() - resp1._content = """Response from finance-server + # fake server-response + resp1 = Response() + resp1._content = """Response from finance-server Course Date 14.08.2022 Today High 34,87 EUR """.encode('utf8') - resp1.status_code = 200 - resp1.reason = 'OK' - requests.get = MagicMock(return_value=resp1) + resp1.status_code = 200 + resp1.reason = 'OK' + requests.get = MagicMock(return_value=resp1) - OSource.update_rate(asset) - self.assertEqual(len(asset.rates), 1) - self.assertEqual(asset.rates[0].date, date(2022, 8, 14)) - self.assertEqual(asset.rates[0].rate, Decimal('34.87')) + OSource.update_rate(asset) + self.assertEqual(len(asset.rates), 1) + self.assertEqual(asset.rates[0].date, date(2022, 8, 14)) + self.assertEqual(asset.rates[0].rate, Decimal('34.87')) @with_transaction() def test_waitlist_source_check_regex(self): diff --git a/tests/wizard.py b/tests/wizard.py index 1abd550..2e15dd1 100644 --- a/tests/wizard.py +++ b/tests/wizard.py @@ -21,53 +21,58 @@ class WizardTestCase(object): ImportWiz = pool.get('investment.imp_wiz', type='wizard') company = self.prep_asset_company() - product = self.prep_asset_product( - name='Product 1', - description='some asset') + with Transaction().set_context({'company': company.id}): + product = self.prep_asset_product( + name='Product 1', + description='some asset') - asset = self.prep_asset_item(company=company, product=product) - self.assertEqual(len(asset.rates), 0) + asset = self.prep_asset_item(company=company, product=product) + self.assertEqual(len(asset.rates), 0) - with Transaction().set_context({ - 'active_id': asset.id, - 'active_model': 'investment.asset'}): - (sess_id, start_state, end_state) = ImportWiz.create() - w_obj = ImportWiz(sess_id) - self.assertEqual(start_state, 'start') - self.assertEqual(end_state, 'end') + with Transaction().set_context({ + 'active_id': asset.id, + 'active_model': 'investment.asset'}): + (sess_id, start_state, end_state) = ImportWiz.create() + w_obj = ImportWiz(sess_id) + self.assertEqual(start_state, 'start') + self.assertEqual(end_state, 'end') - # run start - result = ImportWiz.execute(sess_id, {}, start_state) - self.assertEqual(list(result.keys()), ['view']) + # run start + result = ImportWiz.execute(sess_id, {}, start_state) + self.assertEqual(list(result.keys()), ['view']) - self.assertEqual(result['view']['defaults']['asset'], asset.id) - self.assertEqual(result['view']['defaults']['dec_divider'], ',') - self.assertEqual(result['view']['defaults']['date_fmt'], '%d.%m.%Y') - self.assertEqual(result['view']['defaults']['field_delimiter'], ';') + self.assertEqual(result['view']['defaults']['asset'], asset.id) + self.assertEqual(result['view']['defaults']['dec_divider'], ',') + self.assertEqual( + result['view']['defaults']['date_fmt'], + '%d.%m.%Y') + self.assertEqual( + result['view']['defaults']['field_delimiter'], + ';') - w_obj.start.asset = asset - w_obj.start.dec_divider = ',' - w_obj.start.date_fmt = '%d.%m.%Y' - w_obj.start.field_delimiter = ';' + w_obj.start.asset = asset + w_obj.start.dec_divider = ',' + w_obj.start.date_fmt = '%d.%m.%Y' + w_obj.start.field_delimiter = ';' - result = ImportWiz.execute(sess_id, {'start': { - 'asset': asset.id, - 'dec_divider': ',', - 'date_fmt': '%d.%m.%Y', - 'field_delimiter': ';', - 'file_': b'"date";"rate"\n"03.05.2022";"23,56"\n' + - b'"05.05.2022";"24,22"\n"06.05.2022";"25,43"', - }}, 'importf') - self.assertEqual(list(result.keys()), []) - # finish wizard - ImportWiz.delete(sess_id) + result = ImportWiz.execute(sess_id, {'start': { + 'asset': asset.id, + 'dec_divider': ',', + 'date_fmt': '%d.%m.%Y', + 'field_delimiter': ';', + 'file_': b'"date";"rate"\n"03.05.2022";"23,56"\n' + + b'"05.05.2022";"24,22"\n"06.05.2022";"25,43"', + }}, 'importf') + self.assertEqual(list(result.keys()), []) + # finish wizard + ImportWiz.delete(sess_id) - self.assertEqual(len(asset.rates), 3) - self.assertEqual(asset.rates[0].date, date(2022, 5, 6)) - self.assertEqual(asset.rates[0].rate, Decimal('25.43')) - self.assertEqual(asset.rates[1].date, date(2022, 5, 5)) - self.assertEqual(asset.rates[1].rate, Decimal('24.22')) - self.assertEqual(asset.rates[2].date, date(2022, 5, 3)) - self.assertEqual(asset.rates[2].rate, Decimal('23.56')) + self.assertEqual(len(asset.rates), 3) + self.assertEqual(asset.rates[0].date, date(2022, 5, 6)) + self.assertEqual(asset.rates[0].rate, Decimal('25.43')) + self.assertEqual(asset.rates[1].date, date(2022, 5, 5)) + self.assertEqual(asset.rates[1].rate, Decimal('24.22')) + self.assertEqual(asset.rates[2].date, date(2022, 5, 3)) + self.assertEqual(asset.rates[2].rate, Decimal('23.56')) # end WizardTestCase