blob: dbb6344f5510d865b79b915314d5330257f48ed1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010-2014 SAP AG and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.skalli.services.extension;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.eclipse.skalli.commons.CollectionUtils;
import org.eclipse.skalli.model.EntityBase;
import org.eclipse.skalli.model.Project;
import org.eclipse.skalli.model.User;
import org.eclipse.skalli.testutil.AssertUtils;
import org.eclipse.skalli.testutil.BundleManager;
import org.eclipse.skalli.testutil.TestExtension;
import org.eclipse.skalli.testutil.TestExtension1;
import org.eclipse.skalli.testutil.TestExtensionService;
import org.eclipse.skalli.testutil.TestExtensionService1;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.osgi.framework.ServiceRegistration;
@SuppressWarnings("nls")
public class PropertyLookupTest {
private List<ServiceRegistration<?>> serviceRegistrations = new ArrayList<ServiceRegistration<?>>();
@Before
public void setup() throws Exception {
serviceRegistrations.add(BundleManager.registerService(ExtensionService.class, new TestExtensionService(), null));
serviceRegistrations.add(BundleManager.registerService(ExtensionService.class, new TestExtensionService1(), null));
Assert.assertEquals(2, serviceRegistrations.size());
}
@After
public void tearDown() {
for (ServiceRegistration<?> serviceRegistration : serviceRegistrations) {
serviceRegistration.unregister();
}
}
private static final String PREFIX = "testext.";
private static final String PREFIX1 = "testext1.";
private static final String USER_PREFIX = "user.";
@Test
public void testMapMethods() throws Exception {
Project project = createProject();
Map<String,Object> props = new HashMap<String,Object>();
props.put("userId", "hugo");
PropertyLookup lookup = new PropertyLookup(project, props);
Assert.assertFalse(lookup.isEmpty());
Set<String> expectedKeys = CollectionUtils.asSet(
EntityBase.PROPERTY_UUID, EntityBase.PROPERTY_DELETED, EntityBase.PROPERTY_PARENT_ENTITY,
EntityBase.PROPERTY_PARENT_ENTITY_ID, EntityBase.PROPERTY_LAST_MODIFIED,
EntityBase.PROPERTY_LAST_MODIFIED_MILLIS,
EntityBase.PROPERTY_LAST_MODIFIED_BY, EntityBase.PROPERTY_FIRST_CHILD,
EntityBase.PROPERTY_NEXT_SIBLING,
Project.PROPERTY_PROJECTID, Project.PROPERTY_NAME, Project.PROPERTY_SHORT_NAME,
Project.PROPERTY_DESCRIPTION_FORMAT, Project.PROPERTY_DESCRIPTION, Project.PROPERTY_TEMPLATEID,
Project.PROPERTY_PARENT_PROJECT, Project.PROPERTY_LOGO_URL, Project.PROPERTY_PHASE,
Project.PROPERTY_REGISTERED,
PREFIX + EntityBase.PROPERTY_UUID, PREFIX + EntityBase.PROPERTY_DELETED,
PREFIX + EntityBase.PROPERTY_PARENT_ENTITY, PREFIX + EntityBase.PROPERTY_PARENT_ENTITY_ID,
PREFIX + EntityBase.PROPERTY_LAST_MODIFIED, PREFIX + EntityBase.PROPERTY_LAST_MODIFIED_MILLIS,
PREFIX + EntityBase.PROPERTY_LAST_MODIFIED_BY,
PREFIX + EntityBase.PROPERTY_FIRST_CHILD, PREFIX + EntityBase.PROPERTY_NEXT_SIBLING,
PREFIX + TestExtension.PROPERTY_BOOL, PREFIX + TestExtension.PROPERTY_ITEMS,
PREFIX + TestExtension.PROPERTY_STR,
PREFIX1 + EntityBase.PROPERTY_UUID, PREFIX1 + EntityBase.PROPERTY_DELETED,
PREFIX1 + EntityBase.PROPERTY_PARENT_ENTITY, PREFIX1 + EntityBase.PROPERTY_PARENT_ENTITY_ID,
PREFIX1 + EntityBase.PROPERTY_LAST_MODIFIED, PREFIX1 + EntityBase.PROPERTY_LAST_MODIFIED_MILLIS,
PREFIX1 + EntityBase.PROPERTY_LAST_MODIFIED_BY,
PREFIX1 + EntityBase.PROPERTY_FIRST_CHILD, PREFIX1 + EntityBase.PROPERTY_NEXT_SIBLING,
PREFIX1 + TestExtension.PROPERTY_BOOL, PREFIX1 + TestExtension.PROPERTY_ITEMS,
PREFIX1 + TestExtension.PROPERTY_STR,
"userId");
Assert.assertEquals(expectedKeys.size(), lookup.size());
AssertUtils.assertEqualsAnyOrder("keySet", expectedKeys, lookup.keySet());
Assert.assertEquals("hugo", lookup.get("userId"));
assertProjectLookup(lookup);
}
@Test
public void testPutAll() {
Project project = createProject();
User user = createUser();
Map<String,Object> props = new HashMap<String,Object>();
props.put(User.PROPERTY_USERID, user.getUserId());
PropertyLookup lookup = new PropertyLookup(props);
lookup.putAllProperties(project, "");
lookup.putAllProperties(user, USER_PREFIX);
assertProjectLookup(lookup);
Assert.assertEquals(user.getUserId(), lookup.get(User.PROPERTY_USERID));
Assert.assertEquals(user.getUserId(), lookup.get(USER_PREFIX + User.PROPERTY_USERID));
Assert.assertEquals(user.getFirstname(), lookup.get(USER_PREFIX + User.PROPERTY_FIRSTNAME));
Assert.assertEquals(user.getLastname(), lookup.get(USER_PREFIX + User.PROPERTY_LASTNAME));
Assert.assertEquals(user.getEmail(), lookup.get(USER_PREFIX + User.PROPERTY_EMAIL));
}
@SuppressWarnings("unchecked")
private void assertProjectLookup(PropertyLookup lookup) {
Assert.assertEquals("bla.blubb", lookup.get(Project.PROPERTY_PROJECTID));
Assert.assertEquals("Blubber", lookup.get(Project.PROPERTY_NAME));
Assert.assertEquals("text", lookup.get(Project.PROPERTY_DESCRIPTION_FORMAT));
Assert.assertEquals("foobar", lookup.get(PREFIX + TestExtension.PROPERTY_STR));
Assert.assertEquals("hubab", lookup.get(PREFIX1 + TestExtension.PROPERTY_STR));
AssertUtils.assertEquals("get", (List<String>)lookup.get(PREFIX + TestExtension.PROPERTY_ITEMS), "a", "b", "c");
AssertUtils.assertEquals("get", (List<String>)lookup.get(PREFIX + TestExtension.PROPERTY_ITEMS), "a", "b", "c");
Assert.assertTrue(((List<String>)lookup.get(PREFIX1 + TestExtension1.PROPERTY_ITEMS)).isEmpty());
Assert.assertNull(lookup.get(Project.PROPERTY_DESCRIPTION));
Assert.assertNull(lookup.get("testext.abc"));
Assert.assertNull(lookup.get(null));
Assert.assertNull(lookup.get(""));
}
@Test
public void testLookUp() throws Exception {
Project project = createProject();
Map<String,Object> props = new HashMap<String,Object>();
props.put("userId", "hugo");
PropertyLookup lookup = new PropertyLookup(project, props);
Assert.assertEquals("bla.blubb", lookup.lookup(Project.PROPERTY_PROJECTID));
Assert.assertEquals("Blubber", lookup.lookup(Project.PROPERTY_NAME));
Assert.assertEquals("foobar", lookup.lookup("testext." + TestExtension.PROPERTY_STR));
Assert.assertEquals("a,b,c", lookup.lookup("testext." + TestExtension.PROPERTY_ITEMS));
Assert.assertEquals("hugo", lookup.lookup("userId"));
Assert.assertNull(lookup.lookup(Project.PROPERTY_DESCRIPTION));
Assert.assertNull(lookup.lookup("testext.abc"));
Assert.assertNull(lookup.lookup(null));
Assert.assertNull(lookup.lookup(""));
}
@Test
public void testLookUpNoProject() throws Exception {
Map<String,Object> props = new HashMap<String,Object>();
props.put("userId", "hugo");
PropertyLookup lookup = new PropertyLookup(null, props);
Assert.assertEquals("hugo", lookup.lookup("userId"));
Assert.assertNull(lookup.lookup(Project.PROPERTY_PROJECTID));
Assert.assertNull(lookup.lookup("testext.abc"));
Assert.assertNull(lookup.lookup(null));
Assert.assertNull(lookup.lookup(""));
}
@Test
public void testLookUpNoCustomProps() throws Exception {
Project project = createProject();
PropertyLookup lookup = new PropertyLookup(project);
Assert.assertNull(lookup.lookup("userId"));
Assert.assertEquals("bla.blubb", lookup.lookup(Project.PROPERTY_PROJECTID));
Assert.assertNull(lookup.lookup("testext.abc"));
Assert.assertNull(lookup.lookup(null));
Assert.assertNull(lookup.lookup(""));
}
private Project createProject() {
Project project = new Project("bla.blubb", null, "Blubber");
TestExtension ext = new TestExtension();
ext.setStr("foobar");
ext.addItem("a");
ext.addItem("b");
ext.addItem("c");
project.addExtension(ext);
TestExtension1 ext1 = new TestExtension1();
ext1.setStr("hubab");
project.addExtension(ext1);
return project;
}
private User createUser() {
return new User("homer", "Homer", "Simpson", "homer@springfield.org");
}
}