Beispiel #1
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("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)
Beispiel #2
0
    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)
Beispiel #3
0
    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)
Beispiel #4
0
    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)
Beispiel #5
0
    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)
Beispiel #6
0
    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')))
Beispiel #8
0
    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'])
Beispiel #9
0
    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')))
Beispiel #10
0
    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
Beispiel #11
0
    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']
Beispiel #12
0
    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)
Beispiel #13
0
    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']
Beispiel #14
0
    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)
Beispiel #15
0
    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'])
Beispiel #16
0
    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)
Beispiel #17
0
    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)
Beispiel #18
0
    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)
Beispiel #19
0
    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)
Beispiel #20
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)
Beispiel #21
0
    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)
Beispiel #22
0
    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)
Beispiel #23
0
    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)
Beispiel #24
0
    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)