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()
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
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 == []
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
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 == []
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
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
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
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
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
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
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
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()
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
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
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