예제 #1
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 == []
예제 #2
0
def test_get_meeting_participants(app, database):
    pref = UserSubscriptionPreferences(subscription=database.sub.key,
                                       preference=database.prefs[0].key)
    pref.put()
    user1 = User(email='*****@*****.**',
                 metadata={'department': 'dept'},
                 subscription_preferences=[pref.key])
    user1.put()
    user2 = User(email='*****@*****.**',
                 metadata={'department': 'dept'},
                 subscription_preferences=[pref.key])
    user2.put()
    meeting1 = Meeting(meeting_spec=database.specs[0].key,
                       cancelled=False).put()
    MeetingParticipant(meeting=meeting1, user=user1.key).put()
    MeetingParticipant(meeting=meeting1, user=user2.key).put()
    with app.test_request_context('/v1/metrics/meeting_participants'):
        participants = json.loads(meeting_participants())
        assert participants == [{
            'date': '2017-10-27T23:00:00',
            'meeting': 'agx0ZXN0YmVkLXRlc3RyDQsSB01lZXRpbmcYCgw',
            'meeting_title': 'Yelp Weekly',
            'participant': '*****@*****.**',
            'time': '04:00PM'
        }, {
            'date': '2017-10-27T23:00:00',
            'meeting': 'agx0ZXN0YmVkLXRlc3RyDQsSB01lZXRpbmcYCgw',
            'meeting_title': 'Yelp Weekly',
            'participant': '*****@*****.**',
            'time': '04:00PM'
        }]
예제 #3
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()
예제 #4
0
def test_send_batch_meeting_confirmation_email(database):
    pref = UserSubscriptionPreferences(subscription=database.sub.key,
                                       preference=database.prefs[0].key)
    pref.put()
    s3_url = 'https://s3-media2.fl.yelpcdn.com/assets/srv0/yelp_large_assets/'
    user_a = User(email='*****@*****.**',
                  photo_url=s3_url +
                  'a315bcce34b3/assets/img/illustrations/mascots/hammy.png',
                  first_name='Hammy',
                  last_name='Yelp',
                  metadata={'department': 'Engineering'},
                  subscription_preferences=[pref.key])
    user_b = User(first_name='Darwin',
                  last_name='Yelp',
                  email='*****@*****.**',
                  photo_url=s3_url +
                  '36a31704362e/assets/img/illustrations/mascots/darwin.png',
                  metadata={'department': 'Design'},
                  subscription_preferences=[pref.key])
    user_c = User(first_name='Carmin',
                  last_name='Yelp',
                  email='*****@*****.**',
                  photo_url=s3_url +
                  'd71947670be7/assets/img/illustrations/mascots/carmen.png',
                  metadata={'department': 'Design'},
                  subscription_preferences=[pref.key])
    user_a.put()
    user_b.put()
    user_c.put()
    matches = [tuple((user_a, user_b, user_c, pref))]
    send_batch_meeting_confirmation_email(matches, database.specs[0])
예제 #5
0
def test_get_meeting_requests(app, database):
    pref = UserSubscriptionPreferences(subscription=database.sub.key,
                                       preference=database.prefs[0].key)
    pref.put()
    user = User(email='*****@*****.**',
                metadata={'department': 'dept'},
                subscription_preferences=[pref.key])
    user.put()
    MeetingRequest(user=user.key, meeting_spec=database.specs[0].key).put()
    with app.test_request_context('/v1/metrics/meeting_requests'):
        requests = json.loads(meeting_requests())
    assert requests == [{'title': 'Yelp Weekly', 'user': '******'}]
예제 #6
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()
예제 #7
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)
예제 #8
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()
예제 #9
0
def test_get_meeting_participants(app, database):
    pref = UserSubscriptionPreferences(subscription=database.sub.key,
                                       preference=database.prefs[0].key)
    pref.put()
    user1 = User(email='*****@*****.**',
                 metadata={'department': 'dept'},
                 subscription_preferences=[pref.key])
    user1.put()
    user2 = User(email='*****@*****.**',
                 metadata={'department': 'dept'},
                 subscription_preferences=[pref.key])
    user2.put()
    meeting1 = Meeting(meeting_spec=database.specs[0].key,
                       cancelled=False).put()
    MeetingParticipant(meeting=meeting1, user=user1.key).put()
    MeetingParticipant(meeting=meeting1, user=user2.key).put()
    with app.test_request_context('/v1/metrics/meeting_participants'):
        participants = meeting_participants().json
        assert len(participants) == 2
        assert set(participants[0].keys()) == set(
            ['date', 'meeting', 'meeting_title', 'participant', 'time'])
        assert participants[0]['date'] == database.specs[0].datetime.isoformat(
        )

        participant_lookup = {
            participant['participant']: participant
            for participant in participants
        }

        assert participant_lookup[user1.email] == {
            'date': database.specs[0].datetime.isoformat(),
            'meeting': meeting1.urlsafe(),
            'meeting_title':
            database.specs[0].meeting_subscription.get().title,
            'participant': user1.email,
            'time': '04:00PM',
        }
예제 #10
0
def test_get_meeting_participants(app, database):
    pref = UserSubscriptionPreferences(subscription=database.sub.key, preference=database.prefs[0].key)
    pref.put()
    user1 = User(
        email='*****@*****.**',
        metadata={'department': 'dept'},
        subscription_preferences=[pref.key]
    )
    user1.put()
    user2 = User(
        email='*****@*****.**',
        metadata={'department': 'dept'},
        subscription_preferences=[pref.key]
    )
    user2.put()
    meeting1 = Meeting(meeting_spec=database.specs[0].key, cancelled=False).put()
    MeetingParticipant(meeting=meeting1, user=user1.key).put()
    MeetingParticipant(meeting=meeting1, user=user2.key).put()
    with app.test_request_context('/v1/metrics/meeting_participants'):
        participants = json.loads(meeting_participants())
        assert len(participants) == 2
        assert set(participants[0].keys()) == set(['date', 'meeting', 'meeting_title', 'participant', 'time'])
        assert participants[0]['date'] == database.specs[0].datetime.isoformat()
        assert participants[0]['time'] == database.specs[0].datetime.strftime('%I:%M%p')