def test_13_day_window(self): addon = Addon.objects.get(pk=3615) # can't use a fixed date since we are relying on # mysql to get us the `CURDATE()` today = datetime.date.today() # data is coming from `tab groups` add-on from # jun 11 till may 29th 2017 stats = [ (today - datetime.timedelta(days=days_in_past), update_count) for days_in_past, update_count in ( (1, 82708), (2, 78793), (3, 99586), (4, 104426), (5, 105431), (6, 106065), (7, 98093), (8, 81710), (9, 78843), (10, 99383), (11, 104431), (12, 105943), (13, 105039), (14, 100183), (15, 82265) )] UpdateCount.objects.bulk_create([ UpdateCount(addon=addon, date=date, count=count) for date, count in stats ]) addon.update(average_daily_users=0) cron.update_addon_average_daily_users() addon.refresh_from_db() assert ( 82708 + 78793 + 99586 + 104426 + 105431 + 106065 + 98093 + 81710 + 78843 + 99383 + 104431 + 105943) / 12 == 95451 assert addon.average_daily_users == 95451
def test_13_day_window(self): addon = Addon.objects.get(pk=3615) # can't use a fixed date since we are relying on # mysql to get us the `CURDATE()` today = datetime.date.today() # data is coming from `tab groups` add-on from # jun 11 till may 29th 2017 stats = [ (today - datetime.timedelta(days=days_in_past), update_count) for days_in_past, update_count in ( (1, 82708), (2, 78793), (3, 99586), (4, 104426), (5, 105431), (6, 106065), (7, 98093), (8, 81710), (9, 78843), (10, 99383), (11, 104431), (12, 105943), (13, 105039), (14, 100183), (15, 82265) )] UpdateCount.objects.bulk_create([ UpdateCount(addon=addon, date=date, count=count) for date, count in stats ]) addon.update(average_daily_users=0) cron.update_addon_average_daily_users() addon.refresh_from_db() assert ( 82708 + 78793 + 99586 + 104426 + 105431 + 106065 + 98093 + 81710 + 78843 + 99383 + 104431 + 105943) / 12 == 95451 assert addon.average_daily_users == 95451
def test_update_addon_average_daily_users_values_with_bigquery( self, get_mock, create_chunked_mock): create_chunked_mock.return_value = group([]) addon = Addon.objects.get(pk=3615) addon.update(average_daily_users=0) count = 56789 langpack = addon_factory(type=amo.ADDON_LPAPP, average_daily_users=0) langpack_count = 12345 dictionary = addon_factory(type=amo.ADDON_DICT, average_daily_users=0) dictionary_count = 6789 addon_without_count = addon_factory(type=amo.ADDON_DICT, average_daily_users=2) # This one should be ignored. addon_factory(guid=None, type=amo.ADDON_LPAPP) # This one should be ignored as well. addon_factory(guid='', type=amo.ADDON_LPAPP) get_mock.return_value = [ (addon.guid, count), (langpack.guid, langpack_count), (dictionary.guid, dictionary_count), ] cron.update_addon_average_daily_users() create_chunked_mock.assert_called_with( update_addon_average_daily_users, [ (addon_without_count.guid, 0), (addon.guid, count), (langpack.guid, langpack_count), (dictionary.guid, dictionary_count), ], 250)
def test_update_addon_average_daily_users_with_bigquery(self, get_mock): addon = Addon.objects.get(pk=3615) addon.update(average_daily_users=0) count = 56789 langpack = addon_factory(type=amo.ADDON_LPAPP, average_daily_users=0) langpack_count = 12345 dictionary = addon_factory(type=amo.ADDON_DICT, average_daily_users=0) dictionary_count = 5567 addon_without_count = addon_factory(type=amo.ADDON_DICT, average_daily_users=2) assert addon.average_daily_users == 0 assert langpack.average_daily_users == 0 assert dictionary.average_daily_users == 0 assert addon_without_count.average_daily_users == 2 get_mock.return_value = [ (addon.guid, count), (dictionary.guid, dictionary_count), (langpack.guid, langpack_count), ] cron.update_addon_average_daily_users() addon.refresh_from_db() langpack.refresh_from_db() dictionary.refresh_from_db() addon_without_count.refresh_from_db() get_mock.assert_called assert addon.average_daily_users == count assert langpack.average_daily_users == langpack_count assert dictionary.average_daily_users == dictionary_count # The value is 0 because the add-on does not exist in BigQuery. assert addon_without_count.average_daily_users == 0
def test_update_addon_average_daily_users_with_bigquery(self, get_mock): addon = Addon.objects.get(pk=3615) addon.update(average_daily_users=0) count = 56789 get_mock.return_value = [(addon.guid, count)] cron.update_addon_average_daily_users() addon.refresh_from_db() get_mock.assert_called assert addon.average_daily_users == count
def test_update_addon_average_daily_users_values_with_bigquery( self, get_mock, chunked_mock ): chunked_mock.return_value = [] addon = Addon.objects.get(pk=3615) addon.update(average_daily_users=0) count = 56789 get_mock.return_value = [(addon.guid, count)] # We use download counts for langpacks. langpack = addon_factory(type=amo.ADDON_LPAPP, average_daily_users=0) langpack_count = 12345 DownloadCount.objects.update_or_create( addon=langpack, date=datetime.date.today(), defaults={'count': langpack_count} ) DownloadCount.objects.update_or_create( addon=langpack, date=self.days_ago(3), defaults={'count': 0} ) # We use download counts for dictionaries. dictionary = addon_factory(type=amo.ADDON_DICT, average_daily_users=0) dictionary_count = 6789 DownloadCount.objects.update_or_create( addon=dictionary, date=datetime.date.today(), defaults={'count': 6780} ) DownloadCount.objects.update_or_create( addon=dictionary, date=self.days_ago(2), defaults={'count': 9} ) # This one should be ignored. addon_without_guid = addon_factory(guid=None, type=amo.ADDON_LPAPP) DownloadCount.objects.update_or_create( addon=addon_without_guid, date=datetime.date.today(), defaults={'count': 123} ) # This one should be ignored as well. addon_factory(guid='', type=amo.ADDON_LPAPP) cron.update_addon_average_daily_users() chunked_mock.assert_called_with([ (addon.guid, count), (langpack.guid, langpack_count), (dictionary.guid, dictionary_count), ], 250)
def test_update_addon_average_daily_users_with_bigquery(self, get_mock): addon = Addon.objects.get(pk=3615) addon.update(average_daily_users=0) count = 56789 # We use download counts for langpacks. langpack = addon_factory(type=amo.ADDON_LPAPP, average_daily_users=0) langpack_count = 12345 DownloadCount.objects.update_or_create( addon=langpack, date=datetime.date.today(), defaults={'count': langpack_count} ) # We use download counts for dictionaries. dictionary = addon_factory(type=amo.ADDON_DICT, average_daily_users=0) dictionary_count = 5567 DownloadCount.objects.update_or_create( addon=dictionary, date=datetime.date.today(), defaults={'count': dictionary_count} ) addon_without_count = addon_factory(type=amo.ADDON_DICT, average_daily_users=2) assert addon.average_daily_users == 0 assert langpack.average_daily_users == 0 assert dictionary.average_daily_users == 0 assert addon_without_count.average_daily_users == 2 # Pretend bigquery is returning correct data for the extension, but # also incorrect data for langpacks and dicts - we should ignore those. get_mock.return_value = [ (addon.guid, count), (dictionary.guid, 42), (langpack.guid, 42), ] cron.update_addon_average_daily_users() addon.refresh_from_db() langpack.refresh_from_db() dictionary.refresh_from_db() addon_without_count.refresh_from_db() get_mock.assert_called assert addon.average_daily_users == count assert langpack.average_daily_users == langpack_count assert dictionary.average_daily_users == dictionary_count # The value is 0 because the add-on does not have download counts. assert addon_without_count.average_daily_users == 0