Пример #1
0
 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'))
Пример #2
0
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
Пример #3
0
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)
Пример #4
0
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
Пример #5
0
    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')