def upgrade(self, sess, comment, investor): if investor.firm == 0: return comment.reply_wrap(message.nofirm_failure_org) if (investor.firm_role != "ceo") and (investor.firm_role != "cfo"): return comment.reply_wrap(message.not_ceo_or_cfo_org) firm = sess.query(Firm).\ filter(Firm.id == investor.firm).\ first() # level 1 = 4,000,000 # level 2 = 16,000,000 # level 3 = 64,000,000 # etc. upgrade_cost = 4**(firm.rank + 1) * 1000000 if firm.balance < upgrade_cost: return comment.reply_wrap( message.modify_upgrade_insufficient_funds_org( firm, upgrade_cost)) firm.rank += 1 firm.balance -= upgrade_cost max_members = max_members_for_rank(firm.rank) max_execs = max_execs_for_rank(firm.rank) max_assocs = max_assocs_for_rank(firm.rank) return comment.reply_wrap( message.modify_upgrade(firm, max_members, max_execs, max_assocs))
def test_insufficient_funds(self): self.command('!create') self.set_balance(5000000) self.command('!createfirm Foobar') replies = self.command('!upgrade') self.assertEqual(len(replies), 1) self.assertEqual(replies[0], message.modify_upgrade_insufficient_funds_org(MockFirm('Foobar', balance=1000), 4000000))