def test_ban_and_disable_related_content_bulk(self, hide_disabled_mock): user_sole = user_factory(email='*****@*****.**', fxa_id='13579', last_login_ip='127.0.0.1') addon_sole = addon_factory(users=[user_sole]) self.setup_user_to_be_have_content_disabled(user_sole) user_multi = user_factory(email='*****@*****.**', fxa_id='24680', last_login_ip='127.0.0.2') innocent_user = user_factory() addon_multi = addon_factory(users=UserProfile.objects.filter( id__in=[user_multi.id, innocent_user.id])) self.setup_user_to_be_have_content_disabled(user_multi) # Now that everything is set up, disable/delete related content. UserProfile.ban_and_disable_related_content_bulk( [user_sole, user_multi]) addon_sole.reload() addon_multi.reload() # if sole dev should have been disabled, but the author retained assert addon_sole.status == amo.STATUS_DISABLED assert list(addon_sole.authors.all()) == [user_sole] # shouldn't have been disabled as it has another author assert addon_multi.status != amo.STATUS_DISABLED assert list(addon_multi.authors.all()) == [innocent_user] # the File objects have been disabled assert not File.objects.filter(version__addon=addon_sole).exclude( status=amo.STATUS_DISABLED).exists() # But not for the Add-on that wasn't disabled assert File.objects.filter(version__addon=addon_multi).exclude( status=amo.STATUS_DISABLED).exists() assert not user_sole._ratings_all.exists() # Even replies. assert not user_sole.collections.exists() assert not user_multi._ratings_all.exists() # Even replies. assert not user_multi.collections.exists() assert not storage.exists(user_sole.picture_path) assert not storage.exists(user_sole.picture_path_original) assert not storage.exists(user_multi.picture_path) assert not storage.exists(user_multi.picture_path_original) assert user_sole.deleted self.assertCloseToNow(user_sole.banned) self.assertCloseToNow(user_sole.modified) assert user_sole.email == '*****@*****.**' assert user_sole.auth_id assert user_sole.fxa_id == '13579' assert user_sole.last_login_ip == '127.0.0.1' assert user_multi.deleted self.assertCloseToNow(user_multi.banned) self.assertCloseToNow(user_multi.modified) assert user_multi.email == '*****@*****.**' assert user_multi.auth_id assert user_multi.fxa_id == '24680' assert user_multi.last_login_ip == '127.0.0.2' hide_disabled_mock.assert_not_called()
def test_ban_and_disable_related_content_bulk(self, hide_disabled_mock): user_sole = user_factory(email='*****@*****.**', fxa_id='13579') addon_sole = addon_factory(users=[user_sole]) self.setup_user_to_be_have_content_disabled(user_sole) user_multi = user_factory(email='*****@*****.**', fxa_id='24680') innocent_user = user_factory() addon_multi = addon_factory( users=UserProfile.objects.filter( id__in=[user_multi.id, innocent_user.id])) self.setup_user_to_be_have_content_disabled(user_multi) # Now that everything is set up, disable/delete related content. UserProfile.ban_and_disable_related_content_bulk( [user_sole, user_multi]) addon_sole.reload() addon_multi.reload() # if sole dev should have been disabled, but the author retained assert addon_sole.status == amo.STATUS_DISABLED assert list(addon_sole.authors.all()) == [user_sole] # shouldn't have been disabled as it has another author assert addon_multi.status != amo.STATUS_DISABLED assert list(addon_multi.authors.all()) == [innocent_user] # the File objects have been disabled assert not File.objects.filter(version__addon=addon_sole).exclude( status=amo.STATUS_DISABLED).exists() # But not for the Add-on that wasn't disabled assert File.objects.filter(version__addon=addon_multi).exclude( status=amo.STATUS_DISABLED).exists() assert not user_sole._ratings_all.exists() # Even replies. assert not user_sole.collections.exists() assert not user_multi._ratings_all.exists() # Even replies. assert not user_multi.collections.exists() assert not storage.exists(user_sole.picture_path) assert not storage.exists(user_sole.picture_path_original) assert not storage.exists(user_multi.picture_path) assert not storage.exists(user_multi.picture_path_original) assert user_sole.deleted assert user_sole.email == '*****@*****.**' assert user_sole.auth_id assert user_sole.fxa_id == '13579' assert user_multi.deleted assert user_multi.email == '*****@*****.**' assert user_multi.auth_id assert user_multi.fxa_id == '24680' hide_disabled_mock.assert_not_called()
def test_ban_and_disable_related_content_bulk( self, hide_disabled_mock, trigger_sync_objects_to_basket_mock): user_sole = user_factory(email='*****@*****.**', fxa_id='13579', last_login_ip='127.0.0.1') addon_sole = addon_factory(users=[user_sole]) self.setup_user_to_be_have_content_disabled(user_sole) user_multi = user_factory(email='*****@*****.**', fxa_id='24680', last_login_ip='127.0.0.2') innocent_user = user_factory() addon_multi = addon_factory(users=UserProfile.objects.filter( id__in=[user_multi.id, innocent_user.id])) self.setup_user_to_be_have_content_disabled(user_multi) trigger_sync_objects_to_basket_mock.reset_mock() # Now that everything is set up, disable/delete related content. UserProfile.ban_and_disable_related_content_bulk( [user_sole, user_multi]) addon_sole.reload() addon_multi.reload() # if sole dev should have been disabled, but the author retained assert addon_sole.status == amo.STATUS_DISABLED assert list(addon_sole.authors.all()) == [user_sole] # shouldn't have been disabled as it has another author assert addon_multi.status != amo.STATUS_DISABLED assert list(addon_multi.authors.all()) == [innocent_user] # the File objects have been disabled assert (not File.objects.filter(version__addon=addon_sole).exclude( status=amo.STATUS_DISABLED).exists()) # But not for the Add-on that wasn't disabled assert (File.objects.filter(version__addon=addon_multi).exclude( status=amo.STATUS_DISABLED).exists()) assert not user_sole._ratings_all.exists() # Even replies. assert not user_sole.collections.exists() assert not user_multi._ratings_all.exists() # Even replies. assert not user_multi.collections.exists() assert not storage.exists(user_sole.picture_path) assert not storage.exists(user_sole.picture_path_original) assert not storage.exists(user_multi.picture_path) assert not storage.exists(user_multi.picture_path_original) assert user_sole.deleted self.assertCloseToNow(user_sole.banned) self.assertCloseToNow(user_sole.modified) assert user_sole.email == '*****@*****.**' assert user_sole.auth_id assert user_sole.fxa_id == '13579' assert user_sole.last_login_ip == '127.0.0.1' assert user_multi.deleted self.assertCloseToNow(user_multi.banned) self.assertCloseToNow(user_multi.modified) assert user_multi.email == '*****@*****.**' assert user_multi.auth_id assert user_multi.fxa_id == '24680' assert user_multi.last_login_ip == '127.0.0.2' hide_disabled_mock.assert_not_called() assert trigger_sync_objects_to_basket_mock.call_count == 4 assert trigger_sync_objects_to_basket_mock.call_args_list[0][0] == ( 'addon', [addon_multi.pk], 'addonuser change', ) assert trigger_sync_objects_to_basket_mock.call_args_list[1][0] == ( 'addon', [addon_sole.pk], 'version change', ) assert trigger_sync_objects_to_basket_mock.call_args_list[2][0] == ( 'userprofile', [user_sole.pk, user_multi.pk], 'user ban', ) # Note: this extra call wouldn't be sent to Basket because the task being # triggered would be a duplicate with the one caused by the version change that # happens when the add-on was disabled, so we could remove it. But it's nice to # have it anyway as a catch-all in case somehow version_changed isn't triggered. assert trigger_sync_objects_to_basket_mock.call_args_list[3][0] == ( 'addon', [addon_sole.pk], 'user ban content', )