/* * Copyright (C) 2011 eXo Platform SAS. * * This 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 software 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. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.exoplatform.portal.mop.description; import java.util.Collections; import java.util.HashMap; import java.util.Locale; import java.util.Map; import org.exoplatform.component.test.ConfigurationUnit; import org.exoplatform.component.test.ConfiguredBy; import org.exoplatform.component.test.ContainerScope; import org.exoplatform.container.PortalContainer; import org.exoplatform.portal.AbstractPortalTest; import org.exoplatform.portal.mop.Described; import org.exoplatform.portal.mop.i18n.I18Nized; import org.exoplatform.portal.mop.navigation.NavigationServiceImpl; import org.exoplatform.portal.pom.config.POMSessionManager; import org.gatein.common.util.Tools; import org.gatein.mop.api.workspace.Navigation; import org.gatein.mop.api.workspace.ObjectType; import org.gatein.mop.api.workspace.Site; import org.gatein.mop.core.api.MOPService; /** * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> */ @ConfiguredBy({ @ConfigurationUnit(scope = ContainerScope.PORTAL, path = "conf/exo.portal.component.test.jcr-configuration.xml"), @ConfigurationUnit(scope = ContainerScope.PORTAL, path = "conf/exo.portal.component.identity-configuration.xml"), @ConfigurationUnit(scope = ContainerScope.PORTAL, path = "conf/exo.portal.component.portal-configuration.xml") }) public class TestDescriptionService extends AbstractPortalTest { /** . */ protected POMSessionManager mgr; /** . */ protected NavigationServiceImpl service; @Override protected void setUp() throws Exception { super.setUp(); // PortalContainer container = PortalContainer.getInstance(); mgr = (POMSessionManager) container.getComponentInstanceOfType(POMSessionManager.class); service = new NavigationServiceImpl(mgr); // dataStorage = (DataStorage)container.getComponentInstanceOfType(DataStorage.class); // Clear the cache for each test service.clearCache(); // begin(); } @Override protected void tearDown() throws Exception { end(); super.tearDown(); } public void testResolveNoDescription() throws Exception { DescriptionService svc = new DescriptionServiceImpl(mgr); MOPService mop = mgr.getPOMService(); Site portal = mop.getModel().getWorkspace().addSite(ObjectType.PORTAL_SITE, "foo"); Navigation nav = portal.getRootNavigation().addChild("default"); String id = nav.getObjectId(); // assertEquals(null, svc.resolveDescription(id, null, Locale.ENGLISH)); } public void testResolveDefaultDescription() throws Exception { DescriptionService svc = new DescriptionServiceImpl(mgr); MOPService mop = mgr.getPOMService(); Site portal = mop.getModel().getWorkspace().addSite(ObjectType.PORTAL_SITE, "foo"); Navigation nav = portal.getRootNavigation().addChild("default"); Described described = nav.adapt(Described.class); described.setName("foo_name"); String id = nav.getObjectId(); // assertEquals(null, svc.resolveDescription(id, null, Locale.ENGLISH)); } public void testResolveLocalizedDescription() throws Exception { DescriptionService svc = new DescriptionServiceImpl(mgr); MOPService mop = mgr.getPOMService(); Site portal = mop.getModel().getWorkspace().addSite(ObjectType.PORTAL_SITE, "foo"); Navigation nav = portal.getRootNavigation().addChild("default"); I18Nized i18nized = nav.adapt(I18Nized.class); Described described = i18nized.getMixin(Described.class, Locale.ENGLISH, true); described.setName("name_en"); described = i18nized.getMixin(Described.class, Locale.UK, true); described.setName("name_en_GB"); String id = nav.getObjectId(); // assertEquals(null, svc.resolveDescription(id, null, Locale.GERMAN)); assertEquals(null, svc.resolveDescription(id, null, new Locale("", "GB"))); assertEquals(new Described.State("name_en", null), svc.resolveDescription(id, Locale.ENGLISH, Locale.GERMAN)); assertEquals(new Described.State("name_en_GB", null), svc.resolveDescription(id, Locale.UK, Locale.GERMAN)); assertEquals(new Described.State("name_en", null), svc.resolveDescription(id, Locale.US, Locale.GERMAN)); assertEquals(new Described.State("name_en", null), svc.resolveDescription(id, null, Locale.ENGLISH)); assertEquals(new Described.State("name_en", null), svc.resolveDescription(id, null, Locale.US)); assertEquals(new Described.State("name_en_GB", null), svc.resolveDescription(id, null, Locale.UK)); } public void testResolveDescription() throws Exception { DescriptionService svc = new DescriptionServiceImpl(mgr); MOPService mop = mgr.getPOMService(); Site portal = mop.getModel().getWorkspace().addSite(ObjectType.PORTAL_SITE, "foo"); Navigation nav = portal.getRootNavigation().addChild("default"); Described described = nav.adapt(Described.class); described.setName("name"); I18Nized i18nized = nav.adapt(I18Nized.class); described = i18nized.getMixin(Described.class, Locale.ENGLISH, true); described.setName("name_en"); described = i18nized.getMixin(Described.class, Locale.UK, true); described.setName("name_en_GB"); String id = nav.getObjectId(); // assertEquals(null, svc.resolveDescription(id, null, Locale.GERMAN)); assertEquals(new Described.State("name_en", null), svc.resolveDescription(id, Locale.ENGLISH, Locale.GERMAN)); assertEquals(new Described.State("name_en_GB", null), svc.resolveDescription(id, Locale.UK, Locale.GERMAN)); assertEquals(new Described.State("name_en", null), svc.resolveDescription(id, Locale.US, Locale.GERMAN)); assertEquals(new Described.State("name_en", null), svc.resolveDescription(id, null, Locale.ENGLISH)); assertEquals(new Described.State("name_en", null), svc.resolveDescription(id, null, Locale.US)); assertEquals(new Described.State("name_en_GB", null), svc.resolveDescription(id, null, Locale.UK)); } public void testGetDefaultDescription() throws Exception { DescriptionService svc = new DescriptionServiceImpl(mgr); MOPService mop = mgr.getPOMService(); Site portal = mop.getModel().getWorkspace().addSite(ObjectType.PORTAL_SITE, "foo"); Navigation nav = portal.getRootNavigation().addChild("default"); String id = nav.getObjectId(); Described described = nav.adapt(Described.class); described.setName("foo_name"); // assertEquals(new Described.State("foo_name", null), svc.getDescription(id)); } public void testSetDefaultDescription() throws Exception { DescriptionService svc = new DescriptionServiceImpl(mgr); MOPService mop = mgr.getPOMService(); Site portal = mop.getModel().getWorkspace().addSite(ObjectType.PORTAL_SITE, "foo"); Navigation nav = portal.getRootNavigation().addChild("default"); String id = nav.getObjectId(); // assertNull(svc.getDescription(id)); // svc.setDescription(id, new Described.State("foo_name", null)); // assertTrue(nav.isAdapted(Described.class)); Described described = nav.adapt(Described.class); assertEquals("foo_name", described.getName()); } public void testRemoveDefaultDescription() throws Exception { DescriptionService svc = new DescriptionServiceImpl(mgr); MOPService mop = mgr.getPOMService(); Site portal = mop.getModel().getWorkspace().addSite(ObjectType.PORTAL_SITE, "foo"); Navigation nav = portal.getRootNavigation().addChild("default"); String id = nav.getObjectId(); Described described = nav.adapt(Described.class); described.setName("foo_name"); // svc.setDescription(id, null); } public void testSetLocalizedDescription() throws Exception { DescriptionService svc = new DescriptionServiceImpl(mgr); MOPService mop = mgr.getPOMService(); Site portal = mop.getModel().getWorkspace().addSite(ObjectType.PORTAL_SITE, "foo"); Navigation nav = portal.getRootNavigation().addChild("default"); // svc.setDescription(nav.getObjectId(), Locale.ENGLISH, new Described.State("foo_english", null)); // assertTrue(nav.isAdapted(I18Nized.class)); I18Nized ized = nav.adapt(I18Nized.class); Described desc = ized.getMixin(Described.class, Locale.ENGLISH, false); assertNotNull(desc); assertEquals("foo_english", desc.getName()); } public void testSetInvalidLocaleDescription() throws Exception { DescriptionService svc = new DescriptionServiceImpl(mgr); MOPService mop = mgr.getPOMService(); Site portal = mop.getModel().getWorkspace().addSite(ObjectType.PORTAL_SITE, "foo"); Navigation nav = portal.getRootNavigation().addChild("default"); // try { svc.setDescription(nav.getObjectId(), new Locale("", "GB"), new Described.State("foo_invalid", null)); fail(); } catch (IllegalArgumentException e) { } // try { svc.setDescription(nav.getObjectId(), new Locale("en", "GB", "variant"), new Described.State("foo_invalid", null)); fail(); } catch (IllegalArgumentException e) { } } public void testAddLocalizedDescription() throws Exception { DescriptionService svc = new DescriptionServiceImpl(mgr); MOPService mop = mgr.getPOMService(); Site portal = mop.getModel().getWorkspace().addSite(ObjectType.PORTAL_SITE, "foo"); Navigation nav = portal.getRootNavigation().addChild("default"); I18Nized i18nized = nav.adapt(I18Nized.class); Described desc = i18nized.getMixin(Described.class, Locale.ENGLISH, true); desc.setName("add_english"); // svc.setDescription(nav.getObjectId(), Locale.FRENCH, new Described.State("add_french", null)); // assertTrue(nav.isAdapted(I18Nized.class)); I18Nized ized = nav.adapt(I18Nized.class); desc = ized.getMixin(Described.class, Locale.ENGLISH, false); assertNotNull(desc); assertEquals("add_english", desc.getName()); desc = ized.getMixin(Described.class, Locale.FRENCH, false); assertNotNull(desc); assertEquals("add_french", desc.getName()); } public void testGetDescriptions() throws Exception { DescriptionService svc = new DescriptionServiceImpl(mgr); MOPService mop = mgr.getPOMService(); Site portal = mop.getModel().getWorkspace().addSite(ObjectType.PORTAL_SITE, "foo"); Navigation nav = portal.getRootNavigation().addChild("default"); // assertNull(svc.getDescriptions(nav.getObjectId())); // I18Nized i18nized = nav.adapt(I18Nized.class); Described described = i18nized.getMixin(Described.class, Locale.ENGLISH, true); described.setName("foo_english"); described = i18nized.getMixin(Described.class, Locale.FRENCH, true); described.setName("foo_french"); // Map<Locale, Described.State> description = svc.getDescriptions(nav.getObjectId()); assertEquals(Tools.toSet(Locale.ENGLISH, Locale.FRENCH), description.keySet()); assertEquals(new Described.State("foo_english", null), description.get(Locale.ENGLISH)); assertEquals(new Described.State("foo_french", null), description.get(Locale.FRENCH)); } public void testSetDescriptions() throws Exception { DescriptionService svc = new DescriptionServiceImpl(mgr); MOPService mop = mgr.getPOMService(); Site portal = mop.getModel().getWorkspace().addSite(ObjectType.PORTAL_SITE, "foo"); Navigation nav = portal.getRootNavigation().addChild("default"); // assertNull(svc.getDescriptions(nav.getObjectId())); // Map<Locale, Described.State> description = new HashMap<Locale, Described.State>(); description.put(Locale.ENGLISH, new Described.State("bar_english", null)); description.put(Locale.FRENCH, new Described.State("bar_french", null)); svc.setDescriptions(nav.getObjectId(), description); // description = svc.getDescriptions(nav.getObjectId()); assertEquals(Tools.toSet(Locale.ENGLISH, Locale.FRENCH), description.keySet()); assertEquals(new Described.State("bar_english", null), description.get(Locale.ENGLISH)); assertEquals(new Described.State("bar_french", null), description.get(Locale.FRENCH)); // description = new HashMap<Locale, Described.State>(); description.put(Locale.ENGLISH, new Described.State("bar_english_2", null)); svc.setDescriptions(nav.getObjectId(), description); // description = svc.getDescriptions(nav.getObjectId()); assertEquals(Tools.toSet(Locale.ENGLISH), description.keySet()); assertEquals(new Described.State("bar_english_2", null), description.get(Locale.ENGLISH)); } public void testSetInvalidLocaleDescriptions() throws Exception { DescriptionService svc = new DescriptionServiceImpl(mgr); MOPService mop = mgr.getPOMService(); Site portal = mop.getModel().getWorkspace().addSite(ObjectType.PORTAL_SITE, "foo"); Navigation nav = portal.getRootNavigation().addChild("default"); // try { svc.setDescriptions(nav.getObjectId(), Collections.singletonMap(new Locale("", "GB"), new Described.State("bar_invalid", null))); fail(); } catch (IllegalArgumentException e) { } try { svc.setDescriptions(nav.getObjectId(), Collections.singletonMap(new Locale("en", "GB", "variant"), new Described.State("bar_invalid", null))); fail(); } catch (IllegalArgumentException e) { } } }