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')
Esempio n. 2
0
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)
Esempio n. 3
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")
Esempio n. 4
0
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)
Esempio n. 5
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)
Esempio n. 6
0
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)
Esempio n. 7
0
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')
Esempio n. 9
0
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')