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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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
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
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)
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)