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_upgrade(self): self.command('!create') self.set_balance(5000000) self.command('!createfirm Foobar') self.set_firm_balance('Foobar', 5000000) replies = self.command('!upgrade') self.assertEqual(len(replies), 1) self.assertEqual(replies[0], message.modify_upgrade(MockFirm('Foobar', balance=1000, rank=1), 16, 4)) sess = self.Session() firm = sess.query(Firm).filter(Firm.name == 'Foobar').first() self.assertEqual(firm.balance, 1000000)