From e9eef160b5130346c533b69cca3609787b5fe8e4 Mon Sep 17 00:00:00 2001 From: Jason Antman Date: Mon, 3 Apr 2017 18:06:01 -0400 Subject: [PATCH] issue #19 - PayPeriod method for per_period ScheduledTransactions --- biweeklybudget/payperiods.py | 15 +++++++++++++++ biweeklybudget/tests/unit/test_payperiods.py | 14 ++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/biweeklybudget/payperiods.py b/biweeklybudget/payperiods.py index 23684831..7a7ae880 100644 --- a/biweeklybudget/payperiods.py +++ b/biweeklybudget/payperiods.py @@ -221,3 +221,18 @@ def scheduled_transactions_date(self, db_session): db_session.query(ScheduledTransaction), ScheduledTransaction.date ) + + def scheduled_transactions_per_period(self, db_session): + """ + Return a Query for all :py:class:`~.ScheduledTransaction` defined by + number per period (schedule_type == "per period") for this pay period. + + :param db_session: DB Session to run query with + :type db_session: sqlalchemy.orm.session.Session + :return: Query matching all ScheduledTransactions defined by number + per period, for this pay period. + :rtype: sqlalchemy.orm.query.Query + """ + return db_session.query(ScheduledTransaction).filter( + ScheduledTransaction.schedule_type.__eq__('per period') + ) diff --git a/biweeklybudget/tests/unit/test_payperiods.py b/biweeklybudget/tests/unit/test_payperiods.py index affe6fae..d07a8a44 100644 --- a/biweeklybudget/tests/unit/test_payperiods.py +++ b/biweeklybudget/tests/unit/test_payperiods.py @@ -39,6 +39,7 @@ import pytest from datetime import datetime, date, timedelta from sqlalchemy.orm.session import Session +from sqlalchemy.sql.expression import BindParameter from biweeklybudget.payperiods import BiweeklyPayPeriod from biweeklybudget.models.ofx_transaction import OFXTransaction @@ -170,3 +171,16 @@ def test_scheduled_transactions_date(self): assert mock_sess.mock_calls == [ call.query(ScheduledTransaction) ] + + def test_scheduled_transactions_per_period(self): + mock_sess = Mock(spec_set=Session) + res = self.cls.scheduled_transactions_per_period(mock_sess) + assert res == mock_sess.query.return_value.filter.return_value + assert mock_sess.mock_calls[0] == call.query(ScheduledTransaction) + kall = mock_sess.mock_calls[1] + assert kall[0] == 'query().filter' + expected = ScheduledTransaction.schedule_type.__eq__('per period') + actual = kall[1][0] + assert str(expected) == str(actual) + assert isinstance(actual.right, BindParameter) + assert actual.right.value == 'per period'