blob: 0ee81e12a199b765fb324a14e5a318bceafb2c5b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2015 Frank Becker and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Frank Becker - initial API and implementation
* Tasktop Technologies - improvements
*******************************************************************************/
package org.eclipse.mylyn.tasks.tests;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import junit.framework.TestCase;
import org.eclipse.jface.fieldassist.IContentProposal;
import org.eclipse.mylyn.commons.net.AuthenticationCredentials;
import org.eclipse.mylyn.commons.net.AuthenticationType;
import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
import org.eclipse.mylyn.internal.tasks.core.TaskTask;
import org.eclipse.mylyn.internal.tasks.ui.PersonContentProposal;
import org.eclipse.mylyn.internal.tasks.ui.PersonProposalProvider;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
import org.eclipse.mylyn.tasks.core.data.TaskAttributeMapper;
import org.eclipse.mylyn.tasks.core.data.TaskData;
import org.eclipse.mylyn.tasks.tests.connector.MockRepositoryConnector;
import org.eclipse.mylyn.tasks.tests.connector.MockRepositoryQuery;
import org.eclipse.mylyn.tasks.tests.connector.MockTask;
import org.eclipse.mylyn.tasks.ui.TasksUi;
/**
* @author Frank Becker
* @author Steffen Pingel
*/
public class PersonProposalProviderTest extends TestCase {
final private static Comparator<IContentProposal> CONTENT_COMPARATOR = new Comparator<IContentProposal>() {
public int compare(IContentProposal o1, IContentProposal o2) {
return o1.getContent().compareTo(o2.getContent());
}
};
@Override
protected void setUp() throws Exception {
TaskTestUtil.resetTaskListAndRepositories();
}
@Override
protected void tearDown() throws Exception {
TaskTestUtil.resetTaskListAndRepositories();
}
public void testGetProposalsNullParameters() {
PersonProposalProvider provider = new PersonProposalProvider((AbstractTask) null, (TaskData) null);
IContentProposal[] result = provider.getProposals("", 0);
assertNotNull(result);
assertEquals(0, result.length);
result = provider.getProposals(" ", 1);
assertNotNull(result);
assertEquals(0, result.length);
}
public void testGetProposalsNullContents() throws Exception {
PersonProposalProvider provider = new PersonProposalProvider(MockRepositoryConnector.REPOSITORY_URL,
MockRepositoryConnector.CONNECTOR_KIND);
try {
provider.getProposals(null, 0);
fail();
} catch (IllegalArgumentException e) {
// expected
}
}
public void testInvalidPosition() throws Exception {
PersonProposalProvider provider = new PersonProposalProvider(MockRepositoryConnector.REPOSITORY_URL,
MockRepositoryConnector.CONNECTOR_KIND);
try {
provider.getProposals("", -1);
fail();
} catch (IllegalArgumentException e) {
// expected
}
}
public void testGetProposalsTask() {
MockTask task = new MockTask(null, "1", null);
task.setOwner("foo");
PersonProposalProvider provider = new PersonProposalProvider(task, (TaskData) null);
assertProposalsForFoo(provider);
}
public void testGetProposalsTaskDataWithReporter() {
MockTask task = new MockTask(null, "1", null);
TaskData taskData = createMockTaskData();
taskData.getRoot().createMappedAttribute(TaskAttribute.USER_REPORTER).setValue("foo");
taskData.getRoot().getMappedAttribute(TaskAttribute.USER_REPORTER).getMetaData().setReadOnly(true);
PersonProposalProvider provider = new PersonProposalProvider(task, taskData);
assertProposalsForFoo(provider);
}
public void testGetProposalsTaskDataWithReporterPerson() {
MockTask task = new MockTask(null, "1", null);
TaskData taskData = createMockTaskData();
taskData.getRoot().createMappedAttribute(TaskAttribute.USER_REPORTER).setValue("foo");
taskData.getRoot().getMappedAttribute(TaskAttribute.USER_REPORTER).getMetaData().setReadOnly(true);
taskData.getRoot()
.getMappedAttribute(TaskAttribute.USER_REPORTER)
.getMetaData()
.setType(TaskAttribute.TYPE_PERSON);
PersonProposalProvider provider = new PersonProposalProvider(task, taskData);
assertProposalsForFoo(provider);
}
private TaskData createMockTaskData() {
return new TaskData(new TaskAttributeMapper(TaskTestUtil.createMockRepository()),
MockRepositoryConnector.CONNECTOR_KIND, MockRepositoryConnector.REPOSITORY_URL, "1");
}
static private void assertProposalsForFoo(PersonProposalProvider provider) {
IContentProposal[] result = provider.getProposals("", 0);
assertNotNull(result);
assertEquals(1, result.length);
assertEquals("foo", result[0].getContent());
result = provider.getProposals("a", 1);
assertNotNull(result);
assertEquals(0, result.length);
result = provider.getProposals("fo", 2);
assertNotNull(result);
assertEquals(1, result.length);
assertEquals("foo", result[0].getContent());
result = provider.getProposals("", 0);
assertNotNull(result);
assertEquals(1, result.length);
assertEquals("foo", result[0].getContent());
}
public void testGetProposalNoOwnerAndNoPerson() throws Exception {
PersonProposalProvider provider = new PersonProposalProvider(MockRepositoryConnector.REPOSITORY_URL,
MockRepositoryConnector.CONNECTOR_KIND);
IContentProposal[] result = provider.getProposals("", 0);
assertNotNull(result);
assertEquals(0, result.length);
}
public void testGetProposalsMultipleAddresses() {
IContentProposal[] result;
MockTask task = new MockTask(null, "1", null);
task.setOwner("foo");
PersonProposalProvider provider = new PersonProposalProvider(task, (TaskData) null);
result = provider.getProposals("f,xx", 1);
assertNotNull(result);
assertEquals(1, result.length);
assertEquals("foo,xx", result[0].getContent());
assertEquals("foo", result[0].getLabel());
assertEquals(3, result[0].getCursorPosition());
result = provider.getProposals("f xx", 1);
assertNotNull(result);
assertEquals(1, result.length);
assertEquals("foo xx", result[0].getContent());
assertEquals("foo", result[0].getLabel());
assertEquals(3, result[0].getCursorPosition());
result = provider.getProposals("a,xx", 1);
assertNotNull(result);
assertEquals(0, result.length);
result = provider.getProposals("xx,f", 4);
assertNotNull(result);
assertEquals(1, result.length);
assertEquals("xx,foo", result[0].getContent());
assertEquals("foo", result[0].getLabel());
assertEquals(6, result[0].getCursorPosition());
result = provider.getProposals("xx f", 4);
assertNotNull(result);
assertEquals(1, result.length);
assertEquals("xx foo", result[0].getContent());
assertEquals("foo", result[0].getLabel());
assertEquals(6, result[0].getCursorPosition());
result = provider.getProposals("xx,a", 4);
assertNotNull(result);
assertEquals(0, result.length);
result = provider.getProposals("xyz,f,yy", 4);
assertNotNull(result);
assertEquals(1, result.length);
assertEquals("xyz,foo,yy", result[0].getContent());
assertEquals("foo", result[0].getLabel());
assertEquals(7, result[0].getCursorPosition());
result = provider.getProposals("xx f yy", 4);
assertNotNull(result);
assertEquals(1, result.length);
assertEquals("xx foo yy", result[0].getContent());
assertEquals("foo", result[0].getLabel());
assertEquals(6, result[0].getCursorPosition());
result = provider.getProposals("xx,a,yy", 4);
assertNotNull(result);
assertEquals(0, result.length);
result = provider.getProposals("xx,,yy", 3);
assertNotNull(result);
assertEquals(1, result.length);
assertEquals("xx,foo,yy", result[0].getContent());
assertEquals("foo", result[0].getLabel());
assertEquals(6, result[0].getCursorPosition());
result = provider.getProposals("x yy", 2);
assertNotNull(result);
assertEquals(1, result.length);
assertEquals("x foo", result[0].getContent());
assertEquals("foo", result[0].getLabel());
assertEquals(5, result[0].getCursorPosition());
result = provider.getProposals(", ", 1);
assertNotNull(result);
assertEquals(1, result.length);
assertEquals(",foo ", result[0].getContent());
assertEquals("foo", result[0].getLabel());
assertEquals(4, result[0].getCursorPosition());
result = provider.getProposals(", ", 0);
assertNotNull(result);
assertEquals(1, result.length);
assertEquals("foo, ", result[0].getContent());
assertEquals("foo", result[0].getLabel());
assertEquals(3, result[0].getCursorPosition());
}
public void testConstructorRepositoryUrlKind() throws Exception {
MockTask task1 = new MockTask(MockRepositoryConnector.REPOSITORY_URL, "1");
task1.setOwner("foo");
PersonProposalProvider provider = new PersonProposalProvider(MockRepositoryConnector.REPOSITORY_URL,
MockRepositoryConnector.CONNECTOR_KIND);
MockRepositoryQuery query = new MockRepositoryQuery("summary");
TasksUiPlugin.getTaskList().addQuery(query);
TasksUiPlugin.getTaskList().addTask(task1, query);
IContentProposal[] result = provider.getProposals("f,xx", 1);
assertNotNull(result);
assertEquals(1, result.length);
assertEquals("foo,xx", result[0].getContent());
assertEquals("foo", result[0].getLabel());
assertEquals(3, result[0].getCursorPosition());
}
public void testCurrentUser() throws Exception {
TaskTask task = TaskTestUtil.createMockTask("1");
task.setOwner("user");
TasksUiPlugin.getTaskList().addTask(task);
TaskRepository repository = TaskTestUtil.createMockRepository();
repository.setCredentials(AuthenticationType.REPOSITORY, new AuthenticationCredentials("user", ""), false);
TasksUi.getRepositoryManager().addRepository(repository);
PersonProposalProvider provider = new PersonProposalProvider(MockRepositoryConnector.REPOSITORY_URL,
MockRepositoryConnector.CONNECTOR_KIND);
IContentProposal[] result = provider.getProposals("user", 1);
assertNotNull(result);
assertEquals(1, result.length);
assertTrue(((PersonContentProposal) result[0]).isCurrentUser());
}
public void testGetProposalByPrettyName() throws Exception {
Map<String, String> users = new HashMap<String, String>();
users.put("11", "foo");
users.put("22", "bar");
users.put("33", "far");
users.put("21", "boo");
MockTask task1 = new MockTask(null, "1", null);
task1.setOwner("11");
PersonProposalProvider provider = new PersonProposalProvider(task1, (TaskData) null, users);
IContentProposal[] result = provider.getProposals("", 0);
Arrays.sort(result, CONTENT_COMPARATOR);
assertNotNull(result);
assertEquals(4, result.length);
assertEquals("11", result[0].getContent());
assertEquals("21", result[1].getContent());
assertEquals("22", result[2].getContent());
assertEquals("33", result[3].getContent());
result = provider.getProposals("f", 1);
Arrays.sort(result, CONTENT_COMPARATOR);
assertNotNull(result);
assertEquals(2, result.length);
assertEquals("11", result[0].getContent());
assertEquals("33", result[1].getContent());
result = provider.getProposals("b", 1);
Arrays.sort(result, CONTENT_COMPARATOR);
assertNotNull(result);
assertEquals(2, result.length);
assertEquals("21", result[0].getContent());
assertEquals("22", result[1].getContent());
result = provider.getProposals("1", 1);
Arrays.sort(result, CONTENT_COMPARATOR);
assertNotNull(result);
assertEquals(1, result.length);
assertEquals("11", result[0].getContent());
result = provider.getProposals("3", 1);
Arrays.sort(result, CONTENT_COMPARATOR);
assertNotNull(result);
assertEquals(1, result.length);
assertEquals("33", result[0].getContent());
result = provider.getProposals("2", 1);
Arrays.sort(result, CONTENT_COMPARATOR);
assertNotNull(result);
assertEquals(2, result.length);
assertEquals("21", result[0].getContent());
assertEquals("22", result[1].getContent());
}
public void testGetProposalByOwnerId() throws Exception {
TaskTask task = TaskTestUtil.createMockTask("1");
task.setOwner("Joel User");
TasksUiPlugin.getTaskList().addTask(task);
TaskRepository repository = TaskTestUtil.createMockRepository();
TasksUi.getRepositoryManager().addRepository(repository);
PersonProposalProvider provider = new PersonProposalProvider(MockRepositoryConnector.REPOSITORY_URL,
MockRepositoryConnector.CONNECTOR_KIND);
IContentProposal[] result = provider.getProposals("joel", 1);
assertEquals(1, result.length);
assertEquals("Joel User", result[0].getLabel());
assertEquals("Joel User", result[0].getContent());
task.setOwnerId("joel.user@mylyn.org");
provider = new PersonProposalProvider(MockRepositoryConnector.REPOSITORY_URL,
MockRepositoryConnector.CONNECTOR_KIND);
result = provider.getProposals("joel", 1);
assertEquals(1, result.length);
assertEquals("Joel User <joel.user@mylyn.org>", result[0].getLabel());
assertEquals("joel.user@mylyn.org", result[0].getContent());
task.setOwnerId("");
task.setOwner("");
provider = new PersonProposalProvider(MockRepositoryConnector.REPOSITORY_URL,
MockRepositoryConnector.CONNECTOR_KIND);
result = provider.getProposals("joel", 1);
assertEquals(0, result.length);
}
}