def clean(self): data = { prop: value for prop, value in self.cleaned_data.items() if prop in self.fields_to_akismet_comment_check} request_meta = getattr(self.request, 'META', {}) # Find out if there is existing metadata that's been spam checked. addon_listed_versions = self.instance.versions.filter( channel=amo.RELEASE_CHANNEL_LISTED) if self.version: # If this is in the submission flow, exclude version in progress. addon_listed_versions = addon_listed_versions.exclude( id=self.version.id) existing_data = ( fetch_existing_translations_from_addon( self.instance, self.fields_to_akismet_comment_check) if addon_listed_versions.exists() else ()) reports = get_addon_akismet_reports( user=getattr(self.request, 'user', None), user_agent=request_meta.get('HTTP_USER_AGENT'), referrer=request_meta.get('HTTP_REFERER'), addon=self.instance, data=data, existing_data=existing_data) error_msg = ugettext('The text entered has been flagged as spam.') error_if_spam = waffle.switch_is_active('akismet-addon-action') for prop, report in reports: is_spam = report.is_spam if error_if_spam and is_spam: self.add_error(prop, forms.ValidationError(error_msg)) return super(AkismetSpamCheckFormMixin, self).clean()
def test_addon_update(self): addon = addon_factory(summary=u'¡Ochó!', default_locale='es-AR') user = user_factory() existing_data = utils.fetch_existing_translations_from_addon( addon, ('summary', 'name', 'description')) # check fetch_existing_translations_from_addon worked okay assert existing_data == {text_type(addon.name), u'¡Ochó!'} cleaned_data = { 'description': { 'en-US': u'fóó', 'fr': u'lé foo', 'de': '', # should be ignored because empty 'es-ES': u'¡Ochó!' # ignored because in exist_data }, 'name': { 'en-GB': u'just one name', 'fr': None, }, } user_agent = 'Mr User/Agent' referrer = 'http://foo.baa/' reports = utils.get_addon_akismet_reports(user, user_agent, referrer, addon=addon, data=cleaned_data, existing_data=existing_data) assert len(reports) == 3 assert self.create_for_addon_mock.call_count == 3 calls = [ mock.call(upload=None, addon=addon, user=user, property_name='name', property_value=u'just one name', user_agent=user_agent, referrer=referrer), mock.call(upload=None, addon=addon, user=user, property_name='description', property_value=u'fóó', user_agent=user_agent, referrer=referrer), mock.call(upload=None, addon=addon, user=user, property_name='description', property_value=u'lé foo', user_agent=user_agent, referrer=referrer) ] self.create_for_addon_mock.assert_has_calls(calls, any_order=True)
def test_addon_update(self): addon = addon_factory(summary=u'¡Ochó!', default_locale='es-AR') user = user_factory() existing_data = utils.fetch_existing_translations_from_addon( addon, ('summary', 'name', 'description')) # check fetch_existing_translations_from_addon worked okay assert existing_data == {text_type(addon.name), u'¡Ochó!'} cleaned_data = { 'description': { 'en-US': u'fóó', 'fr': u'lé foo', 'de': '', # should be ignored because empty 'es-ES': u'¡Ochó!' # ignored because in exist_data }, 'name': { 'en-GB': u'just one name', 'fr': None, }, } user_agent = 'Mr User/Agent' referrer = 'http://foo.baa/' reports = utils.get_addon_akismet_reports( user, user_agent, referrer, addon=addon, data=cleaned_data, existing_data=existing_data) assert len(reports) == 3 assert self.create_for_addon_mock.call_count == 3 calls = [ mock.call( upload=None, addon=addon, user=user, property_name='name', property_value=u'just one name', user_agent=user_agent, referrer=referrer), mock.call( upload=None, addon=addon, user=user, property_name='description', property_value=u'fóó', user_agent=user_agent, referrer=referrer), mock.call( upload=None, addon=addon, user=user, property_name='description', property_value=u'lé foo', user_agent=user_agent, referrer=referrer)] self.create_for_addon_mock.assert_has_calls(calls, any_order=True)