Exemplo n.º 1
0
    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()
Exemplo n.º 2
0
    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()
Exemplo n.º 3
0
    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',
        )