mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-25 08:44:23 -04:00
Revert "Merge pull request #1288 from alphagov/add-new-rate-logic"
This reverts commitadbff63d1f, reversing changes made to80f0b4b2a2.
This commit is contained in:
@@ -59,8 +59,6 @@ class Config(object):
|
|||||||
ACTIVITY_STATS_LIMIT_DAYS = 7
|
ACTIVITY_STATS_LIMIT_DAYS = 7
|
||||||
TEST_MESSAGE_FILENAME = 'Report'
|
TEST_MESSAGE_FILENAME = 'Report'
|
||||||
|
|
||||||
SMS_FREE_TIER_AMOUNT = 250000
|
|
||||||
|
|
||||||
STATSD_ENABLED = False
|
STATSD_ENABLED = False
|
||||||
STATSD_HOST = "statsd.hostedgraphite.com"
|
STATSD_HOST = "statsd.hostedgraphite.com"
|
||||||
STATSD_PORT = 8125
|
STATSD_PORT = 8125
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ from datetime import datetime
|
|||||||
from functools import partial
|
from functools import partial
|
||||||
from flask import (
|
from flask import (
|
||||||
render_template,
|
render_template,
|
||||||
current_app,
|
|
||||||
url_for,
|
url_for,
|
||||||
session,
|
session,
|
||||||
jsonify,
|
jsonify,
|
||||||
@@ -187,7 +186,7 @@ def get_dashboard_partials(service_id):
|
|||||||
'has_jobs': bool(immediate_jobs),
|
'has_jobs': bool(immediate_jobs),
|
||||||
'usage': render_template(
|
'usage': render_template(
|
||||||
'views/dashboard/_usage.html',
|
'views/dashboard/_usage.html',
|
||||||
**calculate_free_tier_usage(service_api_client.get_yearly_sms_unit_count_and_cost(
|
**calculate_usage(service_api_client.get_service_usage(
|
||||||
service_id,
|
service_id,
|
||||||
get_current_financial_year(),
|
get_current_financial_year(),
|
||||||
))
|
))
|
||||||
@@ -202,19 +201,9 @@ def get_dashboard_totals(statistics):
|
|||||||
return statistics
|
return statistics
|
||||||
|
|
||||||
|
|
||||||
def calculate_free_tier_usage(usage):
|
|
||||||
sms_free_allowance = current_app.config['SMS_FREE_TIER_AMOUNT']
|
|
||||||
|
|
||||||
return({
|
|
||||||
'sms_chargeable': max(0, usage['billable_sms_units'] - sms_free_allowance),
|
|
||||||
'total_sms_bill': usage['billable_sms_units'],
|
|
||||||
'total_sms_cost': usage['total_cost'],
|
|
||||||
'sms_allowance_remaining': sms_free_allowance - int(usage['billable_sms_units'])
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
def calculate_usage(usage):
|
def calculate_usage(usage):
|
||||||
sms_free_allowance = current_app.config['SMS_FREE_TIER_AMOUNT']
|
# TODO: Don't hardcode these - get em from the API
|
||||||
|
sms_free_allowance = 250000
|
||||||
|
|
||||||
sms_rate = 0 if len(usage) == 0 else usage[0].get("rate", 0)
|
sms_rate = 0 if len(usage) == 0 else usage[0].get("rate", 0)
|
||||||
sms_sent = get_sum_billing_units(breakdown for breakdown in usage if breakdown['notification_type'] == 'sms')
|
sms_sent = get_sum_billing_units(breakdown for breakdown in usage if breakdown['notification_type'] == 'sms')
|
||||||
|
|||||||
@@ -221,12 +221,6 @@ class ServiceAPIClient(NotifyAdminAPIClient):
|
|||||||
params=dict(year=year)
|
params=dict(year=year)
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_yearly_sms_unit_count_and_cost(self, service_id, year=None):
|
|
||||||
return self.get(
|
|
||||||
'/service/{0}/yearly-sms-billable-units'.format(service_id),
|
|
||||||
params=dict(year=year)
|
|
||||||
)
|
|
||||||
|
|
||||||
def get_monthly_notification_stats(self, service_id, year):
|
def get_monthly_notification_stats(self, service_id, year):
|
||||||
return self.get(url='/service/{}/notifications/monthly?year={}'.format(service_id, year))
|
return self.get(url='/service/{}/notifications/monthly?year={}'.format(service_id, year))
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
<div class="keyline-block">
|
<div class="keyline-block">
|
||||||
{% if sms_chargeable %}
|
{% if sms_chargeable %}
|
||||||
{{ big_number(
|
{{ big_number(
|
||||||
total_sms_cost,
|
(sms_chargeable * sms_rate),
|
||||||
'spent on text messages',
|
'spent on text messages',
|
||||||
currency="£",
|
currency="£",
|
||||||
smaller=True
|
smaller=True
|
||||||
|
|||||||
@@ -44,7 +44,6 @@ def test_get_started(
|
|||||||
mock_get_jobs,
|
mock_get_jobs,
|
||||||
mock_get_detailed_service,
|
mock_get_detailed_service,
|
||||||
mock_get_usage,
|
mock_get_usage,
|
||||||
mock_get_yearly_sms_unit_count_and_cost
|
|
||||||
):
|
):
|
||||||
mock_template_stats = mocker.patch('app.template_statistics_client.get_template_statistics_for_service',
|
mock_template_stats = mocker.patch('app.template_statistics_client.get_template_statistics_for_service',
|
||||||
return_value=copy.deepcopy(stub_template_stats))
|
return_value=copy.deepcopy(stub_template_stats))
|
||||||
@@ -63,7 +62,6 @@ def test_get_started_is_hidden_once_templates_exist(
|
|||||||
mock_get_jobs,
|
mock_get_jobs,
|
||||||
mock_get_detailed_service,
|
mock_get_detailed_service,
|
||||||
mock_get_usage,
|
mock_get_usage,
|
||||||
mock_get_yearly_sms_unit_count_and_cost
|
|
||||||
):
|
):
|
||||||
mock_template_stats = mocker.patch('app.template_statistics_client.get_template_statistics_for_service',
|
mock_template_stats = mocker.patch('app.template_statistics_client.get_template_statistics_for_service',
|
||||||
return_value=copy.deepcopy(stub_template_stats))
|
return_value=copy.deepcopy(stub_template_stats))
|
||||||
@@ -81,7 +79,6 @@ def test_should_show_recent_templates_on_dashboard(
|
|||||||
mock_get_jobs,
|
mock_get_jobs,
|
||||||
mock_get_detailed_service,
|
mock_get_detailed_service,
|
||||||
mock_get_usage,
|
mock_get_usage,
|
||||||
mock_get_yearly_sms_unit_count_and_cost
|
|
||||||
):
|
):
|
||||||
mock_template_stats = mocker.patch('app.template_statistics_client.get_template_statistics_for_service',
|
mock_template_stats = mocker.patch('app.template_statistics_client.get_template_statistics_for_service',
|
||||||
return_value=copy.deepcopy(stub_template_stats))
|
return_value=copy.deepcopy(stub_template_stats))
|
||||||
@@ -147,7 +144,6 @@ def test_should_show_upcoming_jobs_on_dashboard(
|
|||||||
mock_get_detailed_service,
|
mock_get_detailed_service,
|
||||||
mock_get_jobs,
|
mock_get_jobs,
|
||||||
mock_get_usage,
|
mock_get_usage,
|
||||||
mock_get_yearly_sms_unit_count_and_cost
|
|
||||||
):
|
):
|
||||||
response = logged_in_client.get(url_for('main.service_dashboard', service_id=SERVICE_ONE_ID))
|
response = logged_in_client.get(url_for('main.service_dashboard', service_id=SERVICE_ONE_ID))
|
||||||
|
|
||||||
@@ -178,7 +174,6 @@ def test_should_show_recent_jobs_on_dashboard(
|
|||||||
mock_get_detailed_service,
|
mock_get_detailed_service,
|
||||||
mock_get_jobs,
|
mock_get_jobs,
|
||||||
mock_get_usage,
|
mock_get_usage,
|
||||||
mock_get_yearly_sms_unit_count_and_cost
|
|
||||||
):
|
):
|
||||||
response = logged_in_client.get(url_for('main.service_dashboard', service_id=SERVICE_ONE_ID))
|
response = logged_in_client.get(url_for('main.service_dashboard', service_id=SERVICE_ONE_ID))
|
||||||
|
|
||||||
@@ -297,7 +292,6 @@ def test_menu_send_messages(
|
|||||||
mock_get_template_statistics,
|
mock_get_template_statistics,
|
||||||
mock_get_detailed_service,
|
mock_get_detailed_service,
|
||||||
mock_get_usage,
|
mock_get_usage,
|
||||||
mock_get_yearly_sms_unit_count_and_cost
|
|
||||||
):
|
):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
resp = _test_dashboard_menu(
|
resp = _test_dashboard_menu(
|
||||||
@@ -328,7 +322,6 @@ def test_menu_manage_service(
|
|||||||
mock_get_template_statistics,
|
mock_get_template_statistics,
|
||||||
mock_get_detailed_service,
|
mock_get_detailed_service,
|
||||||
mock_get_usage,
|
mock_get_usage,
|
||||||
mock_get_yearly_sms_unit_count_and_cost
|
|
||||||
):
|
):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
resp = _test_dashboard_menu(
|
resp = _test_dashboard_menu(
|
||||||
@@ -358,7 +351,6 @@ def test_menu_manage_api_keys(
|
|||||||
mock_get_template_statistics,
|
mock_get_template_statistics,
|
||||||
mock_get_detailed_service,
|
mock_get_detailed_service,
|
||||||
mock_get_usage,
|
mock_get_usage,
|
||||||
mock_get_yearly_sms_unit_count_and_cost
|
|
||||||
):
|
):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
resp = _test_dashboard_menu(
|
resp = _test_dashboard_menu(
|
||||||
@@ -388,7 +380,6 @@ def test_menu_all_services_for_platform_admin_user(
|
|||||||
mock_get_template_statistics,
|
mock_get_template_statistics,
|
||||||
mock_get_detailed_service,
|
mock_get_detailed_service,
|
||||||
mock_get_usage,
|
mock_get_usage,
|
||||||
mock_get_yearly_sms_unit_count_and_cost
|
|
||||||
):
|
):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
resp = _test_dashboard_menu(
|
resp = _test_dashboard_menu(
|
||||||
@@ -418,7 +409,6 @@ def test_route_for_service_permissions(
|
|||||||
mock_get_template_statistics,
|
mock_get_template_statistics,
|
||||||
mock_get_detailed_service,
|
mock_get_detailed_service,
|
||||||
mock_get_usage,
|
mock_get_usage,
|
||||||
mock_get_yearly_sms_unit_count_and_cost
|
|
||||||
):
|
):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
validate_route_permission(
|
validate_route_permission(
|
||||||
@@ -455,7 +445,6 @@ def test_service_dashboard_updates_gets_dashboard_totals(
|
|||||||
mock_get_detailed_service,
|
mock_get_detailed_service,
|
||||||
mock_get_jobs,
|
mock_get_jobs,
|
||||||
mock_get_usage,
|
mock_get_usage,
|
||||||
mock_get_yearly_sms_unit_count_and_cost
|
|
||||||
):
|
):
|
||||||
mocker.patch('app.main.views.dashboard.get_dashboard_totals', return_value={
|
mocker.patch('app.main.views.dashboard.get_dashboard_totals', return_value={
|
||||||
'email': {'requested': 123, 'delivered': 0, 'failed': 0},
|
'email': {'requested': 123, 'delivered': 0, 'failed': 0},
|
||||||
@@ -679,7 +668,6 @@ def test_should_show_all_jobs_with_valid_statuses(
|
|||||||
mock_get_detailed_service,
|
mock_get_detailed_service,
|
||||||
mock_get_jobs,
|
mock_get_jobs,
|
||||||
mock_get_usage,
|
mock_get_usage,
|
||||||
mock_get_yearly_sms_unit_count_and_cost
|
|
||||||
):
|
):
|
||||||
get_dashboard_partials(service_id=SERVICE_ONE_ID)
|
get_dashboard_partials(service_id=SERVICE_ONE_ID)
|
||||||
|
|
||||||
@@ -696,45 +684,3 @@ def test_should_show_all_jobs_with_valid_statuses(
|
|||||||
'ready to send',
|
'ready to send',
|
||||||
'sent to dvla'
|
'sent to dvla'
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
def test_should_show_remaining_free_tier_count(
|
|
||||||
logged_in_client,
|
|
||||||
mock_get_service_templates,
|
|
||||||
mock_get_template_statistics,
|
|
||||||
mock_get_detailed_service,
|
|
||||||
mock_get_jobs,
|
|
||||||
mock_get_usage,
|
|
||||||
mocker
|
|
||||||
):
|
|
||||||
mocker.patch(
|
|
||||||
'app.service_api_client.get_yearly_sms_unit_count_and_cost',
|
|
||||||
return_value={"billable_sms_units": 100, "total_cost": 200.0}
|
|
||||||
)
|
|
||||||
|
|
||||||
response = logged_in_client.get(url_for('main.service_dashboard', service_id=SERVICE_ONE_ID))
|
|
||||||
|
|
||||||
assert response.status_code == 200
|
|
||||||
assert '249,900' in response.get_data(as_text=True)
|
|
||||||
assert 'free text messages left' in response.get_data(as_text=True)
|
|
||||||
|
|
||||||
|
|
||||||
def test_should_show_cost_if_exceeded_free_tier_count(
|
|
||||||
logged_in_client,
|
|
||||||
mock_get_service_templates,
|
|
||||||
mock_get_template_statistics,
|
|
||||||
mock_get_detailed_service,
|
|
||||||
mock_get_jobs,
|
|
||||||
mock_get_usage,
|
|
||||||
mocker
|
|
||||||
):
|
|
||||||
mocker.patch(
|
|
||||||
'app.service_api_client.get_yearly_sms_unit_count_and_cost',
|
|
||||||
return_value={"billable_sms_units": 300000, "total_cost": 1500.50}
|
|
||||||
)
|
|
||||||
|
|
||||||
response = logged_in_client.get(url_for('main.service_dashboard', service_id=SERVICE_ONE_ID))
|
|
||||||
|
|
||||||
assert response.status_code == 200
|
|
||||||
assert '£1,500.50' in response.get_data(as_text=True)
|
|
||||||
assert 'spent on text messages' in response.get_data(as_text=True)
|
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ def test_sign_out_user(
|
|||||||
mock_has_permissions,
|
mock_has_permissions,
|
||||||
mock_get_template_statistics,
|
mock_get_template_statistics,
|
||||||
mock_get_detailed_service,
|
mock_get_detailed_service,
|
||||||
mock_get_yearly_sms_unit_count_and_cost,
|
|
||||||
mock_get_usage,
|
mock_get_usage,
|
||||||
):
|
):
|
||||||
with logged_in_client.session_transaction() as session:
|
with logged_in_client.session_transaction() as session:
|
||||||
|
|||||||
@@ -1335,15 +1335,6 @@ def mock_get_usage(mocker, service_one, fake_uuid):
|
|||||||
'app.service_api_client.get_service_usage', side_effect=_get_usage)
|
'app.service_api_client.get_service_usage', side_effect=_get_usage)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope='function')
|
|
||||||
def mock_get_yearly_sms_unit_count_and_cost(mocker, service_one, fake_uuid):
|
|
||||||
def _get_usage(service_id, year=None):
|
|
||||||
return {"billable_sms_units": 100, "total_cost": 200.0}
|
|
||||||
|
|
||||||
return mocker.patch(
|
|
||||||
'app.service_api_client.get_yearly_sms_unit_count_and_cost', side_effect=_get_usage)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope='function')
|
@pytest.fixture(scope='function')
|
||||||
def mock_get_billable_units(mocker):
|
def mock_get_billable_units(mocker):
|
||||||
def _get_usage(service_id, year):
|
def _get_usage(service_id, year):
|
||||||
|
|||||||
Reference in New Issue
Block a user