Beispiel #1
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()
Beispiel #2
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
Beispiel #3
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 == []
Beispiel #4
0
def _subscription():
    zone = 'US/Pacific'
    preference_1 = SubscriptionDateTime(
        datetime=datetime(2017, 1, 20, 23, 0, tzinfo=utc))
    # Easier to think/verify in Pacific time since we are based in SF
    assert preference_1.datetime.astimezone(timezone(zone)).hour == 15
    preference_1.datetime = preference_1.datetime.replace(tzinfo=None)
    preference_1.put()

    preference_2 = SubscriptionDateTime(
        datetime=datetime(2017, 1, 20, 19, 0, tzinfo=utc))
    # Easier to think/verify in Pacific time since we are based in SF
    assert preference_2.datetime.astimezone(timezone(zone)).hour == 11
    preference_2.datetime = preference_2.datetime.replace(tzinfo=None)
    preference_2.put()

    rule = Rule(name='office', value='USA: CA SF New Montgomery Office').put()

    subscription = MeetingSubscription(
        title='Yelp Weekly',
        size=2,
        location='8th Floor',
        office='USA: CA SF New Montgomery Office',
        timezone=zone,
        datetime=[preference_1.key, preference_2.key],
        rules=[rule])
    subscription.put()
    return subscription
Beispiel #5
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 == []
Beispiel #6
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
Beispiel #7
0
def _subscription(session):
    zone = 'America/Los_Angeles'
    preference_1 = SubscriptionDateTime(
        datetime=datetime(2017, 1, 20, 23, 0, tzinfo=utc))
    # Easier to think/verify in Pacific time since we are based in SF
    assert preference_1.datetime.astimezone(timezone(zone)).hour == 15
    preference_1.datetime = preference_1.datetime.replace(tzinfo=None)
    session.add(preference_1)

    preference_2 = SubscriptionDateTime(
        datetime=datetime(2017, 1, 20, 19, 0, tzinfo=utc))
    # Easier to think/verify in Pacific time since we are based in SF
    assert preference_2.datetime.astimezone(timezone(zone)).hour == 11
    preference_2.datetime = preference_2.datetime.replace(tzinfo=None)
    session.add(preference_2)

    rule = Rule(name='office', value='USA: CA SF New Montgomery Office')
    session.add(rule)

    subscription = MeetingSubscription(
        title='Yelp Weekly',
        size=2,
        location='8th Floor',
        office='USA: CA SF New Montgomery Office',
        timezone=zone,
        datetime=[preference_1, preference_2],
        user_rules=[rule])
    session.add(subscription)
    session.commit()
    return subscription
Beispiel #8
0
def test_is_valid_user_subscription_preference_valid(subscription):
    preference = subscription.datetime[0]
    user = User(email='*****@*****.**', meta_data={'department': 'dept'})
    user_sub = UserSubscriptionPreferences(preference=preference,
                                           subscription_id=subscription.id,
                                           user=user)
    subscription.user_rules = [Rule(name='department', value='dept')]
    subscription.rule_logic = 'all'

    result = is_valid_user_subscription_preference(user_sub, subscription)
    assert result
Beispiel #9
0
def test_generate_meetings_with_history(minimal_database, subscription):
    rule = Rule(name='department', value='').put()
    subscription.dept_rules = [rule]

    preference = subscription.datetime[0]
    user_pref = UserSubscriptionPreferences(
        preference=preference, subscription=subscription.key).put()

    user1 = User(email='*****@*****.**',
                 metadata={'department': 'dept'},
                 subscription_preferences=[user_pref])
    user1.put()
    user2 = User(email='*****@*****.**',
                 metadata={'department': 'dept2'},
                 subscription_preferences=[user_pref])
    user2.put()
    user3 = User(email='*****@*****.**',
                 metadata={'department': 'dept'},
                 subscription_preferences=[user_pref])
    user3.put()
    user4 = User(email='*****@*****.**',
                 metadata={'department': 'dept2'},
                 subscription_preferences=[user_pref])
    user4.put()

    user_list = [user1, user2, user3, user4]
    week_start, specs = get_specs_from_subscription(subscription)
    store_specs_from_subscription(subscription.key, week_start, specs)

    matches, unmatched = generate_meetings(user_list, specs[0])
    assert len(matches) == 2
    assert len(unmatched) == 0

    meeting_history = set([
        (user1.key.id(), user2.key.id()),
        (user3.key.id(), user4.key.id()),
        (user2.key.id(), user3.key.id()),
        (user1.key.id(), user4.key.id()),
    ])
    matches, unmatched = generate_meetings(user_list, specs[0],
                                           meeting_history)
    assert len(matches) == 0
    assert len(unmatched) == 4

    meeting_history = set([
        (user1.key.id(), user2.key.id()),
        (user3.key.id(), user4.key.id()),
        (user2.key.id(), user3.key.id()),
    ])
    matches, unmatched = generate_meetings(user_list, specs[0],
                                           meeting_history)
    assert len(matches) == 1
    assert len(unmatched) == 2
Beispiel #10
0
def test_generate_meetings_same_department(minimal_database, subscription):
    rule = Rule(name='department', value='').put()
    subscription.dept_rules = [rule]
    preference = subscription.datetime[0]
    user_pref = UserSubscriptionPreferences(preference=preference, subscription=subscription.key).put()
    user1 = User(email='*****@*****.**', metadata={'department': 'dept'}, subscription_preferences=[user_pref])
    user1.put()
    user2 = User(email='*****@*****.**', metadata={'department': 'dept'}, subscription_preferences=[user_pref])
    user2.put()
    user_list = [user1, user2]

    _, specs = get_specs_from_subscription(subscription)
    matches, unmatched = generate_meetings(user_list, specs[0])
    assert len(unmatched) == 2
    assert len(matches) == 0
Beispiel #11
0
def test_generate_meetings_with_history(session, subscription):
    rule = Rule(name='department', value='')
    session.add(rule)
    subscription.dept_rules = [rule]

    preference = subscription.datetime[0]
    user_pref = UserSubscriptionPreferences(preference=preference, subscription=subscription)
    session.add(user_pref)

    user1 = User(email='*****@*****.**', meta_data={'department': 'dept'}, subscription_preferences=[user_pref])
    session.add(user1)
    user2 = User(email='*****@*****.**', meta_data={'department': 'dept2'}, subscription_preferences=[user_pref])
    session.add(user2)
    user3 = User(email='*****@*****.**', meta_data={'department': 'dept'}, subscription_preferences=[user_pref])
    session.add(user3)
    user4 = User(email='*****@*****.**', meta_data={'department': 'dept2'}, subscription_preferences=[user_pref])
    session.add(user4)

    user_list = [user1, user2, user3, user4]
    session.commit()
    week_start, specs = get_specs_from_subscription(subscription)
    store_specs_from_subscription(subscription, week_start, specs)

    matches, unmatched = generate_meetings(user_list, specs[0])
    assert len(matches) == 2
    assert len(unmatched) == 0

    meeting_history = set([
        (user1.id, user2.id),
        (user3.id, user4.id),
        (user2.id, user3.id),
        (user1.id, user4.id),
    ])
    matches, unmatched = generate_meetings(user_list, specs[0], meeting_history)
    assert len(matches) == 0
    assert len(unmatched) == 4

    meeting_history = set([
        (user1.id, user2.id),
        (user3.id, user4.id),
        (user2.id, user3.id),
    ])
    matches, unmatched = generate_meetings(user_list, specs[0], meeting_history)
    assert len(matches) == 1
    assert len(unmatched) == 2
Beispiel #12
0
def test_generate_meetings_same_department(session, subscription):
    rule = Rule(name='department', value='')
    session.add(rule)
    subscription.dept_rules = [rule]
    preference = subscription.datetime[0]
    user_pref = UserSubscriptionPreferences(preference=preference, subscription=subscription)
    session.add(user_pref)
    user1 = User(email='*****@*****.**', meta_data={'department': 'dept'}, subscription_preferences=[user_pref])
    session.add(user1)
    user2 = User(email='*****@*****.**', meta_data={'department': 'dept'}, subscription_preferences=[user_pref])
    session.add(user2)
    user_list = [user1, user2]
    session.commit()

    _, specs = get_specs_from_subscription(subscription)
    matches, unmatched = generate_meetings(user_list, specs[0])
    assert len(unmatched) == 2
    assert len(matches) == 0
Beispiel #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()
Beispiel #14
0
def _subscription():
    zone = 'America/Los_Angeles'
    preference_1 = SubscriptionDateTime(datetime=datetime(2017, 1, 20, 13, 0))
    preference_1.put()

    preference_2 = SubscriptionDateTime(datetime=datetime(2017, 1, 20, 11, 0))
    preference_2.put()

    rule = Rule(name='office', value='USA: CA SF New Montgomery Office').put()

    subscription = MeetingSubscription(
        title='Yelp Weekly',
        size=2,
        location='8th Floor',
        office='USA: CA SF New Montgomery Office',
        timezone=zone,
        datetime=[preference_1.key, preference_2.key],
        user_rules=[rule])
    subscription.put()
    return subscription
Beispiel #15
0
def test_clean_user_subscriptions(session):
    preference = SubscriptionDateTime(datetime=datetime(2017, 1, 20, 23, 0))
    subscription = MeetingSubscription(
        title='Test Weekly',
        size=2,
        location='8th Floor',
        office='USA: CA SF New Montgomery Office',
        timezone='America/Los_Angeles',
        datetime=[preference],
        user_rules=[Rule(name='department', value='dept')],
        rule_logic='all',
    )
    user_1 = User(
        email="*****@*****.**",
        meta_data={'department': 'dept'},
        subscription_preferences=[
            UserSubscriptionPreferences(preference=preference,
                                        subscription=subscription)
        ],
    )
    # Should be removed because of incorrect department
    user_2 = User(
        email="*****@*****.**",
        meta_data={'department': 'other dept'},
        subscription_preferences=[
            UserSubscriptionPreferences(preference=preference,
                                        subscription=subscription)
        ],
    )

    session.add(subscription)
    session.add(user_1)
    session.add(user_2)
    session.commit()

    response = clean_user_subscriptions()
    assert response == 'OK'

    user_sub_prefs = UserSubscriptionPreferences.query.all()
    assert len(user_sub_prefs) == 1
Beispiel #16
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