Esempio n. 1
0
 def setUp(self):
     self.admin = DocumentSpamAttemptAdmin(DocumentSpamAttempt, AdminSite())
     self.user = User.objects.get(username='******')
     self.admin_user = User.objects.get(username='******')
     self.request = RequestFactory().get('/admin/dsa')
     self.request.user = self.admin_user
     # Enable admin's message_user
     self.request.session = {}
     self.get_messages(self.request)
Esempio n. 2
0
 def setUp(self):
     self.admin = DocumentSpamAttemptAdmin(DocumentSpamAttempt, AdminSite())
     self.user = User.objects.get(username='******')
     self.admin_user = User.objects.get(username='******')
     self.request = RequestFactory().get('/admin/dsa')
     self.request.user = self.admin_user
     # Enable admin's message_user
     self.request.session = {}
     self.get_messages(self.request)
Esempio n. 3
0
class DocumentSpamAttemptAdminTestCase(UserTestCase):
    fixtures = UserTestCase.fixtures + ['wiki/documents.json']
    sample_data = """{
        "blog_lang": "en_us",
        "comment_type": "wiki-revision",
        "referrer": "https://developer.mozilla.org/en-US/docs/new?slug=Web/CSS",
        "user_ip": "192.168.10.1",
        "blog_charset": "UTF-8",
        "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3)",
        "comment_content": "Web_CSS\\nWeb_CSS\\n\\n<p>spam</p>\\nComment\\n\\n",
        "comment_author": "viagra-test-123",
        "comment_author_email": "*****@*****.**"
    }"""

    def setUp(self):
        self.admin = DocumentSpamAttemptAdmin(DocumentSpamAttempt, AdminSite())
        self.user = User.objects.get(username='******')
        self.admin_user = User.objects.get(username='******')
        self.request = RequestFactory().get('/admin/dsa')
        self.request.user = self.admin_user
        # Enable admin's message_user
        self.request.session = {}
        self.get_messages(self.request)

    def test_title_short(self):
        dsa = DocumentSpamAttempt(title='A short title')
        assert self.admin.title_short(dsa) == 'A short title'
        dsa.title = 'A long title that will need to be truncated.'
        assert self.admin.title_short(dsa) == 'A long title that will...'

    def test_slug_short(self):
        dsa = DocumentSpamAttempt(slug='Web/CSS')
        assert self.admin.slug_short(dsa) == 'Web/CSS'
        dsa.slug = 'Web/A_long_slug_that_will_be_truncated'
        assert self.admin.slug_short(dsa) == 'Web/A_long_slug_that_w...'''

    def test_submitted_data(self):
        dsa = DocumentSpamAttempt(data=None)
        expected = self.admin.SUBMISSION_NOT_AVAILABLE
        assert self.admin.submitted_data(dsa) == expected
        dsa.data = '{"foo": "bar"}'
        assert self.admin.submitted_data(dsa) == (
            '{\n'
            '    "foo": "bar"\n'
            '}')

    def assert_needs_review(self):
        dsa = DocumentSpamAttempt.objects.get()
        assert dsa.review == DocumentSpamAttempt.NEEDS_REVIEW
        assert dsa.reviewer is None
        assert dsa.reviewed is None

    @requests_mock.mock()
    def test_save_no_review(self, mock_requests):
        dsa = DocumentSpamAttempt(user=self.user,
                                  title='Not reviewed',
                                  slug='test/spam')
        assert not DocumentSpamAttempt.objects.exists()
        self.admin.save_model(self.request, dsa, None, True)
        self.assert_needs_review()

    @requests_mock.mock()
    def test_save_no_data(self, mock_requests):
        dsa = DocumentSpamAttempt(user=self.user,
                                  title='No data',
                                  slug='test/spam',
                                  review=DocumentSpamAttempt.HAM)
        assert not DocumentSpamAttempt.objects.exists()
        self.admin.save_model(self.request, dsa, None, True)
        dsa = DocumentSpamAttempt.objects.get()
        assert dsa.review == DocumentSpamAttempt.HAM
        assert dsa.reviewer == self.admin_user
        assert dsa.reviewed is not None

    @requests_mock.mock()
    def test_save_confirm_spam(self, mock_requests):
        dsa = DocumentSpamAttempt(user=self.user,
                                  title='Confirmed as Spam',
                                  slug='test/spam',
                                  data=self.sample_data,
                                  review=DocumentSpamAttempt.SPAM)
        assert not DocumentSpamAttempt.objects.exists()
        self.admin.save_model(self.request, dsa, None, True)
        dsa = DocumentSpamAttempt.objects.get()
        assert dsa.review == DocumentSpamAttempt.SPAM
        assert dsa.reviewer == self.admin_user
        assert dsa.reviewed is not None

    @override_config(AKISMET_KEY='admin')
    @requests_mock.mock()
    def test_save_false_positive(self, mock_requests):
        flag, created = Flag.objects.get_or_create(name=SPAM_SUBMISSIONS_FLAG)
        flag.users.add(self.admin_user)
        dsa = DocumentSpamAttempt(user=self.user,
                                  title='No data',
                                  slug='test/spam',
                                  data=self.sample_data,
                                  review=DocumentSpamAttempt.HAM)
        assert not DocumentSpamAttempt.objects.exists()
        mock_requests.post(VERIFY_URL, content='valid')
        mock_requests.post(HAM_URL, content=Akismet.submission_success)
        self.admin.save_model(self.request, dsa, None, True)
        dsa = DocumentSpamAttempt.objects.get()
        assert dsa.review == DocumentSpamAttempt.HAM
        assert dsa.reviewer == self.admin_user
        assert dsa.reviewed is not None

    @override_config(AKISMET_KEY='')
    @requests_mock.mock()
    def test_save_false_positive_no_akismet(self, mock_requests):
        flag, created = Flag.objects.get_or_create(name=SPAM_SUBMISSIONS_FLAG)
        flag.users.add(self.admin_user)
        dsa = DocumentSpamAttempt(user=self.user,
                                  title='No data',
                                  slug='test/spam',
                                  data=self.sample_data,
                                  review=DocumentSpamAttempt.HAM)
        assert not DocumentSpamAttempt.objects.exists()
        mock_requests.post(VERIFY_URL, content='valid')
        mock_requests.post(HAM_URL, content=Akismet.submission_success)
        self.admin.save_model(self.request, dsa, None, True)
        self.assert_needs_review()

    @override_config(AKISMET_KEY='admin')
    @requests_mock.mock()
    def test_save_false_positive_no_submission_flag(self, mock_requests):
        dsa = DocumentSpamAttempt(user=self.user,
                                  title='No data',
                                  slug='test/spam',
                                  data=self.sample_data,
                                  review=DocumentSpamAttempt.HAM)
        assert not DocumentSpamAttempt.objects.exists()
        mock_requests.post(VERIFY_URL, content='valid')
        mock_requests.post(HAM_URL, content=Akismet.submission_success)
        self.admin.save_model(self.request, dsa, None, True)
        self.assert_needs_review()
Esempio n. 4
0
class DocumentSpamAttemptAdminTestCase(UserTestCase):
    fixtures = UserTestCase.fixtures + ['wiki/documents.json']
    sample_data = """{
        "blog_lang": "en_us",
        "comment_type": "wiki-revision",
        "referrer": "https://developer.mozilla.org/en-US/docs/new?slug=Web/CSS",
        "user_ip": "192.168.10.1",
        "blog_charset": "UTF-8",
        "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3)",
        "comment_content": "Web_CSS\\nWeb_CSS\\n\\n<p>spam</p>\\nComment\\n\\n",
        "comment_author": "viagra-test-123",
        "comment_author_email": "*****@*****.**"
    }"""

    def setUp(self):
        self.admin = DocumentSpamAttemptAdmin(DocumentSpamAttempt, AdminSite())
        self.user = User.objects.get(username='******')
        self.admin_user = User.objects.get(username='******')
        self.request = RequestFactory().get('/admin/dsa')
        self.request.user = self.admin_user
        # Enable admin's message_user
        self.request.session = {}
        self.get_messages(self.request)

    def test_title_short(self):
        dsa = DocumentSpamAttempt(title='A short title')
        assert self.admin.title_short(dsa) == 'A short title'
        dsa.title = 'A long title that will need to be truncated.'
        assert self.admin.title_short(dsa) == 'A long title that will...'

    def test_slug_short(self):
        dsa = DocumentSpamAttempt(slug='Web/CSS')
        assert self.admin.slug_short(dsa) == 'Web/CSS'
        dsa.slug = 'Web/A_long_slug_that_will_be_truncated'
        assert self.admin.slug_short(dsa) == 'Web/A_long_slug_that_w...'''

    def test_doc_short_without_document(self):
        dsa = DocumentSpamAttempt(slug='Slug')
        assert self.admin.doc_short(dsa) == '<em>new document</em>'

    def test_doc_short_short_slug_and_title(self):
        slug = 'NotSpam'
        html = '<p>This page is not spam.</p>'
        doc = document(title='blah', slug=slug, html=html, save=True)
        revision(document=doc, content=html, is_approved=True, save=True)
        dsa = DocumentSpamAttempt(slug=slug, document=doc)
        assert self.admin.doc_short(dsa) == u'/en-US/docs/NotSpam (blah)'
        assert self.admin.doc_short(dsa) == str(doc)

    def test_doc_short_long_slug_and_title(self):
        slug = 'Web/Guide/HTML/Sections_and_Outlines_of_an_HTML5_document'
        title = 'Sections and Outlines of an HTML5 Document'
        html = '<p>This German page is not spam.</p>'
        doc = document(title=title, slug=slug, html=html, save=True,
                       locale='de')
        revision(document=doc, content=html, is_approved=True, save=True)
        dsa = DocumentSpamAttempt(slug=slug, document=doc)
        expected = u'/de/docs/Web/Guide/HTML/… (Sections and Outlines of…)'
        assert self.admin.doc_short(dsa) == expected

    def test_doc_short_long_unicode(self):
        slug = u'Web/Guide/HTML/HTML5_ডকুমেন্টের_সেকশন_এবং_আউটলাইন'
        title = u'HTML5 ডকুমেন্টের সেকশন এবং আউটলাইন'
        html = '<p>This Bengali page is not spam.</p>'
        doc = document(title=title, slug=slug, html=html, save=True,
                       locale='bn-BD')
        revision(document=doc, content=html, is_approved=True, save=True)
        dsa = DocumentSpamAttempt(slug=slug, document=doc)
        expected = u'/bn-BD/docs/Web/Guide/HT… (HTML5 ডকুমেন্টের সেকশন এব…)'
        assert self.admin.doc_short(dsa) == expected

    def test_submitted_data(self):
        dsa = DocumentSpamAttempt(data=None)
        assert self.admin.submitted_data(dsa) == SUBMISSION_NOT_AVAILABLE
        data = '{"foo": "bar"}'
        dsa.data = data
        expected = '\n'.join((
            '<dl>',
            '  <dt>foo</dt><dd>bar</dd>',
            '</dl>'))
        assert self.admin.submitted_data(dsa) == expected

    def assert_needs_review(self):
        dsa = DocumentSpamAttempt.objects.get()
        assert dsa.review == DocumentSpamAttempt.NEEDS_REVIEW
        assert dsa.reviewer is None
        assert dsa.reviewed is None

    @requests_mock.mock()
    def test_save_no_review(self, mock_requests):
        dsa = DocumentSpamAttempt(user=self.user,
                                  title='Not reviewed',
                                  slug='test/spam')
        assert not DocumentSpamAttempt.objects.exists()
        self.admin.save_model(self.request, dsa, None, True)
        self.assert_needs_review()

    @requests_mock.mock()
    def test_save_no_data(self, mock_requests):
        dsa = DocumentSpamAttempt(user=self.user,
                                  title='No data',
                                  slug='test/spam',
                                  review=DocumentSpamAttempt.HAM)
        assert not DocumentSpamAttempt.objects.exists()
        self.admin.save_model(self.request, dsa, None, True)
        dsa = DocumentSpamAttempt.objects.get()
        assert dsa.review == DocumentSpamAttempt.HAM
        assert dsa.reviewer == self.admin_user
        assert dsa.reviewed is not None

    @requests_mock.mock()
    def test_save_confirm_spam(self, mock_requests):
        dsa = DocumentSpamAttempt(user=self.user,
                                  title='Confirmed as Spam',
                                  slug='test/spam',
                                  data=self.sample_data,
                                  review=DocumentSpamAttempt.SPAM)
        assert not DocumentSpamAttempt.objects.exists()
        self.admin.save_model(self.request, dsa, None, True)
        dsa = DocumentSpamAttempt.objects.get()
        assert dsa.review == DocumentSpamAttempt.SPAM
        assert dsa.reviewer == self.admin_user
        assert dsa.reviewed is not None

    @override_config(AKISMET_KEY='admin')
    @requests_mock.mock()
    def test_save_false_positive(self, mock_requests):
        flag, created = Flag.objects.get_or_create(name=SPAM_SUBMISSIONS_FLAG)
        flag.users.add(self.admin_user)
        dsa = DocumentSpamAttempt(user=self.user,
                                  title='No data',
                                  slug='test/spam',
                                  data=self.sample_data,
                                  review=DocumentSpamAttempt.HAM)
        assert not DocumentSpamAttempt.objects.exists()
        mock_requests.post(VERIFY_URL, content='valid')
        mock_requests.post(HAM_URL, content=Akismet.submission_success)
        self.admin.save_model(self.request, dsa, None, True)
        dsa = DocumentSpamAttempt.objects.get()
        assert dsa.review == DocumentSpamAttempt.HAM
        assert dsa.reviewer == self.admin_user
        assert dsa.reviewed is not None
        assert mock_requests.called
        assert mock_requests.call_count == 2

    @override_config(AKISMET_KEY='')
    @requests_mock.mock()
    def test_save_false_positive_no_akismet(self, mock_requests):
        flag, created = Flag.objects.get_or_create(name=SPAM_SUBMISSIONS_FLAG)
        flag.users.add(self.admin_user)
        dsa = DocumentSpamAttempt(user=self.user,
                                  title='No data',
                                  slug='test/spam',
                                  data=self.sample_data,
                                  review=DocumentSpamAttempt.HAM)
        assert not DocumentSpamAttempt.objects.exists()
        mock_requests.post(VERIFY_URL, content='valid')
        mock_requests.post(HAM_URL, content=Akismet.submission_success)
        self.admin.save_model(self.request, dsa, None, True)
        self.assert_needs_review()

    @override_config(AKISMET_KEY='admin')
    @requests_mock.mock()
    def test_save_false_positive_no_submission_flag(self, mock_requests):
        dsa = DocumentSpamAttempt(user=self.user,
                                  title='No data',
                                  slug='test/spam',
                                  data=self.sample_data,
                                  review=DocumentSpamAttempt.HAM)
        assert not DocumentSpamAttempt.objects.exists()
        mock_requests.post(VERIFY_URL, content='valid')
        mock_requests.post(HAM_URL, content=Akismet.submission_success)
        self.admin.save_model(self.request, dsa, None, True)
        self.assert_needs_review()
Esempio n. 5
0
class DocumentSpamAttemptAdminTestCase(UserTestCase):
    fixtures = UserTestCase.fixtures + ['wiki/documents.json']
    sample_data = """{
        "blog_lang": "en_us",
        "comment_type": "wiki-revision",
        "referrer": "https://developer.mozilla.org/en-US/docs/new?slug=Web/CSS",
        "user_ip": "192.168.10.1",
        "blog_charset": "UTF-8",
        "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3)",
        "comment_content": "Web_CSS\\nWeb_CSS\\n\\n<p>spam</p>\\nComment\\n\\n",
        "comment_author": "viagra-test-123",
        "comment_author_email": "*****@*****.**"
    }"""

    def setUp(self):
        self.admin = DocumentSpamAttemptAdmin(DocumentSpamAttempt, AdminSite())
        self.user = User.objects.get(username='******')
        self.admin_user = User.objects.get(username='******')
        self.request = RequestFactory().get('/admin/dsa')
        self.request.user = self.admin_user
        # Enable admin's message_user
        self.request.session = {}
        self.get_messages(self.request)

    def test_title_short(self):
        dsa = DocumentSpamAttempt(title='A short title')
        assert self.admin.title_short(dsa) == 'A short title'
        dsa.title = 'A long title that will need to be truncated.'
        assert self.admin.title_short(dsa) == 'A long title that will...'

    def test_slug_short(self):
        dsa = DocumentSpamAttempt(slug='Web/CSS')
        assert self.admin.slug_short(dsa) == 'Web/CSS'
        dsa.slug = 'Web/A_long_slug_that_will_be_truncated'
        assert self.admin.slug_short(dsa) == 'Web/A_long_slug_that_w...' ''

    def test_doc_short_without_document(self):
        dsa = DocumentSpamAttempt(slug='Slug')
        assert self.admin.doc_short(dsa) == '<em>new document</em>'

    def test_doc_short_short_slug_and_title(self):
        slug = 'NotSpam'
        html = '<p>This page is not spam.</p>'
        doc = document(title='blah', slug=slug, html=html, save=True)
        revision(document=doc, content=html, is_approved=True, save=True)
        dsa = DocumentSpamAttempt(slug=slug, document=doc)
        assert self.admin.doc_short(dsa) == u'/en-US/docs/NotSpam (blah)'
        assert self.admin.doc_short(dsa) == str(doc)

    def test_doc_short_long_slug_and_title(self):
        slug = 'Web/Guide/HTML/Sections_and_Outlines_of_an_HTML5_document'
        title = 'Sections and Outlines of an HTML5 Document'
        html = '<p>This German page is not spam.</p>'
        doc = document(title=title,
                       slug=slug,
                       html=html,
                       save=True,
                       locale='de')
        revision(document=doc, content=html, is_approved=True, save=True)
        dsa = DocumentSpamAttempt(slug=slug, document=doc)
        expected = u'/de/docs/Web/Guide/HTML/… (Sections and Outlines of…)'
        assert self.admin.doc_short(dsa) == expected

    def test_doc_short_long_unicode(self):
        slug = u'Web/Guide/HTML/HTML5_ডকুমেন্টের_সেকশন_এবং_আউটলাইন'
        title = u'HTML5 ডকুমেন্টের সেকশন এবং আউটলাইন'
        html = '<p>This Bengali page is not spam.</p>'
        doc = document(title=title,
                       slug=slug,
                       html=html,
                       save=True,
                       locale='bn-BD')
        revision(document=doc, content=html, is_approved=True, save=True)
        dsa = DocumentSpamAttempt(slug=slug, document=doc)
        expected = u'/bn-BD/docs/Web/Guide/HT… (HTML5 ডকুমেন্টের সেকশন এব…)'
        assert self.admin.doc_short(dsa) == expected

    def test_submitted_data(self):
        dsa = DocumentSpamAttempt(data=None)
        assert self.admin.submitted_data(dsa) == SUBMISSION_NOT_AVAILABLE
        data = '{"foo": "bar"}'
        dsa.data = data
        assert self.admin.submitted_data(dsa) == data

    def assert_needs_review(self):
        dsa = DocumentSpamAttempt.objects.get()
        assert dsa.review == DocumentSpamAttempt.NEEDS_REVIEW
        assert dsa.reviewer is None
        assert dsa.reviewed is None

    @requests_mock.mock()
    def test_save_no_review(self, mock_requests):
        dsa = DocumentSpamAttempt(user=self.user,
                                  title='Not reviewed',
                                  slug='test/spam')
        assert not DocumentSpamAttempt.objects.exists()
        self.admin.save_model(self.request, dsa, None, True)
        self.assert_needs_review()

    @requests_mock.mock()
    def test_save_no_data(self, mock_requests):
        dsa = DocumentSpamAttempt(user=self.user,
                                  title='No data',
                                  slug='test/spam',
                                  review=DocumentSpamAttempt.HAM)
        assert not DocumentSpamAttempt.objects.exists()
        self.admin.save_model(self.request, dsa, None, True)
        dsa = DocumentSpamAttempt.objects.get()
        assert dsa.review == DocumentSpamAttempt.HAM
        assert dsa.reviewer == self.admin_user
        assert dsa.reviewed is not None

    @requests_mock.mock()
    def test_save_confirm_spam(self, mock_requests):
        dsa = DocumentSpamAttempt(user=self.user,
                                  title='Confirmed as Spam',
                                  slug='test/spam',
                                  data=self.sample_data,
                                  review=DocumentSpamAttempt.SPAM)
        assert not DocumentSpamAttempt.objects.exists()
        self.admin.save_model(self.request, dsa, None, True)
        dsa = DocumentSpamAttempt.objects.get()
        assert dsa.review == DocumentSpamAttempt.SPAM
        assert dsa.reviewer == self.admin_user
        assert dsa.reviewed is not None

    @override_config(AKISMET_KEY='admin')
    @requests_mock.mock()
    def test_save_false_positive(self, mock_requests):
        flag, created = Flag.objects.get_or_create(name=SPAM_SUBMISSIONS_FLAG)
        flag.users.add(self.admin_user)
        dsa = DocumentSpamAttempt(user=self.user,
                                  title='No data',
                                  slug='test/spam',
                                  data=self.sample_data,
                                  review=DocumentSpamAttempt.HAM)
        assert not DocumentSpamAttempt.objects.exists()
        mock_requests.post(VERIFY_URL, content='valid')
        mock_requests.post(HAM_URL, content=Akismet.submission_success)
        self.admin.save_model(self.request, dsa, None, True)
        dsa = DocumentSpamAttempt.objects.get()
        assert dsa.review == DocumentSpamAttempt.HAM
        assert dsa.reviewer == self.admin_user
        assert dsa.reviewed is not None
        assert mock_requests.called
        assert mock_requests.call_count == 2

    @override_config(AKISMET_KEY='')
    @requests_mock.mock()
    def test_save_false_positive_no_akismet(self, mock_requests):
        flag, created = Flag.objects.get_or_create(name=SPAM_SUBMISSIONS_FLAG)
        flag.users.add(self.admin_user)
        dsa = DocumentSpamAttempt(user=self.user,
                                  title='No data',
                                  slug='test/spam',
                                  data=self.sample_data,
                                  review=DocumentSpamAttempt.HAM)
        assert not DocumentSpamAttempt.objects.exists()
        mock_requests.post(VERIFY_URL, content='valid')
        mock_requests.post(HAM_URL, content=Akismet.submission_success)
        self.admin.save_model(self.request, dsa, None, True)
        self.assert_needs_review()

    @override_config(AKISMET_KEY='admin')
    @requests_mock.mock()
    def test_save_false_positive_no_submission_flag(self, mock_requests):
        dsa = DocumentSpamAttempt(user=self.user,
                                  title='No data',
                                  slug='test/spam',
                                  data=self.sample_data,
                                  review=DocumentSpamAttempt.HAM)
        assert not DocumentSpamAttempt.objects.exists()
        mock_requests.post(VERIFY_URL, content='valid')
        mock_requests.post(HAM_URL, content=Akismet.submission_success)
        self.admin.save_model(self.request, dsa, None, True)
        self.assert_needs_review()
Esempio n. 6
0
class DocumentSpamAttemptAdminTestCase(UserTestCase):
    fixtures = UserTestCase.fixtures + ['wiki/documents.json']
    sample_data = """{
        "blog_lang": "en_us",
        "comment_type": "wiki-revision",
        "referrer": "https://developer.mozilla.org/en-US/docs/new?slug=Web/CSS",
        "user_ip": "192.168.10.1",
        "blog_charset": "UTF-8",
        "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3)",
        "comment_content": "Web_CSS\\nWeb_CSS\\n\\n<p>spam</p>\\nComment\\n\\n",
        "comment_author": "viagra-test-123",
        "comment_author_email": "*****@*****.**"
    }"""

    def setUp(self):
        self.admin = DocumentSpamAttemptAdmin(DocumentSpamAttempt, AdminSite())
        self.user = User.objects.get(username='******')
        self.admin_user = User.objects.get(username='******')
        self.request = RequestFactory().get('/admin/dsa')
        self.request.user = self.admin_user
        # Enable admin's message_user
        self.request.session = {}
        self.get_messages(self.request)

    def test_title_short(self):
        dsa = DocumentSpamAttempt(title='A short title')
        assert self.admin.title_short(dsa) == 'A short title'
        dsa.title = 'A long title that will need to be truncated.'
        assert self.admin.title_short(dsa) == 'A long title that will...'

    def test_slug_short(self):
        dsa = DocumentSpamAttempt(slug='Web/CSS')
        assert self.admin.slug_short(dsa) == 'Web/CSS'
        dsa.slug = 'Web/A_long_slug_that_will_be_truncated'
        assert self.admin.slug_short(dsa) == 'Web/A_long_slug_that_w...' ''

    def test_submitted_data(self):
        dsa = DocumentSpamAttempt(data=None)
        expected = self.admin.SUBMISSION_NOT_AVAILABLE
        assert self.admin.submitted_data(dsa) == expected
        dsa.data = '{"foo": "bar"}'
        assert self.admin.submitted_data(dsa) == ('{\n'
                                                  '    "foo": "bar"\n'
                                                  '}')

    def assert_needs_review(self):
        dsa = DocumentSpamAttempt.objects.get()
        assert dsa.review == DocumentSpamAttempt.NEEDS_REVIEW
        assert dsa.reviewer is None
        assert dsa.reviewed is None

    @requests_mock.mock()
    def test_save_no_review(self, mock_requests):
        dsa = DocumentSpamAttempt(user=self.user,
                                  title='Not reviewed',
                                  slug='test/spam')
        assert not DocumentSpamAttempt.objects.exists()
        self.admin.save_model(self.request, dsa, None, True)
        self.assert_needs_review()

    @requests_mock.mock()
    def test_save_no_data(self, mock_requests):
        dsa = DocumentSpamAttempt(user=self.user,
                                  title='No data',
                                  slug='test/spam',
                                  review=DocumentSpamAttempt.HAM)
        assert not DocumentSpamAttempt.objects.exists()
        self.admin.save_model(self.request, dsa, None, True)
        dsa = DocumentSpamAttempt.objects.get()
        assert dsa.review == DocumentSpamAttempt.HAM
        assert dsa.reviewer == self.admin_user
        assert dsa.reviewed is not None

    @requests_mock.mock()
    def test_save_confirm_spam(self, mock_requests):
        dsa = DocumentSpamAttempt(user=self.user,
                                  title='Confirmed as Spam',
                                  slug='test/spam',
                                  data=self.sample_data,
                                  review=DocumentSpamAttempt.SPAM)
        assert not DocumentSpamAttempt.objects.exists()
        self.admin.save_model(self.request, dsa, None, True)
        dsa = DocumentSpamAttempt.objects.get()
        assert dsa.review == DocumentSpamAttempt.SPAM
        assert dsa.reviewer == self.admin_user
        assert dsa.reviewed is not None

    @override_config(AKISMET_KEY='admin')
    @requests_mock.mock()
    def test_save_false_positive(self, mock_requests):
        flag, created = Flag.objects.get_or_create(name=SPAM_SUBMISSIONS_FLAG)
        flag.users.add(self.admin_user)
        dsa = DocumentSpamAttempt(user=self.user,
                                  title='No data',
                                  slug='test/spam',
                                  data=self.sample_data,
                                  review=DocumentSpamAttempt.HAM)
        assert not DocumentSpamAttempt.objects.exists()
        mock_requests.post(VERIFY_URL, content='valid')
        mock_requests.post(HAM_URL, content=Akismet.submission_success)
        self.admin.save_model(self.request, dsa, None, True)
        dsa = DocumentSpamAttempt.objects.get()
        assert dsa.review == DocumentSpamAttempt.HAM
        assert dsa.reviewer == self.admin_user
        assert dsa.reviewed is not None

    @override_config(AKISMET_KEY='')
    @requests_mock.mock()
    def test_save_false_positive_no_akismet(self, mock_requests):
        flag, created = Flag.objects.get_or_create(name=SPAM_SUBMISSIONS_FLAG)
        flag.users.add(self.admin_user)
        dsa = DocumentSpamAttempt(user=self.user,
                                  title='No data',
                                  slug='test/spam',
                                  data=self.sample_data,
                                  review=DocumentSpamAttempt.HAM)
        assert not DocumentSpamAttempt.objects.exists()
        mock_requests.post(VERIFY_URL, content='valid')
        mock_requests.post(HAM_URL, content=Akismet.submission_success)
        self.admin.save_model(self.request, dsa, None, True)
        self.assert_needs_review()

    @override_config(AKISMET_KEY='admin')
    @requests_mock.mock()
    def test_save_false_positive_no_submission_flag(self, mock_requests):
        dsa = DocumentSpamAttempt(user=self.user,
                                  title='No data',
                                  slug='test/spam',
                                  data=self.sample_data,
                                  review=DocumentSpamAttempt.HAM)
        assert not DocumentSpamAttempt.objects.exists()
        mock_requests.post(VERIFY_URL, content='valid')
        mock_requests.post(HAM_URL, content=Akismet.submission_success)
        self.admin.save_model(self.request, dsa, None, True)
        self.assert_needs_review()