/* * Copyright 2015-Present Entando Inc. (http://www.entando.com) All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library 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 Lesser General Public License for more * details. */ package com.agiletec.aps.system.services.pagemodel; import java.util.ArrayList; import java.util.List; import org.entando.entando.aps.system.services.widgettype.IWidgetTypeManager; import org.entando.entando.aps.system.services.widgettype.WidgetType; import com.agiletec.aps.BaseTestCase; import com.agiletec.aps.system.SystemConstants; import com.agiletec.aps.system.exception.ApsSystemException; import com.agiletec.aps.system.services.page.Widget; import com.agiletec.aps.util.ApsProperties; /** * @author M.Diana */ public class TestPageModelManager extends BaseTestCase { @Override protected void setUp() throws Exception { super.setUp(); this.init(); } public void testGetPageModel() throws ApsSystemException { PageModel pageModel = this._pageModelManager.getPageModel("home"); String code = pageModel.getCode(); String descr = pageModel.getDescription(); assertEquals(code, "home"); assertEquals(descr, "Modello home page"); Widget[] widgets = pageModel.getDefaultWidget(); for (int i = 0; i < widgets.length; i++) { Widget widget = widgets[i]; assertEquals(widget, null); } String[] frames = pageModel.getFrames(); assertEquals(frames[0], "Box sinistra alto"); int mainFrame = pageModel.getMainFrame(); assertEquals(mainFrame, 2); } public void testGetPageModels() throws ApsSystemException { List<PageModel> pageModels = new ArrayList<PageModel>(this._pageModelManager.getPageModels()); assertEquals(3, pageModels.size()); for (int i = 0; i < pageModels.size(); i++) { PageModel pageModel = pageModels.get(i); String code = pageModel.getCode(); boolean isNotNull = (code != null); assertEquals(isNotNull, true); if (code.equals("home")) { assertEquals("Modello home page", pageModel.getDescription()); } else if(code.equals("service")){ assertEquals("Modello pagine di servizio", pageModel.getDescription()); } } } public void testGetModel() throws Throwable { PageModel model = this._pageModelManager.getPageModel("internal"); assertNotNull(model); assertEquals(9, model.getFrames().length); Widget[] defaultWidgets = model.getDefaultWidget(); assertEquals(model.getFrames().length, defaultWidgets.length); for (int i = 0; i < defaultWidgets.length; i++) { Widget widget = defaultWidgets[i]; if (i==3) { assertNotNull(widget); WidgetType type = widget.getType(); assertEquals("leftmenu", type.getCode()); assertEquals(1, type.getTypeParameters().size()); assertNull(type.getConfig()); ApsProperties config = widget.getConfig(); assertEquals(1, config.size()); assertEquals("code(homepage).subtree(1)", config.getProperty("navSpec")); } else { assertNull(widget); } } } public void testAddRemoveModel() throws Throwable { String testPageModelCode = "test_pagemodel"; assertNull(this._pageModelManager.getPageModel(testPageModelCode)); try { PageModel mockModel = this.createMockPageModel(testPageModelCode); this._pageModelManager.addPageModel(mockModel); PageModel extractedMockModel = this._pageModelManager.getPageModel(testPageModelCode); assertNotNull(extractedMockModel); assertEquals(testPageModelCode, extractedMockModel.getCode()); assertTrue(extractedMockModel.getDescription().contains(testPageModelCode)); assertEquals(3, extractedMockModel.getFrames().length); Widget[] defaultWidgets = extractedMockModel.getDefaultWidget(); assertEquals(3, defaultWidgets.length); Widget defWidg0 = defaultWidgets[0]; assertNull(defWidg0); Widget defWidg1 = defaultWidgets[1]; assertNotNull(defWidg1); assertEquals("content_viewer_list", defWidg1.getType().getCode()); assertEquals(1, defWidg1.getConfig().size()); assertEquals("ART", defWidg1.getConfig().get("contentType")); Widget defWidg2 = defaultWidgets[2]; assertNotNull(defWidg2); assertEquals("login_form", defWidg2.getType().getCode()); assertNull(defWidg2.getConfig()); assertEquals("<strong>Freemarker template content</strong>", extractedMockModel.getTemplate()); } catch (Exception e) { throw e; } finally { this._pageModelManager.deletePageModel(testPageModelCode); assertNull(this._pageModelManager.getPageModel(testPageModelCode)); } } public void testUpdateModel() throws Throwable { String testPageModelCode = "test_pagemodel"; assertNull(this._pageModelManager.getPageModel(testPageModelCode)); try { PageModel mockModel = this.createMockPageModel(testPageModelCode); this._pageModelManager.addPageModel(mockModel); PageModel extractedMockModel = this._pageModelManager.getPageModel(testPageModelCode); extractedMockModel.setDescription("Modified Description"); Frame[] configuration = extractedMockModel.getConfiguration(); Frame[] newConfiguration = new Frame[4]; for (int i = 0; i < configuration.length; i++) { newConfiguration[i] = configuration[i]; } Frame frame3 = new Frame(); frame3.setPos(3); frame3.setDescription("Freme 3"); Widget defWidg3ToSet = new Widget(); defWidg3ToSet.setType(this._widgetTypeManager.getWidgetType("content_viewer")); ApsProperties props3 = new ApsProperties(); props3.setProperty("contentId", "ART187"); defWidg3ToSet.setConfig(props3); frame3.setDefaultWidget(defWidg3ToSet); newConfiguration[3] = frame3; extractedMockModel.setConfiguration(newConfiguration); extractedMockModel.setTemplate("<strong>Modified Freemarker template content</strong>"); this._pageModelManager.updatePageModel(extractedMockModel); extractedMockModel = this._pageModelManager.getPageModel(testPageModelCode); assertNotNull(extractedMockModel); assertEquals(testPageModelCode, extractedMockModel.getCode()); assertEquals("Modified Description", extractedMockModel.getDescription()); assertEquals(4, extractedMockModel.getFrames().length); Widget[] defaultWidgets = extractedMockModel.getDefaultWidget(); assertEquals(4, defaultWidgets.length); Widget defWidg0 = defaultWidgets[0]; assertNull(defWidg0); Widget defWidg1 = defaultWidgets[1]; assertNotNull(defWidg1); assertEquals("content_viewer_list", defWidg1.getType().getCode()); assertEquals(1, defWidg1.getConfig().size()); assertEquals("ART", defWidg1.getConfig().get("contentType")); Widget defWidg2 = defaultWidgets[2]; assertNotNull(defWidg2); assertEquals("login_form", defWidg2.getType().getCode()); assertNull(defWidg2.getConfig()); Widget defWidg3 = defaultWidgets[3]; assertNotNull(defWidg3); assertEquals("content_viewer", defWidg3.getType().getCode()); assertEquals(1, defWidg3.getConfig().size()); assertEquals("ART187", defWidg3.getConfig().get("contentId")); assertEquals("<strong>Modified Freemarker template content</strong>", extractedMockModel.getTemplate()); } catch (Exception e) { throw e; } finally { this._pageModelManager.deletePageModel(testPageModelCode); assertNull(this._pageModelManager.getPageModel(testPageModelCode)); } } private PageModel createMockPageModel(String code) { PageModel model = new PageModel(); model.setCode(code); model.setDescription("Description of model " + code); Frame frame0 = new Frame(); frame0.setPos(0); frame0.setDescription("Freme 0"); frame0.setMainFrame(true); Frame frame1 = new Frame(); frame1.setPos(1); frame1.setDescription("Freme 1"); Widget defWidg1 = new Widget(); defWidg1.setType(this._widgetTypeManager.getWidgetType("content_viewer_list")); ApsProperties props1 = new ApsProperties(); props1.setProperty("contentType", "ART"); defWidg1.setConfig(props1); frame1.setDefaultWidget(defWidg1); Frame frame2 = new Frame(); frame2.setPos(1); frame2.setDescription("Freme 2"); Widget defWidg2 = new Widget(); defWidg2.setType(this._widgetTypeManager.getWidgetType("login_form")); frame2.setDefaultWidget(defWidg2); Frame[] configuration = {frame0, frame1, frame2}; model.setConfiguration(configuration); model.setTemplate("<strong>Freemarker template content</strong>"); return model; } @SuppressWarnings("unchecked") public void testGuiFragmentUtilizer() throws Throwable { String testPageModelACode = "test_pagemodelA"; String testPageModelBCode = "test_pagemodelB"; String testPageModelCCode = "test_pagemodelC"; assertNull(this._pageModelManager.getPageModel(testPageModelACode)); assertNull(this._pageModelManager.getPageModel(testPageModelBCode)); assertNull(this._pageModelManager.getPageModel(testPageModelCCode)); try { String templateA = "Hello <@wp.fragment code=\"CODE_1\" escapeXml=false /><@wp.fragment code=\"CODE_1\" escapeXml=false /><@wp.fragment escapeXml=false code=\"CODE_1\" /><@wp.fragment code=\"CODE_1\" />world"; PageModel mockModelA = this.createMockPageModel(testPageModelACode); mockModelA.setTemplate(templateA); this._pageModelManager.addPageModel(mockModelA); String templateB = "Hello <@wp.fragment code=\"CODE_B\" escapeXml=false />\r\n<@wp.fragment escapeXml=false code=\"CODE_X\" /><@wp.fragment escapeXml=false code=\"CODE_1\" /><@wp.fragment code=\"CODE_1\" />world"; PageModel mockModelB = this.createMockPageModel(testPageModelBCode); mockModelB.setTemplate(templateB); this._pageModelManager.addPageModel(mockModelB); String templateC = "Hello\r\n <@wp.fragment code=\"CODE_B\" escapeXml=false />\n\t<@wp.fragment code=\"CODE_1\" escapeXml=false /><@wp.fragment escapeXml=false code=\"CODE_C\" /><@wp.fragment code=\"CODE_1\" />world"; PageModel mockModelC = this.createMockPageModel(testPageModelCCode); mockModelC.setTemplate(templateC); this._pageModelManager.addPageModel(mockModelC); String fragment = "CODE"; List<PageModel> list = ((PageModelManager)this._pageModelManager).getGuiFragmentUtilizers(fragment); assertEquals(0, list.size()); fragment = "CODE_1"; list = ((PageModelManager)this._pageModelManager).getGuiFragmentUtilizers(fragment); assertEquals(3, list.size()); fragment = "CODE_CC"; list = ((PageModelManager)this._pageModelManager).getGuiFragmentUtilizers(fragment); assertEquals(0, list.size()); fragment = "CODE_C"; list = ((PageModelManager)this._pageModelManager).getGuiFragmentUtilizers(fragment); assertEquals(1, list.size()); fragment = "CODE_B"; list = ((PageModelManager)this._pageModelManager).getGuiFragmentUtilizers(fragment); assertEquals(2, list.size()); fragment = "CODE_X"; list = ((PageModelManager)this._pageModelManager).getGuiFragmentUtilizers(fragment); assertEquals(1, list.size()); } catch (Exception e) { throw e; } finally { this._pageModelManager.deletePageModel(testPageModelACode); this._pageModelManager.deletePageModel(testPageModelBCode); this._pageModelManager.deletePageModel(testPageModelCCode); assertNull(this._pageModelManager.getPageModel(testPageModelACode)); assertNull(this._pageModelManager.getPageModel(testPageModelBCode)); assertNull(this._pageModelManager.getPageModel(testPageModelCCode)); } } private void init() throws Exception { try { this._widgetTypeManager = (IWidgetTypeManager) this.getService(SystemConstants.WIDGET_TYPE_MANAGER); this._pageModelManager = (IPageModelManager) this.getService(SystemConstants.PAGE_MODEL_MANAGER); } catch (Throwable t) { throw new Exception(t); } } private IWidgetTypeManager _widgetTypeManager; private IPageModelManager _pageModelManager = null; }