def test_should_delete_inbound_sms_according_to_data_retention( notify_db_session): no_retention_service = create_service(service_name='no retention') short_retention_service = create_service(service_name='three days') long_retention_service = create_service(service_name='thirty days') services = [ short_retention_service, no_retention_service, long_retention_service ] create_service_data_retention(long_retention_service, notification_type='sms', days_of_retention=30) create_service_data_retention(short_retention_service, notification_type='sms', days_of_retention=3) create_service_data_retention(short_retention_service, notification_type='email', days_of_retention=4) dates = [ datetime(2017, 6, 4, 23, 00), # just before three days datetime(2017, 6, 4, 22, 59), # older than three days datetime(2017, 5, 31, 23, 00), # just before seven days datetime(2017, 5, 31, 22, 59), # older than seven days datetime(2017, 5, 1, 0, 0), # older than thirty days ] for date, service in product(dates, services): create_inbound_sms(service, created_at=date) deleted_count = delete_inbound_sms_older_than_retention() history = InboundSmsHistory.query.all() assert len(history) == 7 # four deleted for the 3-day service, two for the default seven days one, one for the 30 day assert deleted_count == 7 assert { x.created_at for x in dao_get_inbound_sms_for_service(short_retention_service.id) } == set(dates[:1]) assert { x.created_at for x in dao_get_inbound_sms_for_service(no_retention_service.id) } == set(dates[:3]) assert { x.created_at for x in dao_get_inbound_sms_for_service(long_retention_service.id) } == set(dates[:4])
def test_should_delete_inbound_sms_according_to_data_retention( notify_db_session): no_retention_service = create_service(service_name="no retention") short_retention_service = create_service(service_name="three days") long_retention_service = create_service(service_name="thirty days") services = [ short_retention_service, no_retention_service, long_retention_service ] create_service_data_retention(long_retention_service, notification_type="sms", days_of_retention=30) create_service_data_retention(short_retention_service, notification_type="sms", days_of_retention=3) # email retention doesn't affect anything create_service_data_retention(short_retention_service, notification_type="email", days_of_retention=4) dates = [ datetime(2017, 6, 5, 4, 00), # just before three days datetime(2017, 6, 5, 3, 59), # older than three days datetime(2017, 6, 1, 4, 00), # just before seven days datetime(2017, 6, 1, 3, 59), # older than seven days datetime(2017, 5, 1, 0, 0), # older than thirty days ] for date, service in product(dates, services): create_inbound_sms(service, created_at=date) deleted_count = delete_inbound_sms_older_than_retention() # four deleted for the 3-day service, two for the default seven days one, one for the 30 day assert deleted_count == 7 assert { x.created_at for x in dao_get_inbound_sms_for_service(short_retention_service.id) } == set(dates[:1]) assert { x.created_at for x in dao_get_inbound_sms_for_service(no_retention_service.id) } == set(dates[:3]) assert { x.created_at for x in dao_get_inbound_sms_for_service(long_retention_service.id) } == set(dates[:4])
def get_inbound_sms_summary_for_service(service_id): count = dao_count_inbound_sms_for_service(service_id) most_recent = dao_get_inbound_sms_for_service(service_id, limit=1) return jsonify(count=count, most_recent=most_recent[0].created_at.isoformat() if most_recent else None)
def get_inbound_sms_summary_for_service(service_id): # this is for the dashboard, so always limit to 7 days, even if they have a longer data retention count = dao_count_inbound_sms_for_service(service_id, limit_days=7) most_recent = dao_get_inbound_sms_for_service(service_id, limit=1) return jsonify(count=count, most_recent=most_recent[0].created_at.isoformat() if most_recent else None)
def test_get_all_inbound_sms_filters_on_service(notify_db_session): service_one = create_service(service_name='one') service_two = create_service(service_name='two') sms_one = create_inbound_sms(service_one) create_inbound_sms(service_two) res = dao_get_inbound_sms_for_service(service_one.id) assert len(res) == 1 assert res[0] == sms_one
def get_inbound_sms_for_service(service_id): user_number = request.args.get('user_number') if user_number: # we use this to normalise to an international phone number - but this may fail if it's an alphanumeric user_number = try_validate_and_format_phone_number(user_number, international=True) results = dao_get_inbound_sms_for_service(service_id, user_number=user_number) return jsonify(data=[row.serialize() for row in results])
def post_query_inbound_sms_for_service(service_id): form = validate(request.get_json(), get_inbound_sms_for_service_schema) if 'phone_number' in form: # we use this to normalise to an international phone number - but this may fail if it's an alphanumeric user_number = try_validate_and_format_phone_number( form['phone_number'], international=True) else: user_number = None results = dao_get_inbound_sms_for_service(service_id, form.get('limit'), user_number) return jsonify(data=[row.serialize() for row in results])
def test_get_all_inbound_sms_filters_on_time(sample_service, notify_db_session): create_inbound_sms(sample_service, created_at=datetime(2017, 8, 6, 22, 59)) # sunday evening sms_two = create_inbound_sms( sample_service, created_at=datetime(2017, 8, 6, 23, 0)) # monday (7th) morning with freeze_time('2017-08-14 12:00'): res = dao_get_inbound_sms_for_service(sample_service.id, limit_days=7) assert len(res) == 1 assert res[0] == sms_two
def test_get_all_inbound_sms_limits_and_orders(sample_service): with freeze_time('2017-01-01'): create_inbound_sms(sample_service) with freeze_time('2017-01-03'): three = create_inbound_sms(sample_service) with freeze_time('2017-01-02'): two = create_inbound_sms(sample_service) res = dao_get_inbound_sms_for_service(sample_service.id, limit=2) assert len(res) == 2 assert res[0] == three assert res[0].created_at == datetime(2017, 1, 3) assert res[1] == two assert res[1].created_at == datetime(2017, 1, 2)
def test_get_all_inbound_sms_filters_on_time(sample_service, notify_db_session): create_inbound_sms(sample_service, user_number='447700900111', content='111 1', created_at=datetime(2017, 1, 2)) sms_two = create_inbound_sms(sample_service, user_number='447700900111', content='111 2', created_at=datetime(2017, 1, 3)) with freeze_time('2017-01-09'): res = dao_get_inbound_sms_for_service(sample_service.id) assert len(res) == 1 assert res[0] == sms_two
def post_inbound_sms_for_service(service_id): form = validate(request.get_json(), get_inbound_sms_for_service_schema) user_number = form.get("phone_number") if user_number: # we use this to normalise to an international phone number - but this may fail if it's an alphanumeric user_number = try_validate_and_format_phone_number(user_number, international=True) inbound_data_retention = fetch_service_data_retention_by_notification_type( service_id, "sms") limit_days = inbound_data_retention.days_of_retention if inbound_data_retention else 7 results = dao_get_inbound_sms_for_service(service_id, user_number=user_number, limit_days=limit_days) return jsonify(data=[row.serialize() for row in results])
def test_get_all_inbound_sms_when_none_exist(sample_service): res = dao_get_inbound_sms_for_service(sample_service.id) assert len(res) == 0
def test_get_all_inbound_sms(sample_service): inbound = create_inbound_sms(sample_service) res = dao_get_inbound_sms_for_service(sample_service.id) assert len(res) == 1 assert res[0] == inbound