Example #1
0
    def test_process_valid_transaction(self):
        #start atm
        atm = ATM()
        # connect bank
        bank = Bank()
        atm.connect_bank(bank)
        # insert cardnumber
        atm.insert_cardnumber(VALID_CARDNUMBER)
        # insert_pin
        atm.authenticate_cardnumber_and_pin(VALID_PIN)

        # get accounts
        atm.get_accounts()

        # show balance
        transaction = atm.process_transaction(VALID_ACCOUNTS[0],
                                              'show_balance', 0)
        self.assertEqual(transaction['start_balance'],
                         transaction['end_balance'])
        self.assertEqual(atm.transaction_history[-1], transaction)

        amount = 50
        # withdraw
        transaction = atm.process_transaction(VALID_ACCOUNTS[0], 'withdraw',
                                              amount)
        self.assertEquals(transaction['end_balance'] + amount,
                          transaction['start_balance'])
        self.assertEqual(atm.transaction_history[-1], transaction)

        # deposit
        transaction = atm.process_transaction(VALID_ACCOUNTS[0], 'deposit',
                                              amount)
        self.assertEquals(transaction['end_balance'] - amount,
                          transaction['start_balance'])
        self.assertEqual(atm.transaction_history[-1], transaction)
Example #2
0
    def test_get_accounts_invalid_card_and_pin(self):
        #start atm
        atm = ATM()
        # connect bank
        bank = Bank()
        atm.connect_bank(bank)

        # no card inserted
        try:
            atm.get_accounts()
        except Exception as exp:
            self.assertEqual(exp.args[0], "No card in ATM")

        # insert cardnumber
        atm.insert_cardnumber(VALID_CARDNUMBER)

        # insert_pin
        atm.authenticate_cardnumber_and_pin(INVALID_PIN)
        try:
            atm.get_accounts()
        except Exception as exp:
            self.assertEqual(exp.args[0], "Invalid card/pin")

        # active_accounts should be empty
        self.assertEqual(atm.active_accounts, {})
Example #3
0
 def test_insert_cardnumber(self):
     #start atm
     atm = ATM()
     # connect bank
     bank = Bank()
     atm.connect_bank(bank)
     atm.insert_cardnumber(VALID_CARDNUMBER)
     self.assertEquals(atm.active_cardnumber, VALID_CARDNUMBER)
Example #4
0
    def test_connect_bank(self):
        #start atm
        atm = ATM()
        # connect bank
        bank = Bank()
        self.assertEquals(atm.bank, None)

        atm.connect_bank(bank)
        self.assertEquals(atm.bank, bank)
Example #5
0
    def test_authenticate_cardnumber_and_pin_no_card(self):
        #start atm
        atm = ATM()
        # connect bank
        bank = Bank()
        atm.connect_bank(bank)

        try:
            atm.authenticate_cardnumber_and_pin(VALID_PIN)
        except Exception as exp:
            self.assertEqual(exp.args[0], "No card in ATM")
Example #6
0
    def test_authenticate_cardnumber_and_pin(self):
        #start atm
        atm = ATM()
        # connect bank
        bank = Bank()
        atm.connect_bank(bank)
        atm.insert_cardnumber(VALID_CARDNUMBER)
        atm.authenticate_cardnumber_and_pin(VALID_PIN)

        self.assertEqual(atm.valid_pin, True)

        atm.authenticate_cardnumber_and_pin(INVALID_PIN)
        self.assertEquals(atm.valid_pin, False)
Example #7
0
    def test_get_accounts(self):
        #start atm
        atm = ATM()
        # connect bank
        bank = Bank()
        atm.connect_bank(bank)
        # insert cardnumber
        atm.insert_cardnumber(VALID_CARDNUMBER)
        # insert_pin
        atm.authenticate_cardnumber_and_pin(VALID_PIN)

        # get accounts
        atm.get_accounts()
        self.assertEqual(atm.active_accounts,
                         bank.get_cardnumber_accounts(VALID_CARDNUMBER))
Example #8
0
    def test_process_invalid_transaction(self):
        #start atm
        atm = ATM()
        # connect bank
        bank = Bank()
        atm.connect_bank(bank)
        # insert cardnumber
        atm.insert_cardnumber(VALID_CARDNUMBER)
        # insert_pin
        atm.authenticate_cardnumber_and_pin(VALID_PIN)

        # get accounts
        atm.get_accounts()

        for acc in INVALID_ACCOUNTS:
            try:
                atm.process_transaction(acc, VALID_REQUESTS[0], 0)
            except Exception as exp:
                self.assertEqual(exp.args[0], "Invalid Account")

        for req in INVALID_REQUESTS:
            try:
                atm.process_transaction(VALID_ACCOUNTS[0], req, 0)
            except Exception as exp:
                self.assertEqual(exp.args[0], "Invalid Request")

        amount = -50
        try:
            transaction = atm.process_transaction(VALID_ACCOUNTS[1],
                                                  'withdraw', amount)
        except Exception as exp:
            self.assertEqual(exp.args[0], "Transaction Denied")

        try:
            transaction = atm.process_transaction(VALID_ACCOUNTS[1], 'deposit',
                                                  amount)
        except Exception as exp:
            self.assertEqual(exp.args[0], "Transaction Denied")
Example #9
0
from ATM import ATM
from bank import Bank
'''
J. Salfity, October 2020
Bank APIs implemented with fake bank data

This file simulates an ATM UI and calls the ATM API
'''
if __name__ == "__main__":

    # create bank
    bofa = Bank()

    # create atm and connect to bank
    atm = ATM()
    atm.connect_bank(bofa)

    session_restart = False

    while (atm.power):

        # user canceled something, opt to end session
        if session_restart:
            print("End Session (1/0)?")
            end = int(input())
            if end:
                atm.end_session()
                print("SESSION ENDED")
            session_restart = False

        # a new session