Package org.structr.web.entity.dom

Source Code of org.structr.web.entity.dom.RenderDataTest

/**
* Copyright (C) 2010-2014 Morgner UG (haftungsbeschränkt)
*
* This file is part of Structr <http://structr.org>.
*
* Structr is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* Structr is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with Structr.  If not, see <http://www.gnu.org/licenses/>.
*/
package org.structr.web.entity.dom;

import java.util.List;
import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.fail;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.structr.web.entity.Folder;
import org.structr.core.graph.CreateRelationshipCommand;
import org.structr.core.property.PropertyMap;
import org.structr.web.common.DOMTest;
import org.w3c.dom.Element;
import org.structr.core.app.StructrApp;
import org.structr.core.entity.AbstractNode;
import org.structr.core.graph.NodeInterface;
import org.structr.core.graph.Tx;
import org.structr.dynamic.File;
import org.structr.web.common.RenderContext;
import org.structr.web.entity.User;
import org.structr.web.entity.relation.RenderNode;

/**
* Test to render data mixed with markup
*
* @author Axel Morgner
*/
public class RenderDataTest extends DOMTest {

  public void testRenderFolderTree() {

    String name = null;

    try (final Tx tx = app.tx()) {

      final List<Folder> folders = createTestNodes(Folder.class, 7);
      final List<File> files = createTestNodes(File.class, 7);
      final Page doc = (Page) getDocument();

      name = doc.getName();

      assertEquals(7, folders.size());

      Folder rootNode = folders.get(0);
      rootNode.setProperty(AbstractNode.name, "rootNode");
      Folder folderA = folders.get(1);
      folderA.setProperty(AbstractNode.name, "folderA");
      Folder folderB = folders.get(2);
      folderB.setProperty(AbstractNode.name, "folderB");
      Folder folderC = folders.get(3);
      folderC.setProperty(AbstractNode.name, "folderC");
      Folder folderD = folders.get(4);
      folderD.setProperty(AbstractNode.name, "folderD");
      Folder folderE = folders.get(5);
      folderE.setProperty(AbstractNode.name, "folderE");
      Folder folderF = folders.get(6);
      folderF.setProperty(AbstractNode.name, "folderF");

      File file1 = files.get(0);
      file1.setProperty(AbstractNode.name, "file1");
      File file2 = files.get(1);
      file2.setProperty(AbstractNode.name, "file2");
      File file3 = files.get(2);
      file3.setProperty(AbstractNode.name, "file3");
      File file4 = files.get(3);
      file4.setProperty(AbstractNode.name, "file4");
      File file5 = files.get(4);
      file5.setProperty(AbstractNode.name, "file5");
      File file6 = files.get(5);
      file6.setProperty(AbstractNode.name, "file6");
      File file7 = files.get(6);
      file7.setProperty(AbstractNode.name, "file7");

      rootNode.treeAppendChild(folderA);
      rootNode.treeAppendChild(folderB);
      rootNode.treeAppendChild(file1);
      rootNode.treeAppendChild(file2);

      folderA.treeAppendChild(folderC);
      folderA.treeAppendChild(folderD);
      folderA.treeAppendChild(file3);
      folderA.treeAppendChild(file4);

      folderB.treeAppendChild(folderE);
      folderB.treeAppendChild(folderF);
      folderB.treeAppendChild(file5);
      folderB.treeAppendChild(file6);

      makePublic(rootNode, folderA, folderB, folderC, folderD, folderE, folderF);

      makePublic(file1, file2, file3, file4, file5, file6, file7);

      // create dom tree
      Element html = doc.createElement("html");
      doc.appendChild(html);
      Element body = doc.createElement("body");
      html.appendChild(body);

      final Element div = doc.createElement("div");
      body.appendChild(div);

      Content rootNameContent = (Content) doc.createTextNode("${root.name}");

      div.appendChild(rootNameContent);

      final Element ul1 = doc.createElement("ul");
      div.appendChild(ul1);

      final Element li1 = doc.createElement("li");
      ul1.appendChild(li1);

      Content foldersNameContent = (Content) doc.createTextNode("${folders.name}");
      li1.appendChild(foldersNameContent);

      final Element li2 = doc.createElement("li");
      ul1.appendChild(li2);

      Content filesNameContent = (Content) doc.createTextNode("${files.name}");
      li2.appendChild(filesNameContent);

      final Element ul2 = doc.createElement("ul");
      li1.appendChild(ul2);

      final Element li3 = doc.createElement("li");
      ul2.appendChild(li3);

      Content files2NameContent = (Content) doc.createTextNode("${files.name}");
      li3.appendChild(files2NameContent);

      final Element li4 = doc.createElement("li");
      ul2.appendChild(li4);

      Content folders2NameContent = (Content) doc.createTextNode("${folders.name}");
      li4.appendChild(folders2NameContent);

      makePublic(rootNameContent, foldersNameContent, filesNameContent, files2NameContent, folders2NameContent);

      // create RENDER_NODE relationship between first ul and rootNode
      PropertyMap properties = new PropertyMap();
      //properties.put(LinkedListNode.keyProperty, key);
      StructrApp.getInstance(securityContext).command(CreateRelationshipCommand.class).execute((DOMElement) div, (NodeInterface) rootNode, RenderNode.class, properties);

      ((DOMElement) div).setProperty(DOMElement.dataKey, "root");

      ((DOMElement) li1).setProperty(DOMElement.dataKey, "folders");
      ((DOMElement) li2).setProperty(DOMElement.dataKey, "files");
      ((DOMElement) li3).setProperty(DOMElement.dataKey, "files");
      ((DOMElement) li4).setProperty(DOMElement.dataKey, "folders");

      makePublic(doc, html, body, div, ul1, ul2, li1, li2, li3, li4);

      tx.success();

    } catch (Exception ex) {
      ex.printStackTrace();
      fail("Unexpected exception");
    }

    try (final Tx tx = app.tx()) {

      org.jsoup.nodes.Document parsedDocument = Jsoup.connect(baseUri + name).get();

      System.out.println(parsedDocument);

      assertEquals("rootNode", parsedDocument.select("html > body > div").get(0).ownText());
      assertEquals("folderA", parsedDocument.select("html > body > div > ul > li").get(0).ownText());
      assertEquals("folderB", parsedDocument.select("html > body > div > ul > li").get(1).ownText());
      assertEquals("file1", parsedDocument.select("html > body > div > ul > li").get(2).ownText());
      assertEquals("file2", parsedDocument.select("html > body > div > ul > li").get(3).ownText());
      assertEquals("file3", parsedDocument.select("html > body > div > ul > li > ul > li").get(0).ownText());
      assertEquals("file4", parsedDocument.select("html > body > div > ul > li > ul > li").get(1).ownText());
      assertEquals("folderC", parsedDocument.select("html > body > div > ul > li > ul > li").get(2).ownText());
      assertEquals("folderD", parsedDocument.select("html > body > div > ul > li > ul > li").get(3).ownText());

      assertEquals("file5", parsedDocument.select("html > body > div > ul > li").get(1).child(0).child(0).ownText());
      assertEquals("file6", parsedDocument.select("html > body > div > ul > li").get(1).child(0).child(1).ownText());
      assertEquals("folderE", parsedDocument.select("html > body > div > ul > li").get(1).child(0).child(2).ownText());
      assertEquals("folderF", parsedDocument.select("html > body > div > ul > li").get(1).child(0).child(3).ownText());

      tx.success();

    } catch (Exception ex) {
      ex.printStackTrace();
      fail("unexpected exception");
    }
  }

  public void testRenderListFromRestQuery() {

    String name = null;

    try (final Tx tx = app.tx()) {

      final Page doc = (Page) getDocument();
      name = doc.getName();

      final List<User> users = createTestNodes(User.class, 3);

      assertEquals(3, users.size());

      User user1 = users.get(0);
      user1.setProperty(AbstractNode.name, "user1");
      User user2 = users.get(1);
      user2.setProperty(AbstractNode.name, "user2");
      User user3 = users.get(2);
      user3.setProperty(AbstractNode.name, "user3");

      final List<File> files = createTestNodes(File.class, 6);

      assertEquals(6, files.size());

      File nodeA = files.get(0);
      nodeA.setProperty(AbstractNode.name, "fileA");
      File nodeB = files.get(1);
      nodeB.setProperty(AbstractNode.name, "fileB");
      File nodeC = files.get(2);
      nodeC.setProperty(AbstractNode.name, "fileC");
      File nodeD = files.get(3);
      nodeD.setProperty(AbstractNode.name, "fileD");
      File nodeE = files.get(4);
      nodeE.setProperty(AbstractNode.name, "fileE");
      File nodeF = files.get(5);
      nodeF.setProperty(AbstractNode.name, "fileF");

      // create dom tree
      Element html = doc.createElement("html");
      Element body = doc.createElement("body");
      Element b = doc.createElement("b");
      final Element p1 = doc.createElement("p");

      ((DOMElement) p1).setProperty(DOMElement.restQuery, "users?sort=name");
      ((DOMElement) p1).setProperty(DOMElement.dataKey, "user");

      Content userNameContentNode = (Content) doc.createTextNode("${user.name}");

      p1.appendChild(userNameContentNode);

      Element div = doc.createElement("div");
      final Element p2 = doc.createElement("p");

      ((DOMElement) p2).setProperty(DOMElement.restQuery, "files?sort=name");
      ((DOMElement) p2).setProperty(DOMElement.dataKey, "file");

      Content fileNameContentNode = (Content) doc.createTextNode("${file.name}");

      p2.appendChild(fileNameContentNode);

      doc.appendChild(html);
      html.appendChild(body);
      body.appendChild(b);
      body.appendChild(div);
      b.appendChild(p1);
      div.appendChild(p2);

      makePublic(doc, html, body, div, b, p1, p2, fileNameContentNode, userNameContentNode, nodeA, nodeB, nodeC, nodeD, nodeE, nodeF, user1, user2, user3);

      System.out.println(doc.getContent(RenderContext.EditMode.CONTENT));


      tx.success();

    } catch (Exception ex) {
      ex.printStackTrace();
      fail("Unexpected exception");
    }

    try (final Tx tx = app.tx()) {

      Document parsedDocument = Jsoup.connect(baseUri + name).get();

      System.out.println(parsedDocument.outerHtml());

      assertEquals("user1", parsedDocument.select("html > body > b > p").get(0).ownText());
      assertEquals("user2", parsedDocument.select("html > body > b > p").get(1).ownText());
      assertEquals("user3", parsedDocument.select("html > body > b > p").get(2).ownText());

      assertEquals("fileA", parsedDocument.select("html > body > div > p").get(0).ownText());
      assertEquals("fileB", parsedDocument.select("html > body > div > p").get(1).ownText());
      assertEquals("fileC", parsedDocument.select("html > body > div > p").get(2).ownText());
      assertEquals("fileD", parsedDocument.select("html > body > div > p").get(3).ownText());
      assertEquals("fileE", parsedDocument.select("html > body > div > p").get(4).ownText());
      assertEquals("fileF", parsedDocument.select("html > body > div > p").get(5).ownText());

      tx.success();

    } catch (Exception ex) {
      ex.printStackTrace();
      fail("unexpected exception");
    }

  }
}
TOP

Related Classes of org.structr.web.entity.dom.RenderDataTest

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.