def test_get_rate(notify_db_session): create_rate(start_date=datetime(2017, 5, 30, 23, 0), value=1.2, notification_type='email') create_rate(start_date=datetime(2017, 5, 30, 23, 0), value=2.2, notification_type='sms') create_rate(start_date=datetime(2017, 5, 30, 23, 0), value=3.3, notification_type='email') create_letter_rate(start_date=datetime(2017, 5, 30, 23, 0), rate=0.66, post_class='first') create_letter_rate(start_date=datetime(2017, 5, 30, 23, 0), rate=0.3, post_class='second') non_letter_rates, letter_rates = get_rates_for_billing() rate = get_rate(non_letter_rates=non_letter_rates, letter_rates=letter_rates, notification_type='sms', date=date(2017, 6, 1)) letter_rate = get_rate(non_letter_rates=non_letter_rates, letter_rates=letter_rates, notification_type='letter', crown=True, letter_page_count=1, date=date(2017, 6, 1)) assert rate == 2.2 assert letter_rate == Decimal('0.3')
def test_get_rate_for_sms_and_email(notify_db, notify_db_session): sms_rate = Rate(valid_from=datetime(2017, 12, 1), rate=Decimal(0.15), notification_type=SMS_TYPE) db.session.add(sms_rate) email_rate = Rate(valid_from=datetime(2017, 12, 1), rate=Decimal(0), notification_type=EMAIL_TYPE) db.session.add(email_rate) non_letter_rates = [ (r.notification_type, r.valid_from, r.rate) for r in Rate.query.order_by(desc(Rate.valid_from)).all() ] letter_rates = [ (r.start_date, r.crown, r.sheet_count, r.rate) for r in LetterRate.query.order_by(desc(LetterRate.start_date)).all() ] rate = get_rate(non_letter_rates, letter_rates, SMS_TYPE, datetime(2018, 1, 1)) assert rate == Decimal(0.15) rate = get_rate(non_letter_rates, letter_rates, EMAIL_TYPE, datetime(2018, 1, 1)) assert rate == Decimal(0)
def test_get_rate(notify_db_session): create_rate(start_date=datetime(2017, 5, 30, 23, 0), value=1.2, notification_type="email") create_rate(start_date=datetime(2017, 5, 30, 23, 0), value=2.2, notification_type="sms") create_rate(start_date=datetime(2017, 5, 30, 23, 0), value=3.3, notification_type="email") create_letter_rate(start_date=datetime(2017, 5, 30, 23, 0), rate=0.66, post_class="first") create_letter_rate(start_date=datetime(2017, 5, 30, 23, 0), rate=0.3, post_class="second") non_letter_rates, letter_rates = get_rates_for_billing() rate = get_rate( non_letter_rates=non_letter_rates, letter_rates=letter_rates, notification_type="sms", date=date(2017, 6, 1), ) letter_rate = get_rate( non_letter_rates=non_letter_rates, letter_rates=letter_rates, notification_type="letter", crown=True, letter_page_count=1, date=date(2017, 6, 1), ) assert rate == 2.2 assert letter_rate == Decimal("0.3")
def test_get_rate_for_sms_and_email(notify_db_session): non_letter_rates = [ create_rate(datetime(2017, 12, 1), 0.15, SMS_TYPE), create_rate(datetime(2017, 12, 1), 0, EMAIL_TYPE) ] rate = get_rate(non_letter_rates, [], SMS_TYPE, date(2018, 1, 1)) assert rate == Decimal(0.15) rate = get_rate(non_letter_rates, [], EMAIL_TYPE, date(2018, 1, 1)) assert rate == Decimal(0)
def test_get_rate_chooses_right_rate_depending_on_date(notify_db_session, date, expected_rate): create_letter_rate(start_date=datetime(2016, 1, 1, 0, 0), sheet_count=2, rate=0.33, post_class='second') create_letter_rate(start_date=datetime(2018, 9, 30, 23, 0), sheet_count=2, rate=0.35, post_class='second') non_letter_rates, letter_rates = get_rates_for_billing() rate = get_rate(non_letter_rates, letter_rates, "letter", date, True, 2, "second") assert rate == Decimal(expected_rate)
def test_get_rate_filters_letters_by_post_class(notify_db_session, letter_post_class, expected_rate): create_letter_rate(start_date=datetime(2017, 5, 30, 23, 0), sheet_count=2, rate=0.61, post_class='first') create_letter_rate(start_date=datetime(2017, 5, 30, 23, 0), sheet_count=2, rate=0.35, post_class='second') non_letter_rates, letter_rates = get_rates_for_billing() rate = get_rate(non_letter_rates, letter_rates, "letter", datetime(2018, 10, 1), True, 2, letter_post_class) assert rate == Decimal(expected_rate)
def test_get_rate_for_letters_when_page_count_is_zero(notify_db_session): non_letter_rates, letter_rates = get_rates_for_billing() letter_rate = get_rate(non_letter_rates=non_letter_rates, letter_rates=letter_rates, notification_type='letter', crown=True, letter_page_count=0, date=datetime.utcnow()) assert letter_rate == 0
def test_get_rate_for_letter_latest(notify_db_session): # letter rates should be passed into the get_rate function as a tuple of start_date, crown, sheet_count, # rate and post_class new = create_letter_rate(datetime(2017, 12, 1), crown=True, sheet_count=1, rate=0.33, post_class='second') old = create_letter_rate(datetime(2016, 12, 1), crown=True, sheet_count=1, rate=0.30, post_class='second') letter_rates = [new, old] rate = get_rate([], letter_rates, LETTER_TYPE, date(2018, 1, 1), True, 1) assert rate == Decimal('0.33')
def test_get_rate_for_letter_latest(notify_db_session): non_letter_rates = [ (r.notification_type, r.valid_from, r.rate) for r in Rate.query.order_by(desc(Rate.valid_from)).all() ] # letter rates should be passed into the get_rate function as a tuple of start_date, crown, sheet_count & rate new_letter_rate = (datetime(2017, 12, 1), True, 1, Decimal(0.33)) old_letter_rate = (datetime(2016, 12, 1), True, 1, Decimal(0.30)) letter_rates = [new_letter_rate, old_letter_rate] rate = get_rate(non_letter_rates, letter_rates, LETTER_TYPE, datetime(2018, 1, 1), True, 1) assert rate == Decimal(0.33)
def test_get_rate(notify_db_session): create_rate(start_date=datetime.utcnow(), value=1.2, notification_type='email') create_rate(start_date=datetime.utcnow(), value=2.2, notification_type='sms') create_rate(start_date=datetime.utcnow(), value=3.3, notification_type='email') non_letter_rates, letter_rates = get_rates_for_billing() rate = get_rate(non_letter_rates=non_letter_rates, letter_rates=letter_rates, notification_type='sms', date=datetime.utcnow()) letter_rate = get_rate(non_letter_rates=non_letter_rates, letter_rates=letter_rates, notification_type='letter', crown=True, letter_page_count=1, date=datetime.utcnow()) assert rate == 2.2 assert letter_rate == Decimal('0.3')
def test_get_rate_for_letter_latest_if_crown_is_none(notify_db_session): # letter rates should be passed into the get_rate function as a tuple of start_date, crown, sheet_count, # rate and post_class crown = create_letter_rate(datetime(2017, 12, 1), crown=True, sheet_count=1, rate=0.33, post_class='second') non_crown = create_letter_rate(datetime(2017, 12, 1), crown=False, sheet_count=1, rate=0.35, post_class='second') letter_rates = [crown, non_crown] rate = get_rate([], letter_rates, LETTER_TYPE, date(2018, 1, 1), crown=None, letter_page_count=1) assert rate == Decimal('0.33')