Пример #1
0
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])
Пример #2
0
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])
Пример #3
0
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)
Пример #4
0
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)
Пример #5
0
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
Пример #6
0
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])
Пример #7
0
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])
Пример #8
0
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
Пример #9
0
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)
Пример #10
0
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
Пример #11
0
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])
Пример #12
0
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
Пример #13
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