def test_cache(self): with FileTester.temp_input(self.testcache) as tempfilename: recon = Reconciler(LedgerFile(tempfilename, 'cash')) # saving cache with ending balance "None" causes cache entry to # be removed; first let's make sure it works w/o existing entry assert not os.path.exists(FileTester.CACHE_FILE_TEST) assert recon.ending_balance is None recon.save_statement_info_to_cache() key, cache = recon.get_key_and_cache() self.assertEqual({}, cache) # add entry recon.ending_balance = 100 recon.ending_date = date(2020, 10, 20) recon.save_statement_info_to_cache() key, cache = recon.get_key_and_cache() self.assertEqual( {u'a: cash': { u'ending_balance': 100, u'ending_date': u'2020/10/20' }}, cache ) # remove entry recon.ending_balance = None recon.save_statement_info_to_cache() key, cache = recon.get_key_and_cache() self.assertEqual({}, cache) # multiple entries recon.ending_balance = 111 recon.ending_date = date(2111, 11, 11) recon.save_statement_info_to_cache() with FileTester.temp_input(self.testcache) as tempfilename: recon = Reconciler(LedgerFile(tempfilename, 'credit')) recon.ending_balance = 222 recon.ending_date = date(2222, 2, 22) recon.save_statement_info_to_cache() key, cache = recon.get_key_and_cache() self.assertEqual( {u'a: credit': { u'ending_balance': 222, u'ending_date': u'2222/02/22' }, u'a: cash': { u'ending_balance': 111, u'ending_date': u'2111/11/11' }}, cache ) # remove credit recon.ending_balance = None recon.save_statement_info_to_cache() key, cache = recon.get_key_and_cache() self.assertEqual( {u'a: cash': { u'ending_balance': 111, u'ending_date': u'2111/11/11' }}, cache ) # indirectly verify get_statement_info_from_cache with FileTester.temp_input(self.testcache) as tempfilename: recon = Reconciler(LedgerFile(tempfilename, 'cash')) # get_statement_info_from_cache will have been called in init self.assertEqual(111, recon.ending_balance) self.assertEqual(date(2111, 11, 11), recon.ending_date)