Example #1
0
    def test_exit_survey_results(self):
        """Test the exist survey results API call."""
        # Create the metrics
        kind = metric_kind(code=EXIT_SURVEY_YES_CODE, save=True)
        metric(kind=kind,
               start=date.today(),
               end=date.today(),
               value=1337,
               save=True)
        kind = metric_kind(code=EXIT_SURVEY_NO_CODE, save=True)
        metric(kind=kind,
               start=date.today(),
               end=date.today(),
               value=42,
               save=True)
        kind = metric_kind(code=EXIT_SURVEY_DONT_KNOW_CODE, save=True)
        metric(kind=kind,
               start=date.today(),
               end=date.today(),
               value=777,
               save=True)

        # Verify the results returned from the API
        r = self._get_api_result('api.kpi.exit-survey')
        eq_(r['objects'][0]['yes'], 1337)
        eq_(r['objects'][0]['no'], 42)
        eq_(r['objects'][0]['dont_know'], 777)
Example #2
0
    def test_update_search_ctr(self, search_ctr):
        """Verify the cron job inserts the right rows."""
        clicks_kind = metric_kind(code=SEARCH_CLICKS_METRIC_CODE, save=True)
        metric_kind(code=SEARCH_SEARCHES_METRIC_CODE, save=True)
        search_ctr.return_value = {'2013-06-06': 42.123456789,
                                   '2013-06-07': 13.7654321,
                                   '2013-06-08': 99.55555}

        update_search_ctr_metric()

        metrics = Metric.objects.filter(kind=clicks_kind).order_by('start')
        eq_(3, len(metrics))
        eq_(421, metrics[0].value)
        eq_(138, metrics[1].value)
        eq_(date(2013, 6, 8), metrics[2].start)
Example #3
0
    def test_exit_survey_results(self):
        """Test the exist survey results API call."""
        # Create the metrics
        kind = metric_kind(code=EXIT_SURVEY_YES_CODE, save=True)
        metric(kind=kind, start=date.today(), end=date.today(), value=1337, save=True)
        kind = metric_kind(code=EXIT_SURVEY_NO_CODE, save=True)
        metric(kind=kind, start=date.today(), end=date.today(), value=42, save=True)
        kind = metric_kind(code=EXIT_SURVEY_DONT_KNOW_CODE, save=True)
        metric(kind=kind, start=date.today(), end=date.today(), value=777, save=True)

        # Verify the results returned from the API
        r = self._get_api_result("kpi_exit_survey_results")
        eq_(r["objects"][0]["yes"], 1337)
        eq_(r["objects"][0]["no"], 42)
        eq_(r["objects"][0]["dont_know"], 777)
Example #4
0
    def test_update_search_ctr(self, search_ctr):
        """Verify the cron job inserts the right rows."""
        clicks_kind = metric_kind(code=SEARCH_CLICKS_METRIC_CODE, save=True)
        metric_kind(code=SEARCH_SEARCHES_METRIC_CODE, save=True)
        search_ctr.return_value = {
            '2013-06-06': 42.123456789,
            '2013-06-07': 13.7654321,
            '2013-06-08': 99.55555
        }

        update_search_ctr_metric()

        metrics = Metric.objects.filter(kind=clicks_kind).order_by('start')
        eq_(3, len(metrics))
        eq_(421, metrics[0].value)
        eq_(138, metrics[1].value)
        eq_(date(2013, 6, 8), metrics[2].start)
Example #5
0
    def test_l10n_coverage(self):
        """Test l10n coverage API call."""
        # Create the metrics
        kind = metric_kind(code=L10N_METRIC_CODE, save=True)
        metric(kind=kind, start=date.today(), end=date.today(), value=56, save=True)

        # The l10n coverage should be 56%.
        r = self._get_api_result("kpi_l10n_coverage")
        eq_(r["objects"][0]["coverage"], 56)
Example #6
0
    def test_visitors(self):
        """Test unique visitors API call."""
        # Create the metric.
        kind = metric_kind(code=VISITORS_METRIC_CODE, save=True)
        metric(kind=kind, start=date.today(), end=date.today(), value=42, save=True)

        # There should be 42 visitors.
        r = self._get_api_result("kpi_visitors")
        eq_(r["objects"][0]["visitors"], 42)
Example #7
0
    def test_l10n_coverage(self):
        """Test l10n coverage API call."""
        # Create the metrics
        kind = metric_kind(code=L10N_METRIC_CODE, save=True)
        metric(kind=kind, start=date.today(), end=date.today(), value=56,
               save=True)

        # The l10n coverage should be 56%.
        r = self._get_api_result('kpi_l10n_coverage')
        eq_(r['objects'][0]['coverage'], 56)
Example #8
0
    def test_visitors(self):
        """Test unique visitors API call."""
        # Create the metric.
        kind = metric_kind(code=VISITORS_METRIC_CODE, save=True)
        metric(kind=kind, start=date.today(), end=date.today(), value=42,
               save=True)

        # There should be 42 visitors.
        r = self._get_api_result('kpi_visitors')
        eq_(r['objects'][0]['visitors'], 42)
Example #9
0
    def test_process_exit_surveys(self, requests):
        """Verify the metrics inserted by process_exit_surveys cron job."""
        requests.get.return_value.content = SURVEY_GIZMO_EXIT_SURVEY_RESPONSE

        # Create the kinds.
        yes_kind = metric_kind(code=EXIT_SURVEY_YES_CODE, save=True)
        no_kind = metric_kind(code=EXIT_SURVEY_NO_CODE, save=True)
        dunno_kind = metric_kind(code=EXIT_SURVEY_DONT_KNOW_CODE, save=True)
        two_days_back = date.today() - timedelta(days=2)

        # Add a metric for 2 days ago so only 1 new day is collected.
        metric(kind=yes_kind, start=two_days_back, save=True)

        # Collect and process.
        _process_exit_survey_results()

        # Verify.
        eq_(4, Metric.objects.count())
        eq_(2, Metric.objects.filter(kind=yes_kind)[1].value)
        eq_(1, Metric.objects.get(kind=no_kind).value)
        eq_(1, Metric.objects.get(kind=dunno_kind).value)
Example #10
0
    def test_process_exit_surveys(self, requests):
        """Verify the metrics inserted by process_exit_surveys cron job."""
        requests.get.return_value.content = SURVEY_GIZMO_EXIT_SURVEY_RESPONSE

        # Create the kinds.
        yes_kind = metric_kind(code=EXIT_SURVEY_YES_CODE, save=True)
        no_kind = metric_kind(code=EXIT_SURVEY_NO_CODE, save=True)
        dunno_kind = metric_kind(code=EXIT_SURVEY_DONT_KNOW_CODE, save=True)
        two_days_back = date.today() - timedelta(days=2)

        # Add a metric for 2 days ago so only 1 new day is collected.
        metric(kind=yes_kind, start=two_days_back, save=True)

        # Collect and process.
        _process_exit_survey_results()

        # Verify.
        eq_(4, Metric.objects.count())
        eq_(2, Metric.objects.filter(kind=yes_kind)[1].value)
        eq_(1, Metric.objects.get(kind=no_kind).value)
        eq_(1, Metric.objects.get(kind=dunno_kind).value)
Example #11
0
    def test_update_visitors_cron(self, visitors):
        """Verify the cron job inserts the right rows."""
        visitor_kind = metric_kind(code=VISITORS_METRIC_CODE, save=True)
        visitors.return_value = {'2012-01-13': 42,
                                 '2012-01-14': 193,
                                 '2012-01-15': 33}

        update_visitors_metric()

        metrics = Metric.objects.filter(kind=visitor_kind).order_by('start')
        eq_(3, len(metrics))
        eq_(42, metrics[0].value)
        eq_(193, metrics[1].value)
        eq_(date(2012, 01, 15), metrics[2].start)
Example #12
0
    def test_update_visitors_cron(self, visitors):
        """Verify the cron job inserts the right rows."""
        visitor_kind = metric_kind(code=VISITORS_METRIC_CODE, save=True)
        visitors.return_value = {
            '2012-01-13': 42,
            '2012-01-14': 193,
            '2012-01-15': 33
        }

        update_visitors_metric()

        metrics = Metric.objects.filter(kind=visitor_kind).order_by('start')
        eq_(3, len(metrics))
        eq_(42, metrics[0].value)
        eq_(193, metrics[1].value)
        eq_(date(2012, 01, 15), metrics[2].start)
Example #13
0
    def test_update_l10n_metric_cron(self, visitors_by_locale, _get_top_docs):
        """Verify the cron job creates the correct metric."""
        l10n_kind = metric_kind(code=L10N_METRIC_CODE, save=True)

        # Create the en-US document with an approved revision.
        doc = document(save=True)
        rev = revision(document=doc,
                       significance=MEDIUM_SIGNIFICANCE,
                       is_approved=True,
                       is_ready_for_localization=True,
                       save=True)

        # Create an es translation that is up to date.
        es_doc = document(parent=doc, locale='es', save=True)
        revision(document=es_doc, is_approved=True, based_on=rev, save=True)

        # Create a de translation without revisions.
        document(parent=doc, locale='de', save=True)

        # Mock some calls.
        visitors_by_locale.return_value = {
            'en-US': 50,
            'de': 20,
            'es': 25,
            'fr': 5,
        }
        _get_top_docs.return_value = [doc]

        # Run it and verify results.
        # Value should be 75% (1/1 * 25/100 + 1/1 * 50/100)
        update_l10n_metric()
        metrics = Metric.objects.filter(kind=l10n_kind)
        eq_(1, len(metrics))
        eq_(75, metrics[0].value)

        # Create a new revision with TYPO_SIGNIFICANCE. It shouldn't
        # affect the results.
        revision(document=doc,
                 significance=TYPO_SIGNIFICANCE,
                 is_approved=True,
                 is_ready_for_localization=True,
                 save=True)
        Metric.objects.all().delete()
        update_l10n_metric()
        metrics = Metric.objects.filter(kind=l10n_kind)
        eq_(1, len(metrics))
        eq_(75, metrics[0].value)

        # Create a new revision with MEDIUM_SIGNIFICANCE. The coverage
        # should now be 62% (0.5/1 * 25/100 + 1/1 * 50/100)
        m1 = revision(document=doc,
                      significance=MEDIUM_SIGNIFICANCE,
                      is_approved=True,
                      is_ready_for_localization=True,
                      save=True)
        Metric.objects.all().delete()
        update_l10n_metric()
        metrics = Metric.objects.filter(kind=l10n_kind)
        eq_(1, len(metrics))
        eq_(62, metrics[0].value)

        # And another new revision with MEDIUM_SIGNIFICANCE makes the
        # coverage 50% (1/1 * 50/100).
        m2 = revision(document=doc,
                      significance=MEDIUM_SIGNIFICANCE,
                      is_approved=True,
                      is_ready_for_localization=True,
                      save=True)
        Metric.objects.all().delete()
        update_l10n_metric()
        metrics = Metric.objects.filter(kind=l10n_kind)
        eq_(1, len(metrics))
        eq_(50, metrics[0].value)

        # If we remove the two MEDIUM_SIGNIFICANCE revisions and add a
        # MAJOR_SIGNIFICANCE revision, the coverage is 50% as well.
        m1.delete()
        m2.delete()
        revision(document=doc,
                 significance=MAJOR_SIGNIFICANCE,
                 is_approved=True,
                 is_ready_for_localization=True,
                 save=True)
        Metric.objects.all().delete()
        update_l10n_metric()
        metrics = Metric.objects.filter(kind=l10n_kind)
        eq_(1, len(metrics))
        eq_(50, metrics[0].value)
Example #14
0
 def _make_elastic_metric_kinds(self):
     click_kind = metric_kind(code='search clickthroughs:elastic:clicks',
                              save=True)
     search_kind = metric_kind(code='search clickthroughs:elastic:searches',
                               save=True)
     return click_kind, search_kind
Example #15
0
 def _make_elastic_metric_kinds(self):
     click_kind = metric_kind(code="search clickthroughs:elastic:clicks", save=True)
     search_kind = metric_kind(code="search clickthroughs:elastic:searches", save=True)
     return click_kind, search_kind
Example #16
0
 def _make_contributor_metric_kinds(self):
     metric_kind(code=AOA_CONTRIBUTORS_METRIC_CODE, save=True)
     metric_kind(code=KB_ENUS_CONTRIBUTORS_METRIC_CODE, save=True)
     metric_kind(code=KB_L10N_CONTRIBUTORS_METRIC_CODE, save=True)
     metric_kind(code=SUPPORT_FORUM_CONTRIBUTORS_METRIC_CODE, save=True)
Example #17
0
    def test_update_l10n_metric_cron(self, visitors_by_locale, _get_top_docs):
        """Verify the cron job creates the correct metric."""
        l10n_kind = metric_kind(code=L10N_METRIC_CODE, save=True)

        # Create the en-US document with an approved revision.
        doc = document(save=True)
        rev = revision(
            document=doc,
            significance=MEDIUM_SIGNIFICANCE,
            is_approved=True,
            is_ready_for_localization=True,
            save=True)

        # Create an es translation that is up to date.
        es_doc = document(parent=doc, locale='es', save=True)
        revision(
            document=es_doc,
            is_approved=True,
            based_on=rev,
            save=True)

        # Create a de translation without revisions.
        document(parent=doc, locale='de', save=True)

        # Mock some calls.
        visitors_by_locale.return_value = {
            'en-US': 50,
            'de': 20,
            'es': 25,
            'fr': 5,
        }
        _get_top_docs.return_value = [doc]

        # Run it and verify results.
        # Value should be 75% (1/1 * 25/100 + 1/1 * 50/100)
        update_l10n_metric()
        metrics = Metric.objects.filter(kind=l10n_kind)
        eq_(1, len(metrics))
        eq_(75, metrics[0].value)

        # Create a new revision with TYPO_SIGNIFICANCE. It shouldn't
        # affect the results.
        revision(
            document=doc,
            significance=TYPO_SIGNIFICANCE,
            is_approved=True,
            is_ready_for_localization=True,
            save=True)
        Metric.objects.all().delete()
        update_l10n_metric()
        metrics = Metric.objects.filter(kind=l10n_kind)
        eq_(1, len(metrics))
        eq_(75, metrics[0].value)

        # Create a new revision with MEDIUM_SIGNIFICANCE. The coverage
        # should now be 62% (0.5/1 * 25/100 + 1/1 * 50/100)
        m1 = revision(
            document=doc,
            significance=MEDIUM_SIGNIFICANCE,
            is_approved=True,
            is_ready_for_localization=True,
            save=True)
        Metric.objects.all().delete()
        update_l10n_metric()
        metrics = Metric.objects.filter(kind=l10n_kind)
        eq_(1, len(metrics))
        eq_(62, metrics[0].value)

        # And another new revision with MEDIUM_SIGNIFICANCE makes the
        # coverage 50% (1/1 * 50/100).
        m2 = revision(
            document=doc,
            significance=MEDIUM_SIGNIFICANCE,
            is_approved=True,
            is_ready_for_localization=True,
            save=True)
        Metric.objects.all().delete()
        update_l10n_metric()
        metrics = Metric.objects.filter(kind=l10n_kind)
        eq_(1, len(metrics))
        eq_(50, metrics[0].value)

        # If we remove the two MEDIUM_SIGNIFICANCE revisions and add a
        # MAJOR_SIGNIFICANCE revision, the coverage is 50% as well.
        m1.delete()
        m2.delete()
        revision(
            document=doc,
            significance=MAJOR_SIGNIFICANCE,
            is_approved=True,
            is_ready_for_localization=True,
            save=True)
        Metric.objects.all().delete()
        update_l10n_metric()
        metrics = Metric.objects.filter(kind=l10n_kind)
        eq_(1, len(metrics))
        eq_(50, metrics[0].value)
Example #18
0
 def _make_contributor_metric_kinds(self):
     metric_kind(code=AOA_CONTRIBUTORS_METRIC_CODE, save=True)
     metric_kind(code=KB_ENUS_CONTRIBUTORS_METRIC_CODE, save=True)
     metric_kind(code=KB_L10N_CONTRIBUTORS_METRIC_CODE, save=True)
     metric_kind(code=SUPPORT_FORUM_CONTRIBUTORS_METRIC_CODE, save=True)