Package org.jboss.seam.wiki.test.editing

Source Code of org.jboss.seam.wiki.test.editing.Linking

/*
* JBoss, Home of Professional Open Source
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jboss.seam.wiki.test.editing;

import org.dbunit.operation.DatabaseOperation;
import org.jboss.seam.wiki.core.action.DocumentHome;
import org.jboss.seam.wiki.core.wikitext.engine.WikiLink;
import org.jboss.seam.wiki.core.wikitext.engine.WikiLinkResolver;
import org.jboss.seam.wiki.core.wikitext.renderer.WikiTextRenderer;
import org.jboss.seam.wiki.core.model.WikiDocument;
import org.jboss.seam.wiki.core.model.WikiUpload;
import org.jboss.seam.mock.DBUnitSeamTest;
import org.jboss.seam.wiki.util.WikiUtil;
import org.testng.annotations.Test;

import javax.persistence.EntityManager;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;

public class Linking extends DBUnitSeamTest {

    protected void prepareDBUnitOperations() {
        beforeTestOperations.add(
            new DataSetOperation("org/jboss/seam/wiki/test/WikiBaseData.dbunit.xml", DatabaseOperation.CLEAN_INSERT)
        );
        beforeTestOperations.add(
            new DataSetOperation("org/jboss/seam/wiki/test/UploadData.dbunit.xml", DatabaseOperation.INSERT)
        );
        beforeTestOperations.add(
            new DataSetOperation("org/jboss/seam/wiki/test/HelpDocuments.dbunit.xml", DatabaseOperation.INSERT)
        );
    }

    @Test
    public void linkToKnownProtocols() throws Exception {

        final String conversationId = new NonFacesRequest("/docEdit_d.xhtml") {
            protected void beforeRequest() {
                setParameter("documentId", "6");
            }
        }.run();

        new FacesRequest("/docEdit_d.xhtml") {

            protected void beforeRequest() {
                setParameter("cid", conversationId);
            }

            protected void invokeApplication() throws Exception {
                DocumentHome docHome = (DocumentHome)getInstance(DocumentHome.class);
                assert docHome.getInstance().getId().equals(6l); // Init!

                docHome.getTextEditor().setValue("[=>http://foo.bar]");
                docHome.syncEditorToInstance(docHome.getParentNode().getId(), docHome.getInstance());
                assert docHome.getInstance().getContent().equals("[=>http://foo.bar]");

                docHome.getTextEditor().setValue("[=>https://foo.bar]");
                docHome.syncEditorToInstance(docHome.getParentNode().getId(), docHome.getInstance());
                assert docHome.getInstance().getContent().equals("[=>https://foo.bar]");

                docHome.getTextEditor().setValue("[=>ftp://foo.bar]");
                docHome.syncEditorToInstance(docHome.getParentNode().getId(), docHome.getInstance());
                assert docHome.getInstance().getContent().equals("[=>ftp://foo.bar]");

                docHome.getTextEditor().setValue("[=>mailto:foo@bar.tld]");
                docHome.syncEditorToInstance(docHome.getParentNode().getId(), docHome.getInstance());
                assert docHome.getInstance().getContent().equals("[=>mailto:foo@bar.tld]");

                docHome.getTextEditor().setValue("[Foo Bar=>http://foo.bar]");
                docHome.syncEditorToInstance(docHome.getParentNode().getId(), docHome.getInstance());
                assert docHome.getInstance().getContent().equals("[Foo Bar=>http://foo.bar]");

                docHome.getTextEditor().setValue("[Foo Bar=>https://foo.bar]");
                docHome.syncEditorToInstance(docHome.getParentNode().getId(), docHome.getInstance());
                assert docHome.getInstance().getContent().equals("[Foo Bar=>https://foo.bar]");

                docHome.getTextEditor().setValue("[Foo Bar=>ftp://foo.bar]");
                docHome.syncEditorToInstance(docHome.getParentNode().getId(), docHome.getInstance());
                assert docHome.getInstance().getContent().equals("[Foo Bar=>ftp://foo.bar]");

                docHome.getTextEditor().setValue("[Foo Bar=>mailto:foo@bar.tld]");
                docHome.syncEditorToInstance(docHome.getParentNode().getId(), docHome.getInstance());
                assert docHome.getInstance().getContent().equals("[Foo Bar=>mailto:foo@bar.tld]");

            }

        }.run();
    }

    @Test
    public void linkToCustomProtocols() throws Exception {

        final String conversationId = new NonFacesRequest("/docEdit_d.xhtml") {
            protected void beforeRequest() {
                setParameter("documentId", "6");
            }
        }.run();

        new FacesRequest("/docEdit_d.xhtml") {

            protected void beforeRequest() {
                setParameter("cid", conversationId);
            }

            protected void invokeApplication() throws Exception {
                DocumentHome docHome = (DocumentHome)getInstance(DocumentHome.class);
                assert docHome.getInstance().getId().equals(6l); // Init!

                WikiLinkResolver resolver = (WikiLinkResolver)getInstance("wikiLinkResolver");
                Map<String, WikiLink> links = new HashMap<String, WikiLink>();

                docHome.getTextEditor().setValue("[=>hhh://1234]");
                resolver.resolveLinkText(3l, links, "hhh://1234");
                assert links.size()==1;
                assert links.get("hhh://1234").getUrl().equals("http://opensource.atlassian.com/projects/hibernate/browse/HHH-1234");
            }

        }.run();
    }

    @Test
    public void linkToDocuments() throws Exception {

        final String conversationId = new NonFacesRequest("/docEdit_d.xhtml") {
            protected void beforeRequest() {
                setParameter("documentId", "6");
            }
        }.run();

        new FacesRequest("/docEdit_d.xhtml") {

            protected void beforeRequest() {
                setParameter("cid", conversationId);
            }

            protected void invokeApplication() throws Exception {
                DocumentHome docHome = (DocumentHome)getInstance(DocumentHome.class);
                assert docHome.getInstance().getId().equals(6l); // Init!

                WikiLinkResolver resolver = (WikiLinkResolver)getInstance("wikiLinkResolver");

                checkLink(resolver, 7l, "[=>Two]", "[=>wiki://7]");
                checkLink(resolver, 7l, "[Foo Bar=>Two]", "[Foo Bar=>wiki://7]");

                checkLink(resolver, 9l, "[=>BBB|Four]", "[=>wiki://9]");
                checkLink(resolver, 9l, "[Foo Bar=>BBB|Four]", "[Foo Bar=>wiki://9]");

                checkLink(resolver, null, "[=>Four]", "[=>Four]"); // Broken link
                checkLink(resolver, null, "[Foo Bar=>Four]", "[Foo Bar=>Four]"); // Broken link

            }

        }.run();
    }

    @Test
    public void linkToDocumentFragments() throws Exception {

        final String conversationId = new NonFacesRequest("/docEdit_d.xhtml") {
            protected void beforeRequest() {
                setParameter("documentId", "6");
            }
        }.run();

        new FacesRequest("/docEdit_d.xhtml") {

            protected void beforeRequest() {
                setParameter("cid", conversationId);
            }

            protected void invokeApplication() throws Exception {
                DocumentHome docHome = (DocumentHome)getInstance(DocumentHome.class);
                assert docHome.getInstance().getId().equals(6l); // Init!

                WikiLinkResolver resolver = (WikiLinkResolver)getInstance("wikiLinkResolver");

                final String FRAGMENT = "#foo123.,; baz -?!()/&";

                checkLink(resolver, 7l, "[=>Two"+FRAGMENT+"]", "[=>wiki://7"+FRAGMENT+"]", FRAGMENT);
                checkLink(resolver, 9l, "[=>BBB|Four"+FRAGMENT+"]", "[=>wiki://9"+FRAGMENT+"]", FRAGMENT);
            }

        }.run();
    }

    @Test
    public void linkToUploads() throws Exception {

        final String conversationId = new NonFacesRequest("/docEdit_d.xhtml") {
            protected void beforeRequest() {
                setParameter("documentId", "6");
            }
        }.run();

        new FacesRequest("/docEdit_d.xhtml") {

            protected void beforeRequest() {
                setParameter("cid", conversationId);
            }

            protected void invokeApplication() throws Exception {
                DocumentHome docHome = (DocumentHome)getInstance(DocumentHome.class);
                assert docHome.getInstance().getId().equals(6l); // Init!

                WikiLinkResolver resolver = (WikiLinkResolver)getInstance("wikiLinkResolver");

                checkLink(resolver, 30l, "[=>BBB|Test Image]", "[=>wiki://30]");
            }

        }.run();
    }

    @Test
    public void linkSourceTargetTracking() throws Exception {

        final String conversationId = new NonFacesRequest("/docEdit_d.xhtml") {
            protected void beforeRequest() {
                setParameter("documentId", "6");
            }
        }.run();

        new FacesRequest("/docEdit_d.xhtml") {

            protected void beforeRequest() {
                setParameter("cid", conversationId);
            }

            protected void invokeApplication() throws Exception {
                DocumentHome docHome = (DocumentHome)getInstance(DocumentHome.class);
                assert docHome.getInstance().getId().equals(6l); // Init!

                assert docHome.getInstance().getOutgoingLinks().size() == 0;
                docHome.getTextEditor().setValue("[=>Two] and [=>Three] and [=>BBB|Test Image]");

                assert invokeMethod("#{documentHome.update}").equals("updated");

                assert docHome.getInstance().getContent().equals("[=>wiki://7] and [=>wiki://8] and [=>wiki://30]");
                assert docHome.getInstance().getOutgoingLinks().size() == 3;

            }

        }.run();

        new FacesRequest() {

            protected void invokeApplication() throws Exception {
                EntityManager em = (EntityManager) getInstance("restrictedEntityManager");

                WikiDocument d = (WikiDocument)
                        em.createQuery("select d from WikiDocument d left join fetch d.incomingLinks where d.id = :id")
                                .setParameter("id", 7l)
                                .getSingleResult();
                assert d.getIncomingLinks().size() == 1;
                em.clear();

                d = (WikiDocument)
                        em.createQuery("select d from WikiDocument d left join fetch d.incomingLinks where d.id = :id")
                                .setParameter("id", 8l)
                                .getSingleResult();
                assert d.getIncomingLinks().size() == 2;
                em.clear();

                WikiUpload f = (WikiUpload)
                        em.createQuery("select f from WikiUpload f left join fetch f.incomingLinks where f.id = :id")
                                .setParameter("id", 30l)
                                .getSingleResult();
                assert f.getIncomingLinks().size() == 1;
            }
        }.run();

    }

    private void checkLink(WikiLinkResolver resolver, Long fileId, String wikiText, String databaseText) {
        checkLink(resolver, fileId, wikiText, databaseText, null);
    }

    private void checkLink(WikiLinkResolver resolver, Long fileId, String wikiText, String databaseText, String fragment) {
        assert resolver.convertToWikiProtocol(new HashSet(), 3l, wikiText).equals(databaseText);
        assert resolver.convertFromWikiProtocol(3l, databaseText).equals(wikiText);
        Map<String, WikiLink> links = new HashMap<String, WikiLink>();
        resolver.resolveLinkText(3l, links, databaseText);
        assert links.size()==1;
        if (fileId == null) {
            assert links.get(databaseText).isBroken();
        } else {
            assert links.get(databaseText).getFile().getId().equals(fileId);
            if (fragment != null) {
                assert links.get(databaseText).getFragment().equals(fragment);
                assert links.get(databaseText).getEncodedFragment().equals(
                    WikiTextRenderer.HEADLINE_ID_PREFIX+WikiUtil.convertToWikiName(fragment)
                );
            }
        }

    }


}
TOP

Related Classes of org.jboss.seam.wiki.test.editing.Linking

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.