/*
* 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.page;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.sql.DataSource;
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.services.mock.MockWidgetsDAO;
import com.agiletec.aps.system.SystemConstants;
import com.agiletec.aps.system.exception.ApsSystemException;
import com.agiletec.aps.system.services.group.Group;
import com.agiletec.aps.system.services.pagemodel.PageModel;
import com.agiletec.aps.util.ApsProperties;
/**
* @author M.Diana
*/
public class TestPageManager extends BaseTestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
this.init();
}
public void testAddUpdateMoveDeletePage() throws Throwable {
try {
_pageManager.deletePage("temp");
_pageManager.deletePage("temp1");
_pageManager.deletePage("temp2");
} catch (Throwable t) {
throw t;
}
Page page = new Page();
page.setCode("temp");
IPage parentPage = _pageManager.getPage("service");
assertNotNull(parentPage);
page.setParent(parentPage);
page.setParentCode(parentPage.getCode());
PageModel pageModel = parentPage.getModel();
assertNotNull(pageModel);
page.setModel(pageModel);
page.setGroup("free");
page.setShowable(true);
page.setTitle("it", "temptitle");
ApsProperties titles = new ApsProperties();
titles.setProperty("it", "pagina temporanea");
page.setTitles(titles);
Widget widget = new Widget();
ApsProperties config = new ApsProperties();
config.setProperty("temp", "tempValue");
config.setProperty("contentId", "ART11");
widget.setConfig(config);
WidgetType widgetType = new WidgetType();
widgetType.setCode("content_viewer");
widget.setType(widgetType);
Widget[] widgets = {widget};
page.setWidgets(widgets);
_pageManager.addPage(page);
parentPage = _pageManager.getPage("service");
page.setParent(parentPage);
page.setCode("temp1");
_pageManager.addPage(page);
parentPage = _pageManager.getPage("service");
page.setParent(parentPage);
page.setCode("temp2");
_pageManager.addPage(page);
IPage extractedPage = _pageManager.getPage("temp");
assertNotNull(extractedPage);
assertEquals(extractedPage.getCode(), "temp");
assertEquals(extractedPage.getGroup(), "free");
assertEquals(extractedPage.getTitle("it"), "pagina temporanea");
assertEquals(extractedPage.getModel().getCode(), "service");
assertEquals(extractedPage.isShowable(), true);
widgets = extractedPage.getWidgets();
assertTrue(widgets[0].getConfig().containsKey("temp"));
assertTrue(widgets[0].getConfig().containsKey("contentId"));
assertEquals(widgets[0].getType().getCode(), "content_viewer");
this.updatePage();
this.movePage();
this.deletePage();
}
private void updatePage() throws Exception {
Page page = new Page();
page.setCode("temp");
IPage parentPage = _pageManager.getPage("service");
assertNotNull(parentPage);
page.setParent(parentPage);
page.setParentCode(parentPage.getCode());
PageModel pageModel = parentPage.getModel();
assertNotNull(pageModel);
page.setModel(pageModel);
page.setGroup("free");
page.setShowable(false);
page.setTitle("en", "temptitle1");
ApsProperties titles = new ApsProperties();
titles.setProperty("it", "pagina temporanea1");
page.setTitles(titles);
Widget widget = new Widget();
ApsProperties config = new ApsProperties();
config.setProperty("temp1", "temp1");
config.setProperty("contentId", "ART11");
widget.setConfig(config);
WidgetType widgetType = new WidgetType();
widgetType.setCode("content_viewer");
widget.setType(widgetType);
Widget[] widgets = {widget};
page.setWidgets(widgets);
_pageManager.updatePage(page);
IPage extractedPage = _pageManager.getPage("temp");
assertNotNull(extractedPage);
assertEquals(extractedPage.getCode(), "temp");
assertEquals(extractedPage.getGroup(), "free");
assertEquals(extractedPage.getTitle("it"), "pagina temporanea1");
assertEquals(extractedPage.getModel().getCode(), "service");
assertEquals(extractedPage.isShowable(), false);
widgets = extractedPage.getWidgets();
assertTrue(widgets[0].getConfig().containsKey("temp1"));
assertTrue(widgets[0].getConfig().containsKey("contentId"));
assertEquals(widgets[0].getType().getCode(), "content_viewer");
}
private void movePage() throws Exception {
_pageManager.deletePage("temp1");
boolean moveUp = true;
_pageManager.movePage("temp2", moveUp);
IPage page = _pageManager.getPage("temp2");
IPage[] pages = page.getParent().getChildren();
int len = pages.length;
page = pages[len - 2];
assertEquals(page.getCode(), "temp2");
moveUp = false;
_pageManager.movePage("temp2", moveUp);
page = _pageManager.getPage("temp2");
pages = page.getParent().getChildren();
page = pages[len - 1];
assertEquals(page.getCode(), "temp2");
}
private void deletePage() throws Throwable {
DataSource dataSource = (DataSource) this.getApplicationContext().getBean("portDataSource");
MockWidgetsDAO mockWidgetsDAO = new MockWidgetsDAO();
mockWidgetsDAO.setDataSource(dataSource);
_pageManager.deletePage("temp");
_pageManager.deletePage("temp2");
IPage page = _pageManager.getPage("temp");
assertNull(page);
boolean exists = true;
try {
exists = mockWidgetsDAO.exists("temp");
assertEquals(exists, false);
exists = mockWidgetsDAO.exists("temp2");
assertEquals(exists, false);
} catch (Throwable e) {
throw e;
}
}
public void testFailureJoinWidget_1() throws Throwable {
String pageCode = "wrongPageCode";
int frame = 2;
try {
Widget widget = this.getWidgetForTest("login", null);
this._pageManager.joinWidget(pageCode, widget, frame);
fail();
} catch (ApsSystemException e) {
//Errore per pagina inesistente
} catch (Throwable t) {
throw t;
}
}
public void testFailureJoinWidget_2() throws Throwable {
String pageCode = "pagina_1";
int frame = 6;
IPage pagina_1 = this._pageManager.getPage(pageCode);
assertTrue(pagina_1.getWidgets().length<=frame);
try {
Widget widget = this.getWidgetForTest("login", null);
this._pageManager.joinWidget(pageCode, widget, frame);
fail();
} catch (ApsSystemException e) {
//Errore per frame errato in modello
} catch (Throwable t) {
throw t;
} finally {
this._pageManager.updatePage(pagina_1);
}
}
public void testFailureRemoveWidget_1() throws Throwable {
String pageCode = "wrongPageCode";
int frame = 2;
try {
this._pageManager.removeWidget(pageCode, frame);
fail();
} catch (ApsSystemException e) {
//Errore per pagina inesistente
} catch (Throwable t) {
throw t;
}
}
public void testFailureRemoveWidget_2() throws Throwable {
String pageCode = "pagina_1";
int frame = 6;
IPage pagina_1 = this._pageManager.getPage(pageCode);
assertTrue(pagina_1.getWidgets().length<=frame);
try {
this._pageManager.removeWidget(pageCode, frame);
fail();
} catch (ApsSystemException e) {
//Errore per frame errato in modello
} catch (Throwable t) {
throw t;
}
}
public void testJoinRemoveWidget() throws Throwable {
String pageCode = "pagina_1";
int frame = 1;
IPage pagina_1 = this._pageManager.getPage(pageCode);
assertNull(pagina_1.getWidgets()[frame]);
try {
Widget widget = this.getWidgetForTest("login_form", null);
this._pageManager.joinWidget(pageCode, widget, frame);
pagina_1 = this._pageManager.getPage(pageCode);
Widget extracted = pagina_1.getWidgets()[frame];
assertNotNull(extracted);
assertEquals("login_form", extracted.getType().getCode());
this._pageManager.removeWidget(pageCode, frame);
pagina_1 = this._pageManager.getPage(pageCode);
extracted = pagina_1.getWidgets()[frame];
assertNull(extracted);
} catch (Throwable t) {
pagina_1.getWidgets()[frame] = null;
this._pageManager.updatePage(pagina_1);
throw t;
}
}
public void testSearchPage() throws Throwable {
List<String> allowedGroupCodes = new ArrayList<String>();
allowedGroupCodes.add(Group.ADMINS_GROUP_NAME);
try {
List<IPage> pagesFound = this._pageManager.searchPages("aGIna_", allowedGroupCodes);
assertNotNull(pagesFound);
assertEquals(4, pagesFound.size());
String pageCodeToken = "agina";
pagesFound = this._pageManager.searchPages(pageCodeToken, allowedGroupCodes);
// verify the result found
assertNotNull(pagesFound);
Iterator<IPage> itr = pagesFound.iterator();
assertEquals(5, pagesFound.size());
while (itr.hasNext()) {
IPage currentCode = itr.next();
assertTrue(currentCode.getCode().contains(pageCodeToken));
}
pagesFound = this._pageManager.searchPages("", allowedGroupCodes);
assertNotNull(pagesFound);
System.out.println("-----------------------");
System.out.println(pagesFound);
System.out.println("-----------------------");
assertEquals(16, pagesFound.size());
pagesFound = this._pageManager.searchPages(null, allowedGroupCodes);
assertNotNull(pagesFound);
assertEquals(16, pagesFound.size());
} catch (Throwable t) {
throw t;
}
}
public void testGetWidgetUtilizers() throws Throwable {
List<IPage> pageUtilizers1 = this._pageManager.getWidgetUtilizers(null);
assertNotNull(pageUtilizers1);
assertEquals(0, pageUtilizers1.size());
List<IPage> pageUtilizers2 = this._pageManager.getWidgetUtilizers("logic_type");
assertNotNull(pageUtilizers2);
assertEquals(0, pageUtilizers2.size());
List<IPage> pageUtilizers3 = this._pageManager.getWidgetUtilizers("leftmenu");
assertNotNull(pageUtilizers3);
assertEquals(1, pageUtilizers3.size());
assertEquals("pagina_1", pageUtilizers3.get(0).getCode());
List<IPage> pageUtilizers4 = this._pageManager.getWidgetUtilizers("content_viewer");
assertNotNull(pageUtilizers4);
assertEquals(7, pageUtilizers4.size());
assertEquals("homepage", pageUtilizers4.get(0).getCode());
assertEquals("contentview", pageUtilizers4.get(1).getCode());
assertEquals("pagina_11", pageUtilizers4.get(2).getCode());
assertEquals("pagina_2", pageUtilizers4.get(3).getCode());
assertEquals("coach_page", pageUtilizers4.get(4).getCode());
assertEquals("customers_page", pageUtilizers4.get(5).getCode());
assertEquals("customer_subpage_2", pageUtilizers4.get(6).getCode());
}
private Widget getWidgetForTest(String widgetTypeCode, ApsProperties config) throws Throwable {
WidgetType type = this._widgetTypeManager.getWidgetType(widgetTypeCode);
Widget widget = new Widget();
widget.setType(type);
if (null != config) {
widget.setConfig(config);
}
return widget;
}
private void init() throws Exception {
try {
this._pageManager = (IPageManager) this.getService(SystemConstants.PAGE_MANAGER);
this._widgetTypeManager = (IWidgetTypeManager) this.getService(SystemConstants.WIDGET_TYPE_MANAGER);
} catch (Throwable t) {
throw new Exception(t);
}
}
private IPageManager _pageManager = null;
private IWidgetTypeManager _widgetTypeManager;
}