/* vim: set ts=2 et sw=2 cindent fo=qroca: */ package com.globant.katari.editablepages.view; import com.globant.katari.tools.FreemarkerTestEngine; import org.junit.Test; import java.util.List; import java.util.ArrayList; import java.util.Map; import java.util.HashMap; import java.util.Locale; import org.springframework.mock.web.MockHttpServletRequest; import com.globant.katari.editablepages.domain.Page; import com.globant.katari.editablepages.TestUtils; public class PageFtlTest { /** Tests that the page.ftl shows all the menu items. */ @Test public final void testPageFtl_administrator() throws Exception { TestUtils.setRole("ROLE_ADMINISTRATOR"); List<String> valid = new ArrayList<String>(); valid.add(".*editable-pages/edit/create.do\".*"); valid.add(".*editable-pages/edit/edit.do\\?id=[0-9]+\".*"); valid.add(".*editable-pages/edit/remove.do\\?id=[0-9]+\".*"); valid.add(".*pageName.*page-1.*"); valid.add(".*moduleName.*editable-pages.*"); valid.add(".*<title>title</title>.*"); valid.add(".*The Content.*"); List<String> invalid = new ArrayList<String>(); // This page is published invalid.add(".*editable-pages/edit/publish.do.*"); invalid.add(".*editable-pages/edit/revert.do.*"); invalid.add(".*New content.*"); invalid.add("Exception"); FreemarkerTestEngine engine = new FreemarkerTestEngine( "/com/globant/katari/editablepages/view", Locale.ENGLISH, buildModel(true)); engine.runAndValidate("page.ftl", valid, invalid); } /** Tests that the page.ftl shows all the menu items. */ @Test public final void testPageFtl_administratorPublish() throws Exception { TestUtils.setRole("ROLE_ADMINISTRATOR"); List<String> valid = new ArrayList<String>(); valid.add(".*editable-pages/edit/create.do\".*"); valid.add(".*editable-pages/edit/edit.do\\?id=[0-9]+\".*"); valid.add(".*editable-pages/edit/remove.do\\?id=[0-9]+\".*"); valid.add(".*editable-pages/edit/publish.do\\?id=[0-9]+\".*"); valid.add(".*editable-pages/edit/revert.do\\?id=[0-9]+'.*"); valid.add(".*New content.*"); valid.add(".*The Content.*"); valid.add(".*pending-publication.*"); List<String> invalid = new ArrayList<String>(); // This page is published invalid.add("Exception"); FreemarkerTestEngine engine = new FreemarkerTestEngine( "/com/globant/katari/editablepages/view", Locale.ENGLISH, buildModel(false)); engine.runAndValidate("page.ftl", valid, invalid); } /** Tests that the page.ftl only shows the menu items and pending publication * for an editor. */ @Test public final void testPageFtl_editor() throws Exception { TestUtils.setRole("ROLE_EDITOR"); List<String> valid = new ArrayList<String>(); valid.add(".*editable-pages/edit/create.do\".*"); valid.add(".*editable-pages/edit/edit.do\\?id=[0-9]+\".*"); valid.add(".*editable-pages/edit/remove.do\\?id=[0-9]+\".*"); valid.add(".*editable-pages/edit/revert.do\\?id=[0-9]+'.*"); valid.add(".*The Content.*"); valid.add(".*<div[^<]*class='pending-publication'>[^<]*New content[^<]*</div>.*"); List<String> invalid = new ArrayList<String>(); invalid.add("Exception"); invalid.add(".*editable-pages/edit/publish.do.*"); FreemarkerTestEngine engine = new FreemarkerTestEngine( "/com/globant/katari/editablepages/view", Locale.ENGLISH, buildModel(false)); engine.runAndValidate("page.ftl", valid, invalid); } /** Tests that the page.ftl shows the menu items and pending publication for * a publisher. */ @Test public final void testPageFtl_publisher() throws Exception { TestUtils.setRole("ROLE_PUBLISHER"); List<String> valid = new ArrayList<String>(); valid.add(".*editable-pages/edit/publish.do\\?id=[0-9]+\".*"); valid.add(".*editable-pages/edit/revert.do\\?id=[0-9]+'.*"); valid.add(".*New content.*"); valid.add(".*The Content.*"); valid.add(".*pending-publication.*"); List<String> invalid = new ArrayList<String>(); invalid.add("Exception"); invalid.add(".*editable-pages/edit/create.do.*"); invalid.add(".*editable-pages/edit/edit.do.*"); invalid.add(".*editable-pages/edit/remove.do.*"); FreemarkerTestEngine engine = new FreemarkerTestEngine( "/com/globant/katari/editablepages/view", Locale.ENGLISH, buildModel(false)); engine.runAndValidate("page.ftl", valid, invalid); } /** Tests that the page.ftl only does not show the menu for a user. */ @Test public final void testPageFtl_finalUser() throws Exception { TestUtils.setRole("ROLE_SOMEROLE"); List<String> valid = new ArrayList<String>(); valid.add(".*The Content.*"); List<String> invalid = new ArrayList<String>(); invalid.add("Exception"); invalid.add(".*editable-pages/edit/create.do.*"); invalid.add(".*editable-pages/edit/edit.do.*"); invalid.add(".*editable-pages/edit/remove.do.*"); invalid.add(".*editable-pages/edit/publish.do.*"); invalid.add(".*editable-pages/edit/revert.do.*"); invalid.add(".*New content.*"); invalid.add(".*pending-publication.*"); FreemarkerTestEngine engine = new FreemarkerTestEngine( "/com/globant/katari/editablepages/view", Locale.ENGLISH, buildModel(false)); engine.runAndValidate("page.ftl", valid, invalid); } /** Builds a model for a published page called page-1, with 'title' and 'New * content' as title and content, and modifies the page with 'New content' if * required. * * @param publish true if the page will have modified unpublished content. */ private Map<String, Object> buildModel(final boolean publish) { // Building Model Map<String, Object> model = new HashMap<String, Object>(); Page page = new Page("zzz", "page-1", "title", "The Content"); page.publish(); if (!publish) { page.modify("zzz", "page-1", "title", "New content"); } model.put("page", page); Object accessHelper = TestUtils.getServletBeanFactory() .getBean("katari.secureUrlAccessHelper"); MockHttpServletRequest request = new MockHttpServletRequest(); request.setAttribute("secureUrlHelper", accessHelper); request.setRequestURI("/a/module/editable-pages/page/page-1"); model.put("request", request); model.put("base", "/a/module/editable-pages"); model.put("elementId", 1); return model; } }