예제 #1
0
def test_filter_subscriptions_by_user_data_all(database, session):
    database.sub.rule_logic = 'all'
    rule1 = Rule(name="department", value="a")
    rule2 = Rule(name="location", value="c")
    database.sub.user_rules = [rule1, rule2]
    session.add(rule1)
    session.add(rule2)
    session.add(database.sub)

    preference = UserSubscriptionPreferences(subscription=database.sub,
                                             preference=database.prefs[0])
    session.add(preference)
    user = User(email='*****@*****.**', subscription_preferences=[preference])
    user.meta_data = {"department": "a", "location": "b"}
    session.add(user)
    session.commit()

    merged_preferences = merge_subscriptions_with_preferences(user)
    subscriptions = filter_subscriptions_by_user_data(merged_preferences, user)

    assert subscriptions == []

    user.meta_data = {'department': 'a', 'location': 'c'}
    session.add(user)
    session.commit()
    merged_preferences = merge_subscriptions_with_preferences(user)
    subscriptions = filter_subscriptions_by_user_data(merged_preferences, user)

    assert len(subscriptions) == 1
    assert subscriptions[0]['id'] == database.sub.id
예제 #2
0
def test_filter_subscriptions_by_user_data(database):
    preference = UserSubscriptionPreferences(
        subscription=database.sub.key,
        preference=database.prefs[0].key
    )
    preference.put()
    user = User(
        email='*****@*****.**',
        subscription_preferences=[preference.key]
    )
    user.metadata = {"department": "a"}
    user.put()

    rule = Rule(name="department", value="a").put()
    database.sub.rules = [rule]
    database.sub.put()
    merged_preferences = merge_subscriptions_with_preferences(user)

    subscriptions = filter_subscriptions_by_user_data(merged_preferences, user)

    assert len(subscriptions) == 1
    assert subscriptions[0]['id'] == database.sub.key.urlsafe()

    user.metadata = {"department": "b"}
    user.put()
    merged_preferences = merge_subscriptions_with_preferences(user)
    subscriptions = filter_subscriptions_by_user_data(merged_preferences, user)

    assert subscriptions == []
예제 #3
0
def test_filter_subscriptions_by_user_data_any(database, session):
    preference = UserSubscriptionPreferences(subscription=database.sub,
                                             preference=database.prefs[0])
    session.add(preference)
    user = User(email='*****@*****.**', subscription_preferences=[preference])
    user.meta_data = {"department": "a"}
    session.add(user)

    rule = Rule(name="department", value="a")
    session.add(rule)
    database.sub.user_rules = [rule]
    database.sub.rule_logic = 'any'
    session.add(database.sub)
    session.commit()

    merged_preferences = merge_subscriptions_with_preferences(user)
    subscriptions = filter_subscriptions_by_user_data(merged_preferences, user)

    assert len(subscriptions) == 1
    assert subscriptions[0]['id'] == database.sub.id

    user.meta_data = {"department": "b"}
    session.add(user)
    session.commit()
    merged_preferences = merge_subscriptions_with_preferences(user)
    subscriptions = filter_subscriptions_by_user_data(merged_preferences, user)

    assert subscriptions == []
예제 #4
0
def test_filter_subscriptions_by_user_data_all(database):
    database.sub.rule_logic = 'all'
    rule1 = Rule(name="department", value="a").put()
    rule2 = Rule(name="location", value="c").put()
    database.sub.user_rules = [rule1, rule2]
    database.sub.put()

    preference = UserSubscriptionPreferences(subscription=database.sub.key,
                                             preference=database.prefs[0].key)
    preference.put()
    user = User(email='*****@*****.**', subscription_preferences=[preference.key])
    user.metadata = {"department": "a", "location": "b"}
    user.put()

    merged_preferences = merge_subscriptions_with_preferences(user)
    subscriptions = filter_subscriptions_by_user_data(merged_preferences, user)

    assert subscriptions == []

    user.metadata = {'department': 'a', 'location': 'c'}
    user.put()
    merged_preferences = merge_subscriptions_with_preferences(user)
    subscriptions = filter_subscriptions_by_user_data(merged_preferences, user)

    assert len(subscriptions) == 1
    assert subscriptions[0]['id'] == database.sub.key.urlsafe()
예제 #5
0
def test_filter_subscriptions_by_user_data_list(database, session):
    preference = UserSubscriptionPreferences(subscription=database.sub,
                                             preference=database.prefs[0])
    session.add(preference)
    user = User(email='*****@*****.**', subscription_preferences=[preference])
    user.meta_data = {"role": ["pushmaster", "technical_lead"]}
    session.add(user)

    rule = Rule(name="role", value="pushmaster")
    database.sub.user_rules = [rule]
    database.sub.rule_logic = 'any'
    session.add(rule)
    session.add(database.sub)
    session.commit()

    merged_preferences = merge_subscriptions_with_preferences(user)
    subscriptions = filter_subscriptions_by_user_data(merged_preferences, user)

    assert len(subscriptions) == 1
    assert subscriptions[0]['id'] == database.sub.id

    user.meta_data = {"role": "infra"}
    session.add(user)
    session.commit()
    merged_preferences = merge_subscriptions_with_preferences(user)
    subscriptions = filter_subscriptions_by_user_data(merged_preferences, user)

    assert len(subscriptions) == 0
예제 #6
0
def test_merge_subscriptions_with_preferences(database, fake_user):
    merged_preferences = merge_subscriptions_with_preferences(fake_user)
    assert merged_preferences[0] == {
        'id':
        database.sub.id,
        'title':
        'Yelp Weekly',
        'location':
        '8th Floor',
        'office':
        'USA: CA SF New Montgomery Office',
        'timezone':
        'America/Los_Angeles',
        'size':
        2,
        'rule_logic':
        None,
        'datetime': [{
            'active': False,
            'date': '2017-01-20T19:00:00+00:00',
            'id': database.sub.datetime[1].id
        }, {
            'active': True,
            'date': '2017-01-20T23:00:00+00:00',
            'id': database.sub.datetime[0].id
        }]
    }
예제 #7
0
def preferences_api():
    user = get_user(request.args.get('email'))
    if not user:
        return json.dumps([])

    subscriptions = merge_subscriptions_with_preferences(user)
    subscriptions = filter_subscriptions_by_user_data(subscriptions, user)

    return json.dumps(subscriptions)
예제 #8
0
def preferences_api():
    user = get_user(request.args.get('email'))
    if not user:
        resp = jsonify([])
        resp.status_code = 200
        return resp

    subscriptions = merge_subscriptions_with_preferences(user)
    subscriptions = filter_subscriptions_by_user_data(subscriptions, user)

    resp = jsonify(subscriptions)
    resp.status_code = 200
    return resp
예제 #9
0
def test_filter_subscriptions_by_user_data_none(database):
    database.sub.put()
    preference = UserSubscriptionPreferences(
        subscription=database.sub.key,
        preference=database.prefs[0].key,
    )
    preference.put()
    user = User(email='*****@*****.**', subscription_preferences=[preference.key])
    user.put()

    merged_preferences = merge_subscriptions_with_preferences(user)
    subscriptions = filter_subscriptions_by_user_data(merged_preferences, user)

    assert len(subscriptions) == 1
    assert subscriptions[0]['id'] == database.sub.key.urlsafe()
예제 #10
0
def test_filter_subscriptions_by_user_data_without_rules(database):
    database.sub.rule_logic = 'all'
    database.sub.user_rules = []
    database.sub.put()

    preference = UserSubscriptionPreferences(subscription=database.sub.key,
                                             preference=database.prefs[0].key)
    preference.put()
    user = User(email='*****@*****.**', subscription_preferences=[preference.key])
    user.metadata = {"department": "a", "location": "b"}
    user.put()

    merged_preferences = merge_subscriptions_with_preferences(user)
    with pytest.raises(AssertionError):
        filter_subscriptions_by_user_data(merged_preferences, user)
예제 #11
0
def test_filter_subscriptions_by_user_data_none(database, session):
    session.add(database.sub)
    preference = UserSubscriptionPreferences(
        subscription=database.sub,
        preference=database.prefs[0],
    )
    session.add(preference)
    user = User(email='*****@*****.**', subscription_preferences=[preference])
    session.add(user)
    session.commit()

    merged_preferences = merge_subscriptions_with_preferences(user)
    subscriptions = filter_subscriptions_by_user_data(merged_preferences, user)

    assert len(subscriptions) == 1
    assert subscriptions[0]['id'] == database.sub.id
예제 #12
0
def test_filter_subscriptions_by_user_data_without_rules(database, session):
    database.sub.rule_logic = 'all'
    database.sub.user_rules = []
    session.add(database.sub)

    preference = UserSubscriptionPreferences(subscription=database.sub,
                                             preference=database.prefs[0])
    session.add(preference)
    user = User(email='*****@*****.**', subscription_preferences=[preference])
    user.meta_data = {"department": "a", "location": "b"}
    session.add(user)
    session.commit()

    merged_preferences = merge_subscriptions_with_preferences(user)
    with pytest.raises(AssertionError):
        filter_subscriptions_by_user_data(merged_preferences, user)
예제 #13
0
def test_filter_subscriptions_by_user_data_none_when_rules_exist(database):
    rule = Rule(name="department", value="b").put()
    database.sub.user_rules = [rule]
    database.sub.rule_logic = 'none'
    database.sub.put()
    preference = UserSubscriptionPreferences(
        subscription=database.sub.key,
        preference=database.prefs[0].key,
    )
    preference.put()
    user = User(email='*****@*****.**',
                subscription_preferences=[preference.key],
                metadata={'department': 'a'})
    user.put()

    merged_preferences = merge_subscriptions_with_preferences(user)
    subscriptions = filter_subscriptions_by_user_data(merged_preferences, user)

    assert len(subscriptions) == 1
    assert subscriptions[0]['id'] == database.sub.key.urlsafe()
예제 #14
0
def test_merge_subscriptions_with_preferences(database, fake_user):
    merged_preferences = merge_subscriptions_with_preferences(fake_user)
    assert merged_preferences[0] == {
        'id': database.sub.key.urlsafe(),
        'title': 'Yelp Weekly',
        'location': '8th Floor',
        'office': 'USA: CA SF New Montgomery Office',
        'timezone': 'US/Pacific',
        'size': 2,
        'datetime': [
            {
                'active': True,
                'date': '2017-01-20T23:00:00+00:00',
                'id': database.sub.datetime[0].urlsafe()
            },
            {
                'active': False,
                'date': '2017-01-20T19:00:00+00:00',
                'id': database.sub.datetime[1].urlsafe()
            }
        ]
    }
예제 #15
0
def test_filter_subscriptions_by_user_data_none_when_rules_exist(
        database, session):
    rule = Rule(name="department", value="b")
    session.add(rule)
    database.sub.user_rules = [rule]
    database.sub.rule_logic = 'none'
    session.add(database.sub)
    preference = UserSubscriptionPreferences(
        subscription=database.sub,
        preference=database.prefs[0],
    )
    session.add(preference)
    user = User(email='*****@*****.**',
                subscription_preferences=[preference],
                meta_data={'department': 'a'})
    session.add(user)
    session.commit()

    merged_preferences = merge_subscriptions_with_preferences(user)
    subscriptions = filter_subscriptions_by_user_data(merged_preferences, user)

    assert len(subscriptions) == 1
    assert subscriptions[0]['id'] == database.sub.id