/*******************************************************************************
* 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.validators;
import static org.junit.Assert.*;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.SortedSet;
import org.eclipse.skalli.model.ExtensibleEntityBase;
import org.eclipse.skalli.model.Issue;
import org.eclipse.skalli.model.Member;
import org.eclipse.skalli.model.PropertyName;
import org.eclipse.skalli.model.Severity;
import org.eclipse.skalli.model.User;
import org.eclipse.skalli.services.user.UserService;
import org.eclipse.skalli.testutil.HashMapUserService;
import org.eclipse.skalli.testutil.TestUUIDs;
import org.junit.Before;
import org.junit.Test;
@SuppressWarnings("nls")
public class MembersValidatorTest {
private static class TestExtension extends ExtensibleEntityBase {
Set<Member> members = new HashSet<Member>();
@PropertyName
public static final String PROPERTY_MEMBERS = "members";
public Set<Member> getMembers() {
return members;
}
}
private static class LocalMembersValidator extends MembersValidator {
private UserService userService;
public LocalMembersValidator(Severity severity, UserService userService, String caption) {
super(severity, TestExtension.class, TestExtension.PROPERTY_MEMBERS, caption);
this.userService = userService;
}
@Override
protected UserService getUserService() {
return userService;
}
}
private static final String MSG_PREFIX_WITH_CAPTION = "Members list references user ''{0}''";
private static final String MSG_PREFIX_NO_CAPTION =
"Property ''" + TestExtension.PROPERTY_MEMBERS + "'' references user ''{0}''";
private List<Member> members;
private User[] users = new User[3];
private HashMapUserService userService;
@Before
public void before() {
users[0] = new User("jdoe", "John", "Doe", "jdoe@example.org");
users[1] = new User("homer", "Homer", "Simpson", "homer@example.org");
users[2] = new User("marge", "Marge", "Simpson", "marge@example.org");
userService = new HashMapUserService();
for (User user: users) {
userService.put(user.getUserId(), user);
}
members = new ArrayList<Member>();
members.add(new Member(users[0].getUserId()));
members.add(new Member(users[2].getUserId()));
}
@Test
public void testAllMembersKnown() throws Exception {
LocalMembersValidator validator = new LocalMembersValidator(Severity.WARNING, userService, "Members");
SortedSet<Issue> issues = validator.validate(TestUUIDs.TEST_UUIDS[0], members, Severity.INFO);
assertTrue(issues.isEmpty());
}
@Test
public void testUnknownMember() throws Exception {
members.add(new Member("unknown"));
LocalMembersValidator validator = new LocalMembersValidator(Severity.WARNING, userService, "Members");
SortedSet<Issue> issues = validator.validate(TestUUIDs.TEST_UUIDS[0], members, Severity.INFO);
assertIssues(issues, 1, MSG_PREFIX_WITH_CAPTION, "unknown");
}
@Test
public void testMultipleUnknownMembers() throws Exception {
members.add(new Member("unknown1"));
members.add(new Member("unknown2"));
members.add(new Member("unknown3"));
LocalMembersValidator validator = new LocalMembersValidator(Severity.WARNING, userService, "Members");
SortedSet<Issue> issues = validator.validate(TestUUIDs.TEST_UUIDS[0], members, Severity.INFO);
assertIssues(issues, 3, MSG_PREFIX_WITH_CAPTION, "unknown1", "unknown2", "unknown3");
}
@Test
public void testNoPropertyCaption() throws Exception {
members.add(new Member("unknown"));
LocalMembersValidator validator = new LocalMembersValidator(Severity.WARNING, userService, null);
SortedSet<Issue> issues = validator.validate(TestUUIDs.TEST_UUIDS[0], members, Severity.INFO);
assertIssues(issues, 1, MSG_PREFIX_NO_CAPTION, "unknown");
}
@Test
public void testSeverity() throws Exception {
members.add(new Member("unknown"));
LocalMembersValidator validator = new LocalMembersValidator(Severity.WARNING, userService, null);
SortedSet<Issue> issues = validator.validate(TestUUIDs.TEST_UUIDS[0], members, Severity.INFO);
assertFalse(issues.isEmpty());
issues = validator.validate(TestUUIDs.TEST_UUIDS[0], members, Severity.WARNING);
assertFalse(issues.isEmpty());
issues = validator.validate(TestUUIDs.TEST_UUIDS[0], members, Severity.ERROR);
assertTrue(issues.isEmpty());
issues = validator.validate(TestUUIDs.TEST_UUIDS[0], members, Severity.FATAL);
assertTrue(issues.isEmpty());
}
@Test
public void testNoUserService() throws Exception {
members.add(new Member("unknown"));
LocalMembersValidator validator = new LocalMembersValidator(Severity.WARNING, null, null);
SortedSet<Issue> issues = validator.validate(TestUUIDs.TEST_UUIDS[0], members, Severity.INFO);
assertTrue(issues.isEmpty());
}
@Test
public void testNoCollection() throws Exception {
LocalMembersValidator validator = new LocalMembersValidator(Severity.WARNING, userService, null);
SortedSet<Issue> issues = validator.validate(TestUUIDs.TEST_UUIDS[0], new Member("unknown"), Severity.INFO);
assertEquals(1, issues.size());
assertIssue(issues.first(), 0, MSG_PREFIX_NO_CAPTION, "unknown");
}
private void assertIssues(SortedSet<Issue> issues, int expectedNumberIssues,
String msgPrefix, String ... unknownMembers) {
assertEquals(expectedNumberIssues, issues.size());
int item = 0;
for (Issue issue: issues) {
assertIssue(issue, 2 + item, msgPrefix, unknownMembers[item]);
++item;
}
}
private void assertIssue(Issue issue, int item, String msgPrefix, String unknownMember) {
assertEquals(TestUUIDs.TEST_UUIDS[0], issue.getEntityId());
assertEquals(TestExtension.class, issue.getExtension());
assertEquals(TestExtension.PROPERTY_MEMBERS, issue.getPropertyId());
assertEquals(LocalMembersValidator.class, issue.getIssuer());
assertEquals(item, issue.getItem());
assertTrue(issue.getMessage().startsWith(MessageFormat.format(msgPrefix, unknownMember)));
}
}