def test_active_contributors(self): """Test active contributors API call.""" # 2 en-US revisions by 2 contributors: r1 = revision(creator=user(save=True), save=True) r2 = revision(creator=user(save=True), save=True) # A translation with 2 contributors (translator + reviewer): d = document(parent=r1.document, locale="es", save=True) revision(document=d, reviewed=datetime.now(), reviewer=r1.creator, creator=r2.creator, save=True) # 1 active support forum contributor: # A user with 10 answers u1 = user(save=True) for x in range(10): answer(save=True, creator=u1) # A user with 9 answers u2 = user(save=True) for x in range(9): answer(save=True, creator=u2) # A user with 1 answer u3 = user(save=True) answer(save=True, creator=u3) # An AoA reply (1 contributor): reply(save=True) # Create metric kinds and update metrics for tomorrow (today's # activity shows up tomorrow). self._make_contributor_metric_kinds() update_contributor_metrics(day=date.today() + timedelta(days=1)) r = self._get_api_result("kpi_active_contributors") eq_(r["objects"][0]["en_us"], 2) eq_(r["objects"][0]["non_en_us"], 2) eq_(r["objects"][0]["support_forum"], 1) eq_(r["objects"][0]["aoa"], 1)
def test_aoa_badge(self): """Verify the KB Badge is awarded properly.""" # Create the user and badge. year = date.today().year u = profile().user b = badge( slug=AOA_BADGE['slug'].format(year=year), title=AOA_BADGE['title'].format(year=year), description=AOA_BADGE['description'].format(year=year), save=True) # Create 49 replies. replies = [] for i in range(48): replies.append(reply(user=u)) Reply.objects.bulk_create(replies) # Create the 49th reply separately so the signals are triggered. reply(user=u, save=True) # User should NOT have the badge yet. assert not b.is_awarded_to(u) # Create 1 more reply. reply(user=u, save=True) # User should have the badge now. assert b.is_awarded_to(u)
def test_aoa_badge(self): """Verify the KB Badge is awarded properly.""" # Create the user and badge. year = date.today().year u = profile().user b = badge(slug=AOA_BADGE['slug'].format(year=year), title=AOA_BADGE['title'].format(year=year), description=AOA_BADGE['description'].format(year=year), save=True) # Create 49 replies. replies = [] for i in range(48): replies.append(reply(user=u)) Reply.objects.bulk_create(replies) # Create the 49th reply separately so the signals are triggered. reply(user=u, save=True) # User should NOT have the badge yet. assert not b.is_awarded_to(u) # Create 1 more reply. reply(user=u, save=True) # User should have the badge now. assert b.is_awarded_to(u)
def test_last_contribution_date(self): """Verify the last_contribution_date field works properly.""" u = user(username='******', save=True) p = profile(user=u) self.refresh() data = UserMappingType.search().query( username__match='satdav').values_dict()[0] assert not data['last_contribution_date'] # Add a AoA reply. It should be the last contribution. d = datetime(2014, 1, 1) reply(user=u, created=d, save=True) p.save() # we need to resave the profile to force a reindex self.refresh() data = UserMappingType.search().query( username__match='satdav').values_dict()[0] eq_(data['last_contribution_date'], d) # Add a Support Forum answer. It should be the last contribution. d = datetime(2014, 1, 2) answer(creator=u, created=d, save=True) p.save() # we need to resave the profile to force a reindex self.refresh() data = UserMappingType.search().query( username__match='satdav').values_dict()[0] eq_(data['last_contribution_date'], d) # Add a Revision edit. It should be the last contribution. d = datetime(2014, 1, 3) revision(creator=u, created=d, save=True) p.save() # we need to resave the profile to force a reindex self.refresh() data = UserMappingType.search().query( username__match='satdav').values_dict()[0] eq_(data['last_contribution_date'], d) # Add a Revision review. It should be the last contribution. d = datetime(2014, 1, 4) revision(reviewer=u, reviewed=d, save=True) p.save() # we need to resave the profile to force a reindex self.refresh() data = UserMappingType.search().query( username__match='satdav').values_dict()[0] eq_(data['last_contribution_date'], d)
def test_last_contribution_date(self): """Verify the last_contribution_date field works properly.""" u = user(username='******', save=True) p = profile(user=u) self.refresh() data = UserMappingType.search().query( username__match='satdav').values_dict()[0] assert not data['last_contribution_date'] # Add a AoA reply. It should be the last contribution. d = datetime(2014, 1, 1) reply(user=u, created=d, save=True) self.refresh() data = UserMappingType.search().query( username__match='satdav').values_dict()[0] eq_(data['last_contribution_date'], d) # Add a Support Forum answer. It should be the last contribution. d = datetime(2014, 1, 2) answer(creator=u, created=d, save=True) p.save() # we need to resave the profile to force a reindex self.refresh() data = UserMappingType.search().query( username__match='satdav').values_dict()[0] eq_(data['last_contribution_date'], d) # Add a Revision edit. It should be the last contribution. d = datetime(2014, 1, 3) revision(creator=u, created=d, save=True) p.save() # we need to resave the profile to force a reindex self.refresh() data = UserMappingType.search().query( username__match='satdav').values_dict()[0] eq_(data['last_contribution_date'], d) # Add a Revision review. It should be the last contribution. d = datetime(2014, 1, 4) revision(reviewer=u, reviewed=d, save=True) p.save() # we need to resave the profile to force a reindex self.refresh() data = UserMappingType.search().query( username__match='satdav').values_dict()[0] eq_(data['last_contribution_date'], d)
def test_top_army_of_awesome(self): r1 = reply(user=user(save=True), save=True) r2 = reply(user=user(save=True), save=True) self.refresh() response = self.client.get(urlparams( reverse('community.top_contributors', args=['army-of-awesome']))) eq_(200, response.status_code) doc = pq(response.content) eq_(2, len(doc('li.results-user'))) assert r1.user.username in response.content assert r2.user.username in response.content
def test_top_contributors(self): """Verify the top contributors appear.""" d = document(locale='en-US', save=True) revision(document=d, save=True) d = document(locale='es', save=True) revision(document=d, save=True) revision(document=d, save=True) answer(save=True) answer(save=True) answer(save=True) reply(user=user(save=True), save=True) reply(user=user(save=True), save=True) reply(user=user(save=True), save=True) reply(user=user(save=True), save=True) for u in User.objects.all(): profile(user=u) self.refresh() response = self.client.get(urlparams(reverse('community.home'))) eq_(response.status_code, 200) doc = pq(response.content) eq_(1, len(doc('ul.kb > li'))) eq_(2, len(doc('ul.l10n > li'))) eq_(3, len(doc('ul.questions > li'))) eq_(4, len(doc('ul.army-of-awesome > li')))
def test_top_contributors_aoa(self): r1 = reply(user=user(save=True), save=True) r2 = reply(user=r1.user, save=True) r3 = reply(user=user(save=True), save=True) r4 = reply(user=user(save=True), created=date.today()-timedelta(days=91), save=True) self.refresh() # By default, we should only get 2 top contributors back. top = top_contributors_aoa() eq_(2, len(top)) assert r4.user_id not in [u['term'] for u in top] eq_(r1.user_id, top[0]['term'])
def test_top_contributors(self): """Verify the top contributors appear.""" d = document(locale='en-US', save=True) revision(document=d, save=True) d = document(locale='es', save=True) revision(document=d, save=True) revision(document=d, save=True) answer(save=True) answer(save=True) answer(save=True) reply(user=user(save=True), save=True) reply(user=user(save=True), save=True) reply(user=user(save=True), save=True) reply(user=user(save=True), save=True) for u in User.objects.all(): profile(user=u) self.refresh() response = self.client.get(urlparams(reverse('community.home'))) eq_(response.status_code, 200) doc = pq(response.content) eq_(1, len(doc('ul.kb > li'))) eq_(2, len(doc('ul.l10n > li'))) eq_(3, len(doc('ul.questions > li'))) eq_(4, len(doc('ul.army-of-awesome > li')))
def test_top_army_of_awesome(self): r1 = reply(user=user(save=True), save=True) r2 = reply(user=user(save=True), save=True) profile(user=r1.user) profile(user=r2.user) self.refresh() response = self.client.get(urlparams( reverse('community.top_contributors', args=['army-of-awesome']))) eq_(200, response.status_code) doc = pq(response.content) eq_(2, len(doc('li.results-user'))) assert r1.user.username in response.content assert r2.user.username in response.content
def test_query_twitter_usernames(self): u1 = user(username='******', save=True) p = profile(user=u1, name=u'Elite Mike') u2 = user(username='******', save=True) profile(user=u2, name=u'NotElite Mike') r1 = reply(user=u1, twitter_username='******', save=True) reply(user=u2, twitter_username='******', save=True) self.refresh() eq_(UserMappingType.search().query( itwitter_usernames__match='l33tmike').count(), 1) data = UserMappingType.search().query( itwitter_usernames__match='l33tmike')[0] eq_(data['username'], p.user.username) eq_(data['display_name'], p.name) assert r1.twitter_username in data['twitter_usernames']
def setUp(self): now = datetime.now() two_days_ago = now - timedelta(days=2) two_weeks_ago = now - timedelta(days=14) two_months_ago = now - timedelta(days=60) # Moe has the most in the last day, curly has the most in the last # week, larry has the most in the last month, and moe has the most # overall. data = { 'moe': [(now, 3), (two_days_ago, 2), (two_months_ago, 20)], 'curly': [(two_days_ago, 6), (two_weeks_ago, 2)], 'larry': [(two_weeks_ago, 10), (two_months_ago, 4)] } for who, what in data.items(): for when, how_many in what: for _ in range(how_many): reply(created=when, twitter_username=who, save=True)
def test_query_twitter_usernames(self): u1 = user(username='******', save=True) p = profile(user=u1, name=u'Elite Mike') u2 = user(username='******', save=True) profile(user=u2, name=u'NotElite Mike') r1 = reply(user=u1, twitter_username='******', save=True) r2 = reply(user=u2, twitter_username='******', save=True) self.refresh() eq_( UserMappingType.search().query( itwitter_usernames__match='l33tmike').count(), 1) data = UserMappingType.search().query( itwitter_usernames__match='l33tmike').values_dict()[0] eq_(data['username'], p.user.username) eq_(data['display_name'], p.name) assert r1.twitter_username in data['twitter_usernames']
def setUp(self): now = datetime.now() two_days_ago = now - timedelta(days=2) two_weeks_ago = now - timedelta(days=14) two_months_ago = now - timedelta(days=60) # Moe has the most in the last day, curly has the most in the last # week, larry has the most in the last month, and moe has the most # overall. data = { 'moe': [(now, 3), (two_days_ago, 2), (two_months_ago, 20)], 'curly': [(two_days_ago, 6), (two_weeks_ago, 2)], 'larry': [(two_weeks_ago, 10), (two_months_ago, 4)] } for who, what in data.items(): for when, how_many in what: for _ in range(how_many): reply(created=when, twitter_username=who, save=True)
def test_top_contributors_aoa(self): r1 = reply(user=user(save=True), save=True) r2 = reply(user=r1.user, save=True) r3 = reply(user=user(save=True), save=True) r4 = reply(user=user(save=True), created=date.today() - timedelta(days=91), save=True) for u in User.objects.all(): profile(user=u) self.refresh() # By default, we should only get 2 top contributors back. top, _ = top_contributors_aoa() eq_(2, len(top)) assert r4.user_id not in [u['term'] for u in top] eq_(r1.user_id, top[0]['term'])
def test_data_in_index(self): """Verify the data we are indexing.""" r = reply(locale='de', save=True) self.refresh() eq_(ReplyMetricsMappingType.search().count(), 1) data = ReplyMetricsMappingType.search().values_dict()[0] eq_(data['locale'], r.locale) eq_(data['creator_id'], r.user_id)
def test_data_in_index(self): """Verify the data we are indexing.""" u = user(username='******', email='*****@*****.**', save=True) p = profile(user=u, name=u'Rick Róss') r1 = reply(user=u, twitter_username='******', save=True) r2 = reply(user=u, twitter_username='******', save=True) self.refresh() eq_(UserMappingType.search().count(), 1) data = UserMappingType.search().values_dict()[0] eq_(data['username'], p.user.username) eq_(data['display_name'], p.name) assert r1.twitter_username in data['twitter_usernames'] assert r2.twitter_username in data['twitter_usernames'] u = user(username='******', email='*****@*****.**', save=True) p = profile(user=u, name=u'Will Cage') self.refresh() eq_(UserMappingType.search().count(), 2)
def test_data_in_index(self): """Verify the data we are indexing.""" u = user(username='******', email='*****@*****.**', save=True) p = profile(user=u, name=u'Rick Róss') r1 = reply(user=u, twitter_username='******', save=True) r2 = reply(user=u, twitter_username='******', save=True) self.refresh() eq_(UserMappingType.search().count(), 1) data = UserMappingType.search()[0] eq_(data['username'], p.user.username) eq_(data['display_name'], p.name) assert r1.twitter_username in data['twitter_usernames'] assert r2.twitter_username in data['twitter_usernames'] u = user(username='******', email='*****@*****.**', save=True) p = profile(user=u, name=u'Will Cage') self.refresh() eq_(UserMappingType.search().count(), 2)
def test_add_and_delete(self): """Adding a reply should add it to the index. Deleting should delete it. """ r = reply(save=True) self.refresh() eq_(ReplyMetricsMappingType.search().count(), 1) r.delete() self.refresh() eq_(ReplyMetricsMappingType.search().count(), 0)
def test_active_contributors(self): """Test active contributors API call.""" # 2 en-US revisions by 2 contributors: r1 = revision(creator=user(save=True), save=True) r2 = revision(creator=user(save=True), save=True) # A translation with 2 contributors (translator + reviewer): d = document(parent=r1.document, locale='es', save=True) revision(document=d, reviewed=datetime.now(), reviewer=r1.creator, creator=r2.creator, save=True) # 1 active support forum contributor: # A user with 10 answers u1 = user(save=True) for x in range(10): answer(save=True, creator=u1) # A user with 9 answers u2 = user(save=True) for x in range(9): answer(save=True, creator=u2) # A user with 1 answer u3 = user(save=True) answer(save=True, creator=u3) # An AoA reply (1 contributor): reply(save=True) # Create metric kinds and update metrics for tomorrow (today's # activity shows up tomorrow). self._make_contributor_metric_kinds() update_contributor_metrics(day=date.today() + timedelta(days=1)) r = self._get_api_result('api.kpi.contributors') eq_(r['objects'][0]['en_us'], 2) eq_(r['objects'][0]['non_en_us'], 2) eq_(r['objects'][0]['support_forum'], 1) eq_(r['objects'][0]['aoa'], 1)
def test_aoa_badge(self): """Verify the KB Badge is awarded properly.""" # Create the user and badge. year = date.today().year u = profile().user b = badge( slug=AOA_BADGE['slug'].format(year=year), title=AOA_BADGE['title'].format(year=year), description=AOA_BADGE['description'].format(year=year), save=True) # Create 49 replies. for i in range(49): reply(user=u, save=True) # User should NOT have the badge yet. assert not b.is_awarded_to(u) # Create 1 more reply. reply(user=u, save=True) # User should have the badge now. assert b.is_awarded_to(u)
def test_aoa_badge(self): """Verify the KB Badge is awarded properly.""" # Create the user and badge. year = date.today().year u = profile().user b = badge( slug=AOA_BADGE["slug"].format(year=year), title=AOA_BADGE["title"].format(year=year), description=AOA_BADGE["description"].format(year=year), save=True, ) # Create 49 replies. for i in range(49): reply(user=u, save=True) # User should NOT have the badge yet. assert not b.is_awarded_to(u) # Create 1 more reply. reply(user=u, save=True) # User should have the badge now. assert b.is_awarded_to(u)
def test_count_replies(self): """Test filtering when counting tweets""" tweet(save=True) id = Tweet.latest().tweet_id reply(reply_to_tweet_id=id, created=datetime.now(), save=True) reply(reply_to_tweet_id=id, created=datetime.now(), save=True) reply(created=datetime.now() - timedelta(days=1, minutes=1), save=True) yesterday = datetime.now() - timedelta(days=1) count_recent_answered = _count_answered_tweets(since=yesterday) eq_(count_recent_answered, 1)
def test_count_replies(self): """Test filtering when counting tweets""" tweet(save=True) id = Tweet.latest().tweet_id reply(reply_to_tweet_id=id, created=datetime.now(), save=True) reply(reply_to_tweet_id=id, created=datetime.now(), save=True) reply(created=datetime.now() - timedelta(days=1, minutes=1), save=True) yesterday = datetime.now() - timedelta(days=1) count_recent_answered = _count_answered_tweets(since=yesterday) eq_(count_recent_answered, 1)