Ejemplo n.º 1
0
class TestTransactionModel():

    @classmethod
    def setup_method(self, method):
        self.account_type = AccountType('Income')
        db.session.add(self.account_type)
        db.session.commit()
        self.account1 = Account("Test1", self.account_type)
        self.account2 = Account("Test2", self.account_type)
        db.session.add(self.account1)
        db.session.add(self.account2)
        db.session.commit()

    @classmethod
    def teardown_method(self, method):
        db.session.delete(self.account_type)
        db.session.delete(self.account1)
        db.session.delete(self.account2)
        db.session.commit()
        db.session.remove()

    def test_user_repr(self):
        """Ensure __repr__ function works"""
        t = Transaction(
            self.account1,
            self.account2,
            1,
            "ACME, Inc.",
            datetime.date.today(),
            "January's Salary"
        )
        assert repr(t) == "<Transaction: ACME, Inc. 1>"

    def test_transaction_add(self):
        """Test adding a transaction normaly"""
        t = Transaction(
            self.account1,
            self.account2,
            1,
            "ACME, Inc.",
            datetime.date.today(),
            "January's Salary"
        )

        db.session.add(t)
        db.session.commit()

        t2 = Transaction.query.filter(Transaction.amount == t.amount).first()
        assert t2.account_debit_id == t.account_debit_id
        assert t2.account_credit_id == t.account_credit_id
        assert t2.amount == t.amount
        assert t2.summary == t.summary
        assert t2.description == t.description
        assert t2.date == t.date
        assert bool(t2.transaction_id) is True

    def test_account_balance(self):
        """Test that balance on account calculates correctly"""
        t1 = Transaction(
            self.account1,
            self.account2,
            10,
            'ACME, Inc.',
            datetime.date.today(),
            "January's Salary'"
        )

        db.session.add(t1)

        t2 = Transaction(
            self.account2,
            self.account1,
            5,
            'IRS',
            datetime.date.today(),
            "Taxes for January'"
        )

        db.session.add(t2)
        db.session.commit()

        assert self.account1.get_balance() == t1.amount - t2.amount
        assert self.account2.get_balance() == t2.amount - t1.amount

    def test_account_balance_onesided(self):
        """Test that balance on account calculates correctly"""
        t1 = Transaction(
            self.account1,
            self.account2,
            10,
            'ACME, Inc.',
            datetime.date.today(),
            "January's Salary'"
        )

        db.session.add(t1)

        t2 = Transaction(
            self.account1,
            self.account2,
            10,
            'ACME, Inc.',
            datetime.date.today(),
            "February's Salary'"
        )

        db.session.add(t2)
        db.session.commit()

        assert self.account1.get_balance() == t1.amount + t2.amount
        assert self.account2.get_balance() == -t1.amount - t2.amount

    def test_account_transactions(self):
        """Test getting a list of transactions for an account"""
        acct1_trx_count = len(self.account1.transactions())
        acct2_trx_count = len(self.account2.transactions())
        t1 = Transaction(
            self.account1,
            self.account2,
            10,
            'ACME, Inc.',
            datetime.date.today(),
            "January's Salary'"
        )

        db.session.add(t1)

        t2 = Transaction(
            self.account2,
            self.account1,
            5,
            'IRS',
            datetime.date.today(),
            "Taxes for January'"
        )

        db.session.add(t2)
        db.session.commit()

        assert t1 in self.account1.transactions()
        assert t2 in self.account1.transactions()
        assert acct1_trx_count + 2 == len(self.account1.transactions())
        assert t1 in self.account2.transactions()
        assert t2 in self.account2.transactions()
        assert acct2_trx_count + 2 == len(self.account2.transactions())

    def test_transaction_jsonify(self):
        """Test the jsonify method"""
        t = Transaction(
            self.account1,
            self.account2,
            10,
            'ACME, Inc.',
            datetime.date.today(),
            "January's Salary'"
        )
        assert dict == type(t.jsonify())
        assert bool(json.dumps(t.jsonify())) is True

        db.session.add(t)
        db.session.commit()

        t_json = t.jsonify()
        assert dict == type(t_json)
        assert bool(json.dumps(t_json)) is True
        assert self.account1.jsonify() == t_json.get('debit')
        assert self.account2.jsonify() == t_json.get('credit')