def test_create_nightly_billing_for_day_letter(sample_service, sample_letter_template, mocker): yesterday = datetime.now() - timedelta(days=1) mocker.patch('app.dao.fact_billing_dao.get_rate', side_effect=mocker_get_rate) create_notification( created_at=yesterday, template=sample_letter_template, status='delivered', sent_by='dvla', international=False, rate_multiplier=2.0, billable_units=2, ) records = FactBilling.query.all() assert len(records) == 0 # Celery expects the arguments to be a string or primitive type. yesterday_str = datetime.strftime(yesterday, "%Y-%m-%d") create_nightly_billing_for_day(yesterday_str) records = FactBilling.query.order_by('rate_multiplier').all() assert len(records) == 1 record = records[0] assert record.notification_type == LETTER_TYPE assert record.bst_date == datetime.date(yesterday) assert record.rate == Decimal(2.1) assert record.billable_units == 2 assert record.rate_multiplier == 2.0
def test_create_nightly_billing_for_day_null_sent_by_sms( sample_service, sample_template, mocker): yesterday = datetime.now() - timedelta(days=1) mocker.patch('app.dao.fact_billing_dao.get_rate', side_effect=mocker_get_rate) create_notification( created_at=yesterday, template=sample_template, status='delivered', sent_by=None, international=False, rate_multiplier=1.0, billable_units=1, ) records = FactBilling.query.all() assert len(records) == 0 # Celery expects the arguments to be a string or primitive type. yesterday_str = datetime.strftime(yesterday, "%Y-%m-%d") create_nightly_billing_for_day(yesterday_str) records = FactBilling.query.all() assert len(records) == 1 record = records[0] assert record.bst_date == datetime.date(yesterday) assert record.rate == Decimal(1.33) assert record.billable_units == 1 assert record.rate_multiplier == 1 assert record.provider == 'unknown'
def test_create_nightly_billing_for_day_different_sent_by( sample_service, sample_template, sample_email_template, mocker): yesterday = convert_utc_to_local_timezone( (datetime.now() - timedelta(days=1))).replace(hour=12, minute=00) mocker.patch('app.dao.fact_billing_dao.get_rate', side_effect=mocker_get_rate) # These are sms notifications create_notification( created_at=yesterday, template=sample_template, status='delivered', sent_by='sns', international=False, rate_multiplier=1.0, billable_units=1, ) records = FactBilling.query.all() assert len(records) == 0 # Celery expects the arguments to be a string or primitive type. yesterday_str = datetime.strftime(yesterday, "%Y-%m-%d") create_nightly_billing_for_day(yesterday_str) records = FactBilling.query.order_by('rate_multiplier').all() assert len(records) == 1 for i, record in enumerate(records): assert record.bst_date == datetime.date(yesterday) assert record.rate == Decimal(1.33) assert record.billable_units == 1 assert record.rate_multiplier == 1.0
def test_create_nightly_billing_for_day_different_letter_postage( notify_db_session, sample_letter_template, mocker): yesterday = convert_utc_to_local_timezone((datetime.now() - timedelta(days=1))).replace(hour=12, minute=00) mocker.patch('app.dao.fact_billing_dao.get_rate', side_effect=mocker_get_rate) for i in range(2): create_notification( created_at=yesterday, template=sample_letter_template, status='delivered', sent_by='dvla', billable_units=2, postage='first' ) create_notification( created_at=yesterday, template=sample_letter_template, status='delivered', sent_by='dvla', billable_units=2, postage='second' ) records = FactBilling.query.all() assert len(records) == 0 # Celery expects the arguments to be a string or primitive type. yesterday_str = datetime.strftime(yesterday, "%Y-%m-%d") create_nightly_billing_for_day(yesterday_str) records = FactBilling.query.order_by('postage').all() assert len(records) == 2 assert records[0].notification_type == LETTER_TYPE assert records[0].bst_date == datetime.date(yesterday) assert records[0].postage == 'first' assert records[0].notifications_sent == 2 assert records[0].billable_units == 4 assert records[1].notification_type == LETTER_TYPE assert records[1].bst_date == datetime.date(yesterday) assert records[1].postage == 'second' assert records[1].notifications_sent == 1 assert records[1].billable_units == 2
def test_create_nightly_billing_for_day_different_templates( sample_service, sample_template, sample_email_template, mocker): yesterday = datetime.now() - timedelta(days=1) mocker.patch('app.dao.fact_billing_dao.get_rate', side_effect=mocker_get_rate) create_notification( created_at=yesterday, template=sample_template, status='delivered', sent_by='mmg', international=False, rate_multiplier=1.0, billable_units=1, ) create_notification( created_at=yesterday, template=sample_email_template, status='delivered', sent_by='ses', international=False, rate_multiplier=0, billable_units=0, ) records = FactBilling.query.all() assert len(records) == 0 # Celery expects the arguments to be a string or primitive type. yesterday_str = datetime.strftime(yesterday, "%Y-%m-%d") create_nightly_billing_for_day(yesterday_str) records = FactBilling.query.order_by('rate_multiplier').all() assert len(records) == 2 multiplier = [0, 1] billable_units = [0, 1] rate = [0, Decimal(1.33)] for i, record in enumerate(records): assert record.bst_date == datetime.date(yesterday) assert record.rate == rate[i] assert record.billable_units == billable_units[i] assert record.rate_multiplier == multiplier[i]
def test_create_nightly_billing_for_day_update_when_record_exists( sample_service, sample_template, mocker): mocker.patch('app.dao.fact_billing_dao.get_rate', side_effect=mocker_get_rate) create_notification( created_at=datetime.now() - timedelta(days=1), template=sample_template, status='delivered', sent_by=None, international=False, rate_multiplier=1.0, billable_units=1, ) records = FactBilling.query.all() assert len(records) == 0 create_nightly_billing_for_day('2018-01-14') records = FactBilling.query.order_by(FactBilling.bst_date).all() assert len(records) == 1 assert records[0].bst_date == date(2018, 1, 13) assert records[0].billable_units == 1 assert not records[0].updated_at create_notification( created_at=datetime.now() - timedelta(days=1), template=sample_template, status='delivered', sent_by=None, international=False, rate_multiplier=1.0, billable_units=1, ) # run again, make sure create_nightly_billing() updates with no error create_nightly_billing_for_day('2018-01-14') assert len(records) == 1 assert records[0].billable_units == 2 assert records[0].updated_at
def test_create_nightly_billing_for_day_use_BST( sample_service, sample_template, mocker): mocker.patch('app.dao.fact_billing_dao.get_rate', side_effect=mocker_get_rate) # too late create_notification( created_at=datetime(2018, 3, 25, 23, 1), template=sample_template, status='delivered', rate_multiplier=1.0, billable_units=1, ) create_notification( created_at=datetime(2018, 3, 25, 22, 59), template=sample_template, status='delivered', rate_multiplier=1.0, billable_units=2, ) # too early create_notification( created_at=datetime(2018, 3, 24, 23, 59), template=sample_template, status='delivered', rate_multiplier=1.0, billable_units=4, ) assert Notification.query.count() == 3 assert FactBilling.query.count() == 0 create_nightly_billing_for_day('2018-03-25') records = FactBilling.query.order_by(FactBilling.bst_date).all() assert len(records) == 1 assert records[0].bst_date == date(2018, 3, 25) assert records[0].billable_units == 3