Exemple #1
0
def revision(save=False, **kwargs):
    """Return an empty revision with enough stuff filled out that it can be
    saved.

    Revision's is_approved=False unless you specify otherwise.

    Requires a users fixture if no creator is provided.

    """
    doc = None
    if 'document' not in kwargs:
        doc = document(save=True)
    else:
        doc = kwargs['document']

    defaults = {
        'summary': 'Some summary',
        'content': 'Some content',
        'comment': 'Some comment',
        'creator': kwargs.get('creator', get_user()),
        'document': doc,
        'tags': '"some", "tags"',
        'toc_depth': 1,
    }

    defaults.update(kwargs)

    rev = Revision(**defaults)
    if save:
        rev.save()
    return rev
def test_gather_ignores_links(client, root_doc, simple_user):
    user_profile_url = simple_user.get_absolute_url()
    content = """
<ul>
  <li><a href="/en-US/docs/Absolute/Link">Absolute Link</a></li>
  <li><a href="Relative/Link">Relative Link</a></li>
  <li><a href="#later">Later in this page.</a></li>
  <li><a href="%s">Profile Link</a></li>
</ul>
""" % user_profile_url
    new_rev = Revision(
        document=root_doc,
        creator=root_doc.current_revision.creator,
        content=content,
        created=datetime(2017, 6, 5))
    new_rev.save()
    base_path = root_doc.get_absolute_url()
    html = client.get(base_path).content

    source = LinksSource(base_path)
    requester = mock_requester(content=html)
    storage = mock_storage()
    resources = source.gather(requester, storage)
    assert source.state == source.STATE_DONE
    assert source.freshness == source.FRESH_YES

    expected = ('document', '/en-US/docs/Absolute/Link', {})
    assert expected in resources

    for doc, path, options in resources:
        assert base_path not in path
        assert "Relative/Link" not in path
        assert "#later" not in path
        assert user_profile_url not in path
    def handle(self, *args, **options):
        # get first user to be the creator
        u = User.objects.all()[0]
        loaded_docs = []
        skipped_docs = []

        for slug in KS_AUTOLOAD_MODULES:
            template_response = requests.get(RAW_TEMPLATE_URL % slug)
            doc = Document(title=slug, slug=slug,
                           category=Document.CATEGORIES[0][0])
            try:
                doc.save()
                loaded_docs.append(slug)
            except SlugCollision:
                # skip modules already in the db
                skipped_docs.append(slug)
                continue
            rev = Revision(document=doc, content=template_response.content,
                           creator=u)
            rev.save()

        print "Loaded docs:"
        for slug in loaded_docs:
            print "%s" % slug
        print "\nSkipped docs that were already loaded:"
        for slug in skipped_docs:
            print "%s" % slug
def test_gather_ignores_links(client, root_doc, simple_user):
    user_profile_url = simple_user.get_absolute_url()
    content = """
<ul>
  <li><a href="/en-US/docs/Absolute/Link">Absolute Link</a></li>
  <li><a href="Relative/Link">Relative Link</a></li>
  <li><a href="#later">Later in this page.</a></li>
  <li><a href="%s">Profile Link</a></li>
</ul>
""" % user_profile_url
    new_rev = Revision(document=root_doc,
                       creator=root_doc.current_revision.creator,
                       content=content,
                       created=datetime(2017, 6, 5))
    new_rev.save()
    base_path = root_doc.get_absolute_url()
    html = client.get(base_path, HTTP_HOST=settings.WIKI_HOST).content

    source = LinksSource(base_path)
    requester = mock_requester(content=html)
    storage = mock_storage()
    resources = source.gather(requester, storage)
    assert source.state == source.STATE_DONE
    assert source.freshness == source.FRESH_YES

    expected = ('document', '/en-US/docs/Absolute/Link', {})
    assert expected in resources

    for doc, path, options in resources:
        assert "Relative/Link" not in path
        assert "#later" not in path
        assert user_profile_url not in path
    def handle(self, *args, **options):
        # get first user to be the creator
        u = User.objects.all()[0]
        loaded_docs = []
        skipped_docs = []

        for slug in KS_AUTOLOAD_MODULES:
            template_response = requests.get(RAW_TEMPLATE_URL % slug)
            doc = Document(title=slug,
                           slug=slug,
                           category=Document.CATEGORIES[0][0])
            try:
                doc.save()
                loaded_docs.append(slug)
            except SlugCollision:
                # skip modules already in the db
                skipped_docs.append(slug)
                continue
            rev = Revision(document=doc,
                           content=template_response.content,
                           creator=u)
            rev.save()

        print "Loaded docs:"
        for slug in loaded_docs:
            print "%s" % slug
        print "\nSkipped docs that were already loaded:"
        for slug in skipped_docs:
            print "%s" % slug
Exemple #6
0
def revision(save=False, **kwargs):
    """Return an empty revision with enough stuff filled out that it can be
    saved.

    Revision's is_approved=False unless you specify otherwise.

    Requires a users fixture if no creator is provided.

    """
    doc = None
    if "document" not in kwargs:
        doc = document(save=True)
    else:
        doc = kwargs["document"]

    defaults = {
        "summary": "Some summary",
        "content": "Some content",
        "comment": "Some comment",
        "creator": kwargs.get("creator", get_user()),
        "document": doc,
        "tags": '"some", "tags"',
        "toc_depth": 1,
    }

    defaults.update(kwargs)

    rev = Revision(**defaults)
    if save:
        rev.save()
    return rev
Exemple #7
0
def _create_document(title="Test Document", parent=None, locale=settings.WIKI_DEFAULT_LANGUAGE):
    d = document(
        title=title, html="<div>Lorem Ipsum</div>", category=10, locale=locale, parent=parent, is_localizable=True
    )
    d.save()
    r = Revision(
        document=d,
        keywords="key1, key2",
        summary="lipsum",
        content="<div>Lorem Ipsum</div>",
        creator_id=8,
        is_approved=True,
        comment="Good job!",
    )
    r.save()
    return d
Exemple #8
0
    def test_another_translation_to_locale(self, get_current, edited_fire):
        """Create the second translation of a doc."""
        get_current.return_value.domain = "testserver"

        rev_es = self._create_and_approve_first_translation()

        # Create and approve a new en-US revision
        rev_enUS = Revision(
            summary="lipsum",
            content="lorem ipsum dolor sit amet new",
            keywords="kw1 kw2",
            document=self.d,
            creator_id=8,
            is_approved=True,
        )
        rev_enUS.save()

        # Verify the form renders with correct content
        translate_uri = self._translate_uri()
        response = self.client.get(translate_uri)
        doc = pq(response.content)
        eq_(rev_es.content, doc("#id_content").text())
        eq_(rev_enUS.content, doc("article.approved .translate-rendered").text())

        # Post the translation and verify
        data = _translation_data()
        data["content"] = "loremo ipsumo doloro sito ameto nuevo"
        response = self.client.post(translate_uri, data)
        eq_(302, response.status_code)
        eq_("http://testserver/es/docs/un-test-articulo", response["location"])
        doc = Document.objects.get(slug=data["slug"])
        rev = doc.revisions.filter(content=data["content"])[0]
        eq_(data["keywords"], rev.keywords)
        eq_(data["summary"], rev.summary)
        eq_(data["content"], rev.content)
        edited_fire.assert_called()

        # subsequent translations should NOT include slug input
        self.client.logout()
        self.client.login(username="******", password="******")
        response = self.client.get(translate_uri)
        doc = pq(response.content)
        eq_(0, len(doc('form input[name="slug"]')))
Exemple #9
0
    def test_new_revision_GET_based_on(self):
        """HTTP GET to new revision URL based on another revision.

        This case should render the form with the fields pre-populated
        with the based-on revision info.

        """
        r = Revision(
            document=self.d,
            keywords="ky1, kw2",
            summary="the summary",
            content="<div>The content here</div>",
            creator_id=7,
        )
        r.save()
        response = self.client.get(reverse("wiki.new_revision_based_on", args=[self.d.full_path, r.id]))
        eq_(200, response.status_code)
        doc = pq(response.content)
        eq_(doc("#id_content")[0].value, r.content)
Exemple #10
0
    def setUp(self):
        super(CompareRevisionTests, self).setUp()
        self.document = _create_document()
        self.revision1 = self.document.current_revision
        user = User.objects.get(username="******")
        self.revision2 = Revision(
            summary="lipsum",
            content="<div>Lorem Ipsum Dolor</div>",
            keywords="kw1 kw2",
            document=self.document,
            creator=user,
        )
        self.revision2.save()

        self.client.login(username="******", password="******")
Exemple #11
0
class CompareRevisionTests(TestCaseBase):
    """Tests for Review Revisions"""

    fixtures = ["test_users.json"]

    def setUp(self):
        super(CompareRevisionTests, self).setUp()
        self.document = _create_document()
        self.revision1 = self.document.current_revision
        user = User.objects.get(username="******")
        self.revision2 = Revision(
            summary="lipsum",
            content="<div>Lorem Ipsum Dolor</div>",
            keywords="kw1 kw2",
            document=self.document,
            creator=user,
        )
        self.revision2.save()

        self.client.login(username="******", password="******")

    def test_bad_parameters(self):
        """Ensure badly-formed revision parameters do not cause errors"""
        url = reverse("wiki.compare_revisions", args=[self.document.slug])
        query = {"from": "1e309", "to": u"1e309"}
        url = urlparams(url, **query)
        response = self.client.get(url)
        eq_(404, response.status_code)

    def test_compare_revisions(self):
        """Compare two revisions"""
        url = reverse("wiki.compare_revisions", args=[self.document.slug])
        query = {"from": self.revision1.id, "to": self.revision2.id}
        url = urlparams(url, **query)
        response = self.client.get(url)
        eq_(200, response.status_code)
        doc = pq(response.content)
        eq_("Dolor", doc("span.diff_add").text())

    def test_compare_revisions_invalid_to_int(self):
        """Provide invalid 'to' int for revision ids."""
        url = reverse("wiki.compare_revisions", args=[self.document.slug])
        query = {"from": "", "to": "invalid"}
        url = urlparams(url, **query)
        response = self.client.get(url)
        eq_(404, response.status_code)

    def test_compare_revisions_invalid_from_int(self):
        """Provide invalid 'from' int for revision ids."""
        url = reverse("wiki.compare_revisions", args=[self.document.slug])
        query = {"from": "invalid", "to": ""}
        url = urlparams(url, **query)
        response = self.client.get(url)
        eq_(404, response.status_code)

    def test_compare_revisions_missing_query_param(self):
        """Try to compare two revisions, with a missing query string param."""
        url = reverse("wiki.compare_revisions", args=[self.document.slug])
        query = {"from": self.revision1.id}
        url = urlparams(url, **query)
        response = self.client.get(url)
        eq_(404, response.status_code)

        url = reverse("wiki.compare_revisions", args=[self.document.slug])
        query = {"to": self.revision1.id}
        url = urlparams(url, **query)
        response = self.client.get(url)
        eq_(404, response.status_code)

    def test_compare_unmatched_document_url(self):
        """Comparing two revisions of unlinked document should cause error."""
        unmatched_document = _create_document(title="Invalid document")
        url = reverse("wiki.compare_revisions", args=[unmatched_document.slug])
        query = {"from": self.revision1.id, "to": self.revision2.id}
        url = urlparams(url, **query)
        response = self.client.get(url)
        eq_(404, response.status_code)