/**
* Licensed to Apereo under one or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information regarding copyright ownership. Apereo
* licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use
* this file except in compliance with the License. You may obtain a copy of the License at the
* following location:
*
* <p>http://www.apache.org/licenses/LICENSE-2.0
*
* <p>Unless required by applicable law or agreed to in writing, software distributed under the
* License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apereo.portal.portlet.registry;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.when;
import java.util.List;
import java.util.concurrent.Callable;
import javax.servlet.http.HttpServletRequest;
import net.sf.ehcache.Ehcache;
import org.apereo.portal.IUserPreferencesManager;
import org.apereo.portal.layout.IUserLayoutManager;
import org.apereo.portal.layout.node.IUserLayoutChannelDescription;
import org.apereo.portal.layout.node.IUserLayoutNodeDescription.LayoutNodeType;
import org.apereo.portal.portlet.dao.IPortletDefinitionDao;
import org.apereo.portal.portlet.dao.IPortletEntityDao;
import org.apereo.portal.portlet.dao.IPortletTypeDao;
import org.apereo.portal.portlet.dao.jpa.PortletDefinitionImpl;
import org.apereo.portal.portlet.dao.jpa.PortletPreferenceImpl;
import org.apereo.portal.portlet.om.IPortletDefinition;
import org.apereo.portal.portlet.om.IPortletDefinitionId;
import org.apereo.portal.portlet.om.IPortletEntity;
import org.apereo.portal.portlet.om.IPortletEntityId;
import org.apereo.portal.portlet.om.IPortletPreference;
import org.apereo.portal.portlet.om.IPortletType;
import org.apereo.portal.security.IPerson;
import org.apereo.portal.test.BasePortalJpaDaoTest;
import org.apereo.portal.url.IPortalRequestUtils;
import org.apereo.portal.user.IUserInstance;
import org.apereo.portal.user.IUserInstanceManager;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:jpaPortalTestApplicationContext.xml")
public class PortletEntityRegistryImplTest extends BasePortalJpaDaoTest {
@Autowired private IPortletTypeDao jpaPortletTypeDao;
@Autowired private IPortletDefinitionDao jpaPortletDefinitionDao;
@Autowired private IPortletEntityDao jpaPortletEntityDao;
@InjectMocks
private PortletEntityRegistryImpl portletEntityRegistry =
new PortletEntityRegistryImpl() {
@Override
protected IPortletDefinition getPortletDefinition(
HttpServletRequest request, String portletDefinitionIdStr) {
//Can't unit test authZ code so this is a stand in
return jpaPortletDefinitionDao.getPortletDefinition(portletDefinitionIdStr);
}
@Override
protected IPortletDefinition getPortletDefinition(
HttpServletRequest request, IPortletDefinitionId portletDefinitionId) {
//Can't unit test authZ code so this is a stand in
return jpaPortletDefinitionDao.getPortletDefinition(portletDefinitionId);
}
@Override
protected IPortletDefinition getPortletDefinition(
HttpServletRequest request,
IUserInstance userInstance,
String portletDefinitionIdStr) {
//Can't unit test authZ code so this is a stand in
return jpaPortletDefinitionDao.getPortletDefinition(portletDefinitionIdStr);
}
@Override
protected IPortletDefinition getPortletDefinition(
IUserInstance userInstance, IPortletDefinitionId portletDefinitionId) {
//Can't unit test authZ code so this is a stand in
return jpaPortletDefinitionDao.getPortletDefinition(portletDefinitionId);
}
};
@Mock private IPortalRequestUtils portalRequestUtils;
@Mock private IPortletDefinitionRegistry portletDefinitionRegistry;
@Mock private Ehcache entityIdParseCache;
@Mock private IUserInstanceManager userInstanceManager;
@Mock private IUserInstance userInstance;
@Mock private IUserPreferencesManager preferencesManager;
@Mock private IUserLayoutManager userLayoutManager;
@Mock private IUserLayoutChannelDescription node;
@Mock private IPerson person;
@Before
public void onSetUp() throws Exception {
MockitoAnnotations.initMocks(this);
portletEntityRegistry.setPortletEntityDao(this.jpaPortletEntityDao);
this.execute(
new Callable<Object>() {
@Override
public Object call() throws Exception {
for (final IPortletDefinition portletDefinition :
jpaPortletDefinitionDao.getPortletDefinitions()) {
jpaPortletDefinitionDao.deletePortletDefinition(portletDefinition);
}
for (final IPortletType portletType : jpaPortletTypeDao.getPortletTypes()) {
jpaPortletTypeDao.deletePortletType(portletType);
}
return null;
}
});
}
protected IPortletDefinitionId createDefaultPorltetDefinition() {
return this.execute(
new Callable<IPortletDefinitionId>() {
@Override
public IPortletDefinitionId call() throws Exception {
final IPortletType channelType =
jpaPortletTypeDao.createPortletType("BaseType", "foobar");
//Create a definition
final IPortletDefinition portletDef =
new PortletDefinitionImpl(
channelType,
"fname1",
"Test Portlet 1",
"Test Portlet 1 Title",
"/context1",
"portletName1",
false);
jpaPortletDefinitionDao.savePortletDefinition(portletDef);
final IPortletDefinitionId portletDefinitionId =
portletDef.getPortletDefinitionId();
when(portletDefinitionRegistry.getPortletDefinition(portletDefinitionId))
.thenReturn(portletDef);
when(portletDefinitionRegistry.getPortletDefinition(
portletDefinitionId.getStringId()))
.thenReturn(portletDef);
return portletDefinitionId;
}
});
}
//persistent with prefs & not in db - create new & update
@Test
public void testPersistentWithPrefsNotInDb() throws Throwable {
final IPortletDefinitionId portDefId1 = this.createDefaultPorltetDefinition();
final String nodeId = "u1l1n1";
//Mock setup
final MockHttpServletRequest request = new MockHttpServletRequest();
when(portalRequestUtils.getOriginalPortalRequest(request)).thenReturn(request);
when(portalRequestUtils.getOriginalPortletOrPortalRequest(request)).thenReturn(request);
when(userInstanceManager.getUserInstance(request)).thenReturn(userInstance);
when(userInstance.getPreferencesManager()).thenReturn(preferencesManager);
when(userInstance.getPerson()).thenReturn(person);
when(preferencesManager.getUserLayoutManager()).thenReturn(userLayoutManager);
when(userLayoutManager.getNode(nodeId)).thenReturn(node);
when(node.getType()).thenReturn(LayoutNodeType.PORTLET);
when(node.getChannelPublishId()).thenReturn(portDefId1.getStringId());
final IPortletEntityId portletEntityId =
this.execute(
new Callable<IPortletEntityId>() {
@Override
public IPortletEntityId call() throws Exception {
//T1 - Create the entity
final IPortletEntity portletEntity =
portletEntityRegistry.getOrCreatePortletEntity(
request, portDefId1, nodeId, 12);
assertEquals(
SessionPortletEntityImpl.class, portletEntity.getClass());
return portletEntity.getPortletEntityId();
}
});
/*
* T1 create entity
* T1 add preference, making persistent
* T2 delete preference, making interim
* T1 add preference 2 to persistent, stays persistent
*/
this.execute(
new Callable<Object>() {
@Override
public Object call() throws Exception {
final IPortletEntity portletEntity =
portletEntityRegistry.getPortletEntity(request, portletEntityId);
//Add a preference
final List<IPortletPreference> preferences =
portletEntity.getPortletPreferences();
final IPortletPreference portletPreference =
new PortletPreferenceImpl("pref", false, "value");
preferences.add(portletPreference);
//Store the entity
portletEntityRegistry.storePortletEntity(request, portletEntity);
return null;
}
});
this.execute(
new Callable<Object>() {
@Override
public Object call() throws Exception {
//T1 - Verify it was converted from interim to persistent
final IPortletEntity portletEntity =
portletEntityRegistry.getPortletEntity(request, portletEntityId);
assertEquals(
PersistentPortletEntityWrapper.class, portletEntity.getClass());
final List<IPortletPreference> preferences =
portletEntity.getPortletPreferences();
assertEquals(1, preferences.size());
//T2 - get the entity and add preferences
final IPortletEntityId localPortletEntityId =
executeInThread(
"T2.1",
new Callable<IPortletEntityId>() {
@Override
public IPortletEntityId call() throws Exception {
//T2 - Get entity
final IPortletEntity portletEntity =
portletEntityRegistry.getPortletEntity(
request,
portletEntityId.getStringId());
assertEquals(portletEntity, portletEntity);
//T2 - add preference
final List<IPortletPreference> preferences =
portletEntity.getPortletPreferences();
preferences.clear();
//T2 - Store the entity
portletEntityRegistry.storePortletEntity(
request, portletEntity);
return portletEntity.getPortletEntityId();
}
});
//T2 - verify entity was made persistent
executeInThread(
"T2.2",
new Callable<Object>() {
@Override
public Object call() throws Exception {
//T2 - Verify it was converted from persistent to interim
final IPortletEntity portletEntity =
portletEntityRegistry.getPortletEntity(
request, localPortletEntityId);
assertNotNull(portletEntity);
assertEquals(
SessionPortletEntityImpl.class,
portletEntity.getClass());
final List<IPortletPreference> preferences =
portletEntity.getPortletPreferences();
assertEquals(0, preferences.size());
return null;
}
});
//T1 - add preference 2
final IPortletPreference portletPreference =
new PortletPreferenceImpl("pref2", false, "value");
preferences.add(portletPreference);
//T1 - Store the entity
portletEntityRegistry.storePortletEntity(request, portletEntity);
return null;
}
});
this.execute(
new Callable<Object>() {
@Override
public Object call() throws Exception {
//T1 - Verify it was converted from interim to persistent
final IPortletEntity portletEntity =
portletEntityRegistry.getPortletEntity(request, portletEntityId);
assertEquals(
PersistentPortletEntityWrapper.class, portletEntity.getClass());
final List<IPortletPreference> preferences =
portletEntity.getPortletPreferences();
assertEquals(2, preferences.size());
return null;
}
});
}
//persistent with no prefs & not in db - noop
@Test
public void testPersistentNoPrefsNotInDb() throws Throwable {
final IPortletDefinitionId portDefId1 = this.createDefaultPorltetDefinition();
final String nodeId = "u1l1n1";
//Mock setup
final MockHttpServletRequest request = new MockHttpServletRequest();
when(portalRequestUtils.getOriginalPortalRequest(request)).thenReturn(request);
when(portalRequestUtils.getOriginalPortletOrPortalRequest(request)).thenReturn(request);
when(userInstanceManager.getUserInstance(request)).thenReturn(userInstance);
when(userInstance.getPreferencesManager()).thenReturn(preferencesManager);
when(userInstance.getPerson()).thenReturn(person);
when(preferencesManager.getUserLayoutManager()).thenReturn(userLayoutManager);
when(userLayoutManager.getNode(nodeId)).thenReturn(node);
when(node.getType()).thenReturn(LayoutNodeType.PORTLET);
when(node.getChannelPublishId()).thenReturn(portDefId1.getStringId());
final IPortletEntityId portletEntityId =
this.execute(
new Callable<IPortletEntityId>() {
@Override
public IPortletEntityId call() throws Exception {
//T1 - Create the entity
final IPortletEntity portletEntity =
portletEntityRegistry.getOrCreatePortletEntity(
request, portDefId1, nodeId, 12);
;
assertEquals(
SessionPortletEntityImpl.class, portletEntity.getClass());
return portletEntity.getPortletEntityId();
}
});
this.execute(
new Callable<Object>() {
@Override
public Object call() throws Exception {
final IPortletEntity portletEntity =
portletEntityRegistry.getPortletEntity(request, portletEntityId);
//Add a preference
final List<IPortletPreference> preferences =
portletEntity.getPortletPreferences();
final IPortletPreference portletPreference =
new PortletPreferenceImpl("pref", false, "value");
preferences.add(portletPreference);
//Store the entity
portletEntityRegistry.storePortletEntity(request, portletEntity);
return null;
}
});
this.execute(
new Callable<Object>() {
@Override
public Object call() throws Exception {
//T1 - Verify it was converted from interim to persistent
final IPortletEntity portletEntity =
portletEntityRegistry.getPortletEntity(request, portletEntityId);
assertEquals(
PersistentPortletEntityWrapper.class, portletEntity.getClass());
final List<IPortletPreference> preferences =
portletEntity.getPortletPreferences();
assertEquals(1, preferences.size());
//T2 - get the entity and add preferences
final IPortletEntityId localPortletEntityId =
executeInThread(
"T2.1",
new Callable<IPortletEntityId>() {
@Override
public IPortletEntityId call() throws Exception {
//T2 - Get entity
final IPortletEntity portletEntity =
portletEntityRegistry.getPortletEntity(
request,
portletEntityId.getStringId());
assertEquals(portletEntity, portletEntity);
//T2 - remove preferences
final List<IPortletPreference> preferences =
portletEntity.getPortletPreferences();
preferences.clear();
//T2 - Store the entity
portletEntityRegistry.storePortletEntity(
request, portletEntity);
return portletEntity.getPortletEntityId();
}
});
//T2 - verify entity was made persistent
executeInThread(
"T2.2",
new Callable<Object>() {
@Override
public Object call() throws Exception {
//T2 - Verify it was converted from persistent to interim
IPortletEntity portletEntity =
portletEntityRegistry.getPortletEntity(
request, localPortletEntityId);
assertEquals(
SessionPortletEntityImpl.class,
portletEntity.getClass());
List<IPortletPreference> preferences =
portletEntity.getPortletPreferences();
assertEquals(0, preferences.size());
return null;
}
});
//T1 - remove all preferences
preferences.clear();
//T1 - Store the entity
portletEntityRegistry.storePortletEntity(request, portletEntity);
return null;
}
});
this.execute(
new Callable<Object>() {
@Override
public Object call() throws Exception {
//T1 - Verify it was converted from interim to persistent
final IPortletEntity portletEntity =
portletEntityRegistry.getPortletEntity(request, portletEntityId);
assertEquals(SessionPortletEntityImpl.class, portletEntity.getClass());
final List<IPortletPreference> preferences =
portletEntity.getPortletPreferences();
assertEquals(0, preferences.size());
return null;
}
});
}
//interim with no prefs & in db - delete db version
@Test
public void testInterimNoPrefsAlreadyPersistent() throws Throwable {
final IPortletDefinitionId portDefId1 = this.createDefaultPorltetDefinition();
final String nodeId = "u1l1n1";
//Mock setup
final MockHttpServletRequest request = new MockHttpServletRequest();
when(portalRequestUtils.getOriginalPortalRequest(request)).thenReturn(request);
when(portalRequestUtils.getOriginalPortletOrPortalRequest(request)).thenReturn(request);
when(userInstanceManager.getUserInstance(request)).thenReturn(userInstance);
when(userInstance.getPreferencesManager()).thenReturn(preferencesManager);
when(userInstance.getPerson()).thenReturn(person);
when(preferencesManager.getUserLayoutManager()).thenReturn(userLayoutManager);
when(userLayoutManager.getNode(nodeId)).thenReturn(node);
when(node.getType()).thenReturn(LayoutNodeType.PORTLET);
when(node.getChannelPublishId()).thenReturn(portDefId1.getStringId());
final IPortletEntityId portletEntityId =
this.execute(
new Callable<IPortletEntityId>() {
@Override
public IPortletEntityId call() throws Exception {
//T1 - Create the entity
final IPortletEntity portletEntity =
portletEntityRegistry.getOrCreatePortletEntity(
request, portDefId1, nodeId, 12);
;
assertEquals(
SessionPortletEntityImpl.class, portletEntity.getClass());
//T2 - get the entity and add preferences
final IPortletEntityId portletEntityId =
executeInThread(
"T2.1",
new Callable<IPortletEntityId>() {
@Override
public IPortletEntityId call()
throws Exception {
//T2 - Get entity
final IPortletEntity localPortletEntity =
portletEntityRegistry
.getPortletEntity(
request,
portletEntity
.getPortletEntityId()
.getStringId());
assertEquals(
portletEntity, localPortletEntity);
//T2 - Add a preference
final List<IPortletPreference> preferences =
localPortletEntity
.getPortletPreferences();
final IPortletPreference portletPreference =
new PortletPreferenceImpl(
"pref2", false, "value");
preferences.add(portletPreference);
//T2 - Store the entity
portletEntityRegistry.storePortletEntity(
request, localPortletEntity);
return localPortletEntity
.getPortletEntityId();
}
});
//T2 - verify entity was made persistent
executeInThread(
"T2.2",
new Callable<Object>() {
@Override
public Object call() throws Exception {
//T2 - Verify it was converted from interim to persistent
IPortletEntity portletEntity =
portletEntityRegistry.getPortletEntity(
request, portletEntityId);
assertEquals(
PersistentPortletEntityWrapper.class,
portletEntity.getClass());
List<IPortletPreference> preferences =
portletEntity.getPortletPreferences();
assertEquals(1, preferences.size());
return null;
}
});
//T1 - clear preferences
final List<IPortletPreference> preferences =
portletEntity.getPortletPreferences();
preferences.clear();
//T1 - Store the entity
portletEntityRegistry.storePortletEntity(request, portletEntity);
return portletEntity.getPortletEntityId();
}
});
this.execute(
new Callable<Object>() {
@Override
public Object call() throws Exception {
//T1 - Verify it was converted from interim to persistent
final IPortletEntity portletEntity =
portletEntityRegistry.getPortletEntity(request, portletEntityId);
assertEquals(SessionPortletEntityImpl.class, portletEntity.getClass());
final List<IPortletPreference> preferences =
portletEntity.getPortletPreferences();
assertEquals(0, preferences.size());
return null;
}
});
}
//interim with prefs & in db - get db version & update
@Test
public void testInterimAddingPrefsAlreadyPersistent() throws Throwable {
final IPortletDefinitionId portDefId1 = this.createDefaultPorltetDefinition();
final String nodeId = "u1l1n1";
//Mock setup
final MockHttpServletRequest request = new MockHttpServletRequest();
when(portalRequestUtils.getOriginalPortalRequest(request)).thenReturn(request);
when(portalRequestUtils.getOriginalPortletOrPortalRequest(request)).thenReturn(request);
when(userInstanceManager.getUserInstance(request)).thenReturn(userInstance);
when(userInstance.getPreferencesManager()).thenReturn(preferencesManager);
when(userInstance.getPerson()).thenReturn(person);
when(preferencesManager.getUserLayoutManager()).thenReturn(userLayoutManager);
when(userLayoutManager.getNode(nodeId)).thenReturn(node);
when(node.getType()).thenReturn(LayoutNodeType.PORTLET);
when(node.getChannelPublishId()).thenReturn(portDefId1.getStringId());
/*
* T1 - create ientity
* T2 - get ientity
* T2 - add pref and store ientity converting it to pentity
* T1 - add pref to ientity and store
*/
final IPortletEntityId portletEntityId =
this.execute(
new Callable<IPortletEntityId>() {
@Override
public IPortletEntityId call() throws Exception {
//T1 - Create the entity
final IPortletEntity portletEntity =
portletEntityRegistry.getOrCreatePortletEntity(
request, portDefId1, nodeId, 12);
;
assertEquals(
SessionPortletEntityImpl.class, portletEntity.getClass());
//T2 - get the entity and add preferences
final IPortletEntityId portletEntityId =
executeInThread(
"T2.1",
new Callable<IPortletEntityId>() {
@Override
public IPortletEntityId call()
throws Exception {
//T2 - Get entity
final IPortletEntity localPortletEntity =
portletEntityRegistry
.getPortletEntity(
request,
portletEntity
.getPortletEntityId()
.getStringId());
assertEquals(
portletEntity, localPortletEntity);
//T2 - Add a preference
final List<IPortletPreference> preferences =
localPortletEntity
.getPortletPreferences();
final IPortletPreference portletPreference =
new PortletPreferenceImpl(
"pref2", false, "value");
preferences.add(portletPreference);
//T2 - Store the entity
portletEntityRegistry.storePortletEntity(
request, localPortletEntity);
return localPortletEntity
.getPortletEntityId();
}
});
//T2 - verify entity was made persistent
executeInThread(
"T2.2",
new Callable<Object>() {
@Override
public Object call() throws Exception {
//T2 - Verify it was converted from interim to persistent
IPortletEntity portletEntity =
portletEntityRegistry.getPortletEntity(
request, portletEntityId);
assertEquals(
PersistentPortletEntityWrapper.class,
portletEntity.getClass());
List<IPortletPreference> preferences =
portletEntity.getPortletPreferences();
assertEquals(1, preferences.size());
return null;
}
});
//T1 - Add a preference
final List<IPortletPreference> preferences =
portletEntity.getPortletPreferences();
final IPortletPreference portletPreference =
new PortletPreferenceImpl("pref1", false, "value");
preferences.add(portletPreference);
//T1 - Store the entity
portletEntityRegistry.storePortletEntity(request, portletEntity);
return portletEntity.getPortletEntityId();
}
});
this.execute(
new Callable<Object>() {
@Override
public Object call() throws Exception {
//T1 - Verify it was converted from interim to persistent
final IPortletEntity portletEntity =
portletEntityRegistry.getPortletEntity(request, portletEntityId);
assertEquals(
PersistentPortletEntityWrapper.class, portletEntity.getClass());
final List<IPortletPreference> preferences =
portletEntity.getPortletPreferences();
assertEquals(1, preferences.size());
return null;
}
});
}
//persistent with no prefs & in db - delete & create interim
@Test
public void testPersistentRemovePrefs() throws Exception {
final IPortletDefinitionId portletDefId = this.createDefaultPorltetDefinition();
final String nodeId = "u1l1n1";
//Mock setup
final MockHttpServletRequest request = new MockHttpServletRequest();
when(portalRequestUtils.getOriginalPortalRequest(request)).thenReturn(request);
when(portalRequestUtils.getOriginalPortletOrPortalRequest(request)).thenReturn(request);
when(userInstanceManager.getUserInstance(request)).thenReturn(userInstance);
when(userInstance.getPreferencesManager()).thenReturn(preferencesManager);
when(userInstance.getPerson()).thenReturn(person);
when(preferencesManager.getUserLayoutManager()).thenReturn(userLayoutManager);
when(userLayoutManager.getNode(nodeId)).thenReturn(node);
when(node.getType()).thenReturn(LayoutNodeType.PORTLET);
when(node.getChannelPublishId()).thenReturn(portletDefId.getStringId());
final IPortletEntityId portletEntityId =
this.execute(
new Callable<IPortletEntityId>() {
@Override
public IPortletEntityId call() throws Exception {
//Create the entity
IPortletEntity portletEntity =
portletEntityRegistry.getOrCreatePortletEntity(
request, portletDefId, nodeId, 12);
assertEquals(
SessionPortletEntityImpl.class, portletEntity.getClass());
return portletEntity.getPortletEntityId();
}
});
this.execute(
new Callable<Object>() {
@Override
public Object call() throws Exception {
final IPortletEntity portletEntity =
portletEntityRegistry.getPortletEntity(request, portletEntityId);
//Add a preference
final List<IPortletPreference> preferences =
portletEntity.getPortletPreferences();
final IPortletPreference portletPreference =
new PortletPreferenceImpl("pref", false, "value");
preferences.add(portletPreference);
//Store the entity
portletEntityRegistry.storePortletEntity(request, portletEntity);
return null;
}
});
this.execute(
new Callable<Object>() {
@Override
public Object call() throws Exception {
//Verify it was converted from interim to persistent
final IPortletEntity portletEntity =
portletEntityRegistry.getPortletEntity(request, portletEntityId);
assertEquals(
PersistentPortletEntityWrapper.class, portletEntity.getClass());
final List<IPortletPreference> preferences =
portletEntity.getPortletPreferences();
assertEquals(1, preferences.size());
//remove all preferences
preferences.clear();
//Store the entity
portletEntityRegistry.storePortletEntity(request, portletEntity);
return null;
}
});
this.execute(
new Callable<Object>() {
@Override
public Object call() throws Exception {
//Verify it switched from persistent to interim
final IPortletEntity portletEntity =
portletEntityRegistry.getPortletEntity(request, portletEntityId);
assertEquals(SessionPortletEntityImpl.class, portletEntity.getClass());
final List<IPortletPreference> preferences =
portletEntity.getPortletPreferences();
assertEquals(0, preferences.size());
return null;
}
});
}
//persistent with prefs & in db - update
@Test
public void testPersistentUpdatingPrefs() throws Exception {
final IPortletDefinitionId portletDefId = this.createDefaultPorltetDefinition();
final String nodeId = "u1l1n1";
//Mock setup
final MockHttpServletRequest request = new MockHttpServletRequest();
when(portalRequestUtils.getOriginalPortalRequest(request)).thenReturn(request);
when(portalRequestUtils.getOriginalPortletOrPortalRequest(request)).thenReturn(request);
when(userInstanceManager.getUserInstance(request)).thenReturn(userInstance);
when(userInstance.getPreferencesManager()).thenReturn(preferencesManager);
when(userInstance.getPerson()).thenReturn(person);
when(preferencesManager.getUserLayoutManager()).thenReturn(userLayoutManager);
when(userLayoutManager.getNode(nodeId)).thenReturn(node);
when(node.getType()).thenReturn(LayoutNodeType.PORTLET);
when(node.getChannelPublishId()).thenReturn(portletDefId.getStringId());
final IPortletEntityId portletEntityId =
this.execute(
new Callable<IPortletEntityId>() {
@Override
public IPortletEntityId call() throws Exception {
//Create the entity
IPortletEntity portletEntity =
portletEntityRegistry.getOrCreatePortletEntity(
request, portletDefId, nodeId, 12);
assertEquals(
SessionPortletEntityImpl.class, portletEntity.getClass());
return portletEntity.getPortletEntityId();
}
});
this.execute(
new Callable<Object>() {
@Override
public Object call() throws Exception {
final IPortletEntity portletEntity =
portletEntityRegistry.getPortletEntity(request, portletEntityId);
//Add a preference
final List<IPortletPreference> preferences =
portletEntity.getPortletPreferences();
final IPortletPreference portletPreference =
new PortletPreferenceImpl("pref", false, "value");
preferences.add(portletPreference);
//Store the entity
portletEntityRegistry.storePortletEntity(request, portletEntity);
return null;
}
});
this.execute(
new Callable<Object>() {
@Override
public Object call() throws Exception {
//Verify it was converted from interim to persistent
final IPortletEntity portletEntity =
portletEntityRegistry.getPortletEntity(request, portletEntityId);
assertEquals(
PersistentPortletEntityWrapper.class, portletEntity.getClass());
final List<IPortletPreference> preferences =
portletEntity.getPortletPreferences();
assertEquals(1, preferences.size());
//add another preference
final PortletPreferenceImpl portletPreference =
new PortletPreferenceImpl("pref2", false, "valuea");
preferences.add(portletPreference);
//Store the entity
portletEntityRegistry.storePortletEntity(request, portletEntity);
return null;
}
});
this.execute(
new Callable<Object>() {
@Override
public Object call() throws Exception {
//Verify it was converted from interim to persistent
final IPortletEntity portletEntity =
portletEntityRegistry.getPortletEntity(request, portletEntityId);
assertEquals(
PersistentPortletEntityWrapper.class, portletEntity.getClass());
final List<IPortletPreference> preferences =
portletEntity.getPortletPreferences();
assertEquals(2, preferences.size());
return null;
}
});
}
//interim with no prefs & not in db - noop
@Test
public void testInterimNoPrefs() throws Exception {
final IPortletDefinitionId portletDefId = this.createDefaultPorltetDefinition();
final String nodeId = "u1l1n1";
//Mock setup
final MockHttpServletRequest request = new MockHttpServletRequest();
when(portalRequestUtils.getOriginalPortalRequest(request)).thenReturn(request);
when(portalRequestUtils.getOriginalPortletOrPortalRequest(request)).thenReturn(request);
when(userInstanceManager.getUserInstance(request)).thenReturn(userInstance);
when(userInstance.getPreferencesManager()).thenReturn(preferencesManager);
when(userInstance.getPerson()).thenReturn(person);
when(preferencesManager.getUserLayoutManager()).thenReturn(userLayoutManager);
when(userLayoutManager.getNode(nodeId)).thenReturn(node);
when(node.getType()).thenReturn(LayoutNodeType.PORTLET);
when(node.getChannelPublishId()).thenReturn(portletDefId.getStringId());
final IPortletEntityId portletEntityId =
this.execute(
new Callable<IPortletEntityId>() {
@Override
public IPortletEntityId call() throws Exception {
//Create the entity
IPortletEntity portletEntity =
portletEntityRegistry.getOrCreatePortletEntity(
request, portletDefId, nodeId, 12);
assertEquals(
SessionPortletEntityImpl.class, portletEntity.getClass());
return portletEntity.getPortletEntityId();
}
});
this.execute(
new Callable<Object>() {
@Override
public Object call() throws Exception {
final IPortletEntity portletEntity =
portletEntityRegistry.getPortletEntity(request, portletEntityId);
//Store the entity
portletEntityRegistry.storePortletEntity(request, portletEntity);
return null;
}
});
this.execute(
new Callable<Object>() {
@Override
public Object call() throws Exception {
final IPortletEntity portletEntity =
portletEntityRegistry.getPortletEntity(request, portletEntityId);
//Verify it is still interim
assertEquals(SessionPortletEntityImpl.class, portletEntity.getClass());
return null;
}
});
}
//interim with prefs & not in db - create new & update, delete interim
@Test
public void testInterimAddingPrefs() throws Exception {
final IPortletDefinitionId portletDefId = this.createDefaultPorltetDefinition();
final String nodeId = "u1l1n1";
//Mock setup
final MockHttpServletRequest request = new MockHttpServletRequest();
when(portalRequestUtils.getOriginalPortalRequest(request)).thenReturn(request);
when(portalRequestUtils.getOriginalPortletOrPortalRequest(request)).thenReturn(request);
when(userInstanceManager.getUserInstance(request)).thenReturn(userInstance);
when(userInstance.getPreferencesManager()).thenReturn(preferencesManager);
when(userInstance.getPerson()).thenReturn(person);
when(preferencesManager.getUserLayoutManager()).thenReturn(userLayoutManager);
when(userLayoutManager.getNode(nodeId)).thenReturn(node);
when(node.getType()).thenReturn(LayoutNodeType.PORTLET);
when(node.getChannelPublishId()).thenReturn(portletDefId.getStringId());
final IPortletEntityId portletEntityId =
this.execute(
new Callable<IPortletEntityId>() {
@Override
public IPortletEntityId call() throws Exception {
//Create the entity
IPortletEntity portletEntity =
portletEntityRegistry.getOrCreatePortletEntity(
request, portletDefId, nodeId, 12);
assertEquals(
SessionPortletEntityImpl.class, portletEntity.getClass());
return portletEntity.getPortletEntityId();
}
});
this.execute(
new Callable<Object>() {
@Override
public Object call() throws Exception {
final IPortletEntity portletEntity =
portletEntityRegistry.getPortletEntity(request, portletEntityId);
//Add a preference
final List<IPortletPreference> preferences =
portletEntity.getPortletPreferences();
final IPortletPreference portletPreference =
new PortletPreferenceImpl("pref", false, "value");
preferences.add(portletPreference);
//Store the entity
portletEntityRegistry.storePortletEntity(request, portletEntity);
return null;
}
});
this.execute(
new Callable<Object>() {
@Override
public Object call() throws Exception {
//Verify it was converted from interim to persistent
final IPortletEntity portletEntity =
portletEntityRegistry.getPortletEntity(request, portletEntityId);
assertEquals(
PersistentPortletEntityWrapper.class, portletEntity.getClass());
final List<IPortletPreference> preferences =
portletEntity.getPortletPreferences();
assertEquals(1, preferences.size());
return null;
}
});
}
}