def setUp(self): self.a_dict = { "active-card": "true", "available-limit": 80 } self.account = Account(self.a_dict) self.config = yaml.load(open('config.yml'))
class TestAccount(unittest.TestCase): def setUp(self): self.a_dict = { "active-card": "true", "available-limit": 80 } self.account = Account(self.a_dict) self.config = yaml.load(open('config.yml')) #import ipdb; ipdb.set_trace() def test_account_creation(self): self.assertEqual(self.account.get_limit(), 80) self.assertEqual(self.account.get_card_status(), True) def test_one_transaction(self): transaction_time = datetime.datetime.now() transaction_time_str = transaction_time.strftime(self.config["date_time_format"]) test_transaction = dict() test_transaction["merchant"] = "Burger King" test_transaction["amount"] = 20 test_transaction["time"] = transaction_time_str #print(json.dumps(test_transaction)) transaction = Transaction(test_transaction, self.config["date_time_format"]) self.assertEqual(self.account.validate_transaction(transaction), True) self.assertEqual(self.account.get_limit(), 60) def tearDown(self): Account.instance = None
class FileStream(BaseStream): """ Reads from input source, creates account and handles transactions """ def __init__(self): self.account = None def process_event(self, event): stream_logger.info("Event received - " + event) event_dict = json.loads(event) if "account" in event_dict: if not self.account: self.account = Account(event_dict.get('account')) else: self.account.add_violation(AccountAlreadyIntialized()) elif "transaction" in event_dict: if not self.account: sys.stdout.write("account-not-initialized") else: self.account.validate_transaction(Transaction(event_dict.get('transaction'))) if self.account: sys.stdout.write(str(self.account)) sys.stdout.write('\n') def read_from_source(self, source): for line in source: self.process_event(line)
class TestAccount(unittest.TestCase): def setUp(self): self.a_dict = {"active-card": "true", "available-limit": 80} self.account = Account(self.a_dict) self.config = yaml.load(open('config.yml')) #import ipdb; ipdb.set_trace() def test_account_exceed_balance(self): transaction_time = datetime.datetime.now() transaction_time_str = transaction_time.strftime( self.config["date_time_format"]) test_transaction = dict() test_transaction["merchant"] = "Burger King" test_transaction["amount"] = 100 test_transaction["time"] = transaction_time_str #print(json.dumps(test_transaction)) transaction = Transaction(test_transaction, self.config["date_time_format"]) self.assertEqual(self.account.validate_transaction(transaction), False) self.assertEqual(type(self.account.get_violations()[-1]), type(InsufficientLimit())) print(str(self.account)) def tearDown(self): Account.instance = None
def process_event(self, event): stream_logger.info("Event received - " + event) event_dict = json.loads(event) if "account" in event_dict: if not self.account: self.account = Account(event_dict.get('account')) else: self.account.add_violation(AccountAlreadyIntialized()) elif "transaction" in event_dict: if not self.account: sys.stdout.write("account-not-initialized") else: self.account.validate_transaction(Transaction(event_dict.get('transaction'))) if self.account: sys.stdout.write(str(self.account)) sys.stdout.write('\n')