blob: 3912851c88a91f42eac7adcc2322659b94378c12 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2014 Tasktop Technologies 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:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.bugzilla.tests;
import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.mylyn.bugzilla.tests.support.BugzillaFixture;
import org.eclipse.mylyn.bugzilla.tests.support.BugzillaTestSupportUtil;
import org.eclipse.mylyn.commons.net.AuthenticationCredentials;
import org.eclipse.mylyn.commons.net.AuthenticationType;
import org.eclipse.mylyn.commons.sdk.util.CommonTestUtil.PrivilegeLevel;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaAttribute;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaClient;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaCorePlugin;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaOperation;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaStatus;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaTaskDataCollector;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaTaskDataHandler;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaUserMatchResponse;
import org.eclipse.mylyn.internal.bugzilla.core.BugzillaVersion;
import org.eclipse.mylyn.internal.bugzilla.core.IBugzillaConstants;
import org.eclipse.mylyn.internal.bugzilla.core.RepositoryConfiguration;
import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery;
import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryLocation;
import org.eclipse.mylyn.internal.tasks.core.sync.SynchronizationSession;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.internal.tasks.ui.util.AttachmentUtil;
import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.core.ITask.SynchronizationState;
import org.eclipse.mylyn.tasks.core.RepositoryResponse;
import org.eclipse.mylyn.tasks.core.RepositoryResponse.ResponseKind;
import org.eclipse.mylyn.tasks.core.TaskMapping;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.core.data.ITaskDataWorkingCopy;
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.core.data.TaskDataCollector;
import org.eclipse.mylyn.tasks.core.data.TaskDataModel;
import org.eclipse.mylyn.tasks.core.data.TaskOperation;
import org.eclipse.mylyn.tasks.ui.TasksUi;
import org.eclipse.mylyn.tasks.ui.TasksUiUtil;
/**
* @author Rob Elves
* @author Frank Becker
*/
public class BugzillaRepositoryConnectorTest extends AbstractBugzillaTest {
public void testSingleRetrievalFailure() throws CoreException {
try {
connector.getTaskData(repository, "99999", new NullProgressMonitor());
fail("Invalid id error should have resulted");
} catch (CoreException e) {
if (BugzillaFixture.current().getBugzillaVersion().compareMajorMinorOnly(BugzillaVersion.BUGZILLA_4_4) > 0) {
assertTrue(e.getStatus().getMessage().contains(IBugzillaConstants.ERROR_MSG_INVALID_BUG_ID));
} else {
assertTrue(e.getStatus().getMessage().contains(IBugzillaConstants.ERROR_MSG_NOT_FOUND_BUG_ID));
}
}
}
public void testAliasRetrievalFailure() throws CoreException {
try {
connector.getTaskData(repository, "Hugo", new NullProgressMonitor());
fail("Invalid id error should have resulted");
} catch (CoreException e) {
assertTrue(e.getStatus().getMessage().contains(IBugzillaConstants.ERROR_MSG_INVALID_BUG_ID));
}
}
public void testAliasRetrieval() throws Exception {
String taskId = harness.taskAliasExists();
if (taskId == null) {
taskId = harness.createAliasTask();
}
String usebugaliases = BugzillaFixture.current().getProperty("usebugaliases");
boolean bugAliases = Boolean.parseBoolean(usebugaliases);
try {
TaskData td = connector.getTaskData(repository, "Fritz", new NullProgressMonitor());
if (BugzillaFixture.current().getBugzillaVersion().compareMajorMinorOnly(BugzillaVersion.BUGZILLA_4_4) >= 0
|| bugAliases) {
assertNotNull(td);
} else {
fail("testAliasRetrieval: never reach this! CoreException expected");
}
} catch (CoreException e) {
if (BugzillaFixture.current().getBugzillaVersion().compareMajorMinorOnly(BugzillaVersion.BUGZILLA_4_4) < 0
&& !bugAliases) {
assertTrue(e.getStatus().getMessage().contains(IBugzillaConstants.ERROR_MSG_INVALID_BUG_ID));
} else {
fail("testAliasRetrieval: never reach this! no CoreException expected");
}
}
}
public void testAliasMultiRetrieval() throws Exception {
String taskId = harness.taskAliasExists();
if (taskId == null) {
taskId = harness.createAliasTask();
}
taskId = harness.taskAlias2Exists();
if (taskId == null) {
taskId = harness.createAliasTask2();
}
Set<String> taskIds = new HashSet<String>();
taskIds.add("Hugo");
taskIds.add("Fritz");
taskIds.add(taskId);
final Map<String, TaskData> results = new HashMap<String, TaskData>();
final Map<String, IStatus> failed = new HashMap<String, IStatus>();
TaskDataCollector collector = new TaskDataCollector() {
@Override
public void accept(TaskData taskData) {
results.put(taskData.getTaskId(), taskData);
}
@Override
public void failed(String taskId, IStatus status) {
failed.put(taskId, status);
}
};
connector.getTaskDataHandler().getMultiTaskData(repository, taskIds, collector, new NullProgressMonitor());
String usebugaliases = BugzillaFixture.current().getProperty("usebugaliases");
if (BugzillaFixture.current().getBugzillaVersion().compareMajorMinorOnly(BugzillaVersion.BUGZILLA_4_4) >= 0
|| Boolean.parseBoolean(usebugaliases)) {
assertEquals(2, results.size());
assertEquals(1, failed.size());
} else {
assertEquals(1, results.size());
assertEquals(2, failed.size());
}
}
public void testMultiRetrievalFailure() throws Exception {
TaskData taskData1 = BugzillaFixture.current().createTask(PrivilegeLevel.USER, null, null);
TaskData taskData2 = BugzillaFixture.current().createTask(PrivilegeLevel.USER, null, null);
ITask task1 = TasksUi.getRepositoryModel().createTask(repository, taskData1.getTaskId());
ITask taskX = TasksUi.getRepositoryModel().createTask(repository, "99999");
ITask task2 = TasksUi.getRepositoryModel().createTask(repository, taskData2.getTaskId());
TasksUiPlugin.getTaskList().addTask(task1);
TasksUiPlugin.getTaskList().addTask(taskX);
TasksUiPlugin.getTaskList().addTask(task2);
Set<ITask> tasks = new HashSet<ITask>();
tasks.add(task1);
tasks.add(taskX);
tasks.add(task2);
TasksUiInternal.synchronizeTasks(connector, tasks, true, null);
//TasksUiPlugin.getTaskDataManager().setTaskRead(task, true);
assertNotNull(TasksUiPlugin.getTaskDataManager().getTaskData(task1));
assertNotNull(TasksUiPlugin.getTaskDataManager().getTaskData(task2));
assertNull(TasksUiPlugin.getTaskDataManager().getTaskData(taskX));
assertNull(((AbstractTask) task1).getStatus());
assertNull(((AbstractTask) task2).getStatus());
assertEquals(IBugzillaConstants.ERROR_MSG_NO_DATA_RETRIEVED, ((AbstractTask) taskX).getStatus().getMessage());
}
// FIXME: How to test with dynamic fixtures/bugs?
// public void testBugWithoutDescription218() throws Exception {
// init218();
// doBugWithoutDescription("57");
// }
//
// public void testBugWithoutDescription222() throws Exception {
// init222();
// doBugWithoutDescription("391");
// }
//
// public void testBugWithoutDescription32() throws Exception {
// init32();
// doBugWithoutDescription("293");
// }
//
// private void doBugWithoutDescription(String taskNumber) throws CoreException {
// ITask task = generateLocalTaskAndDownload(taskNumber);
// assertNotNull(task);
// TaskDataModel model = createModel(task);
// TaskData taskData = model.getTaskData();
// assertNotNull(taskData);
// int numComment = taskData.getAttributeMapper().getAttributesByType(taskData, TaskAttribute.TYPE_COMMENT).size();
//
// String newCommentText = "new Comment for Bug Without an Description " + (new Date()).toString();
// TaskAttribute comment = taskData.getRoot().getMappedAttribute(TaskAttribute.COMMENT_NEW);
// comment.setValue(newCommentText);
// Set<TaskAttribute> changed = new HashSet<TaskAttribute>();
// changed.add(comment);
//
// // Submit changes
// submit(task, taskData, changed);
// task = generateLocalTaskAndDownload(taskNumber);
// assertNotNull(task);
// model = createModel(task);
// taskData = model.getTaskData();
// assertNotNull(taskData);
// int numCommentNew = taskData.getAttributeMapper()
// .getAttributesByType(taskData, TaskAttribute.TYPE_COMMENT)
// .size();
// assertEquals(numComment + 1, numCommentNew);
// }
//testReassign Bugs
//Version BugNum assigned reporter
//2.22 92 user@mylar.eclipse.org tests@mylar.eclipse.org
//3.0 5 tests@mylar.eclipse.org tests2@mylar.eclipse.org
//3.1 1 rob.elves@eclipse.org tests@mylar.eclipse.org
// public void testReassign() throws Exception {
// TaskData taskData = BugzillaFixture.current().createTask(PrivilegeLevel.USER, null, null);
// assertNotNull(taskData);
// String taskNumber = taskData.getTaskId();
// doReassignOld(taskNumber, "user@mylar.eclipse.org");
// }
//
// public void testReassign30() throws CoreException {
// init30();
// String taskNumber = "5";
// doReassignOld(taskNumber, "tests@mylyn.eclipse.org");
// }
//
// public void testReassign32() throws CoreException {
// init32();
// String taskNumber = "1";
//
// // Get the task
// ITask task = generateLocalTaskAndDownload(taskNumber);
// assertNotNull(task);
// TaskDataModel model = createModel(task);
// TaskData taskData = model.getTaskData();
// assertNotNull(taskData);
// TaskMapper mapper = new TaskMapper(taskData);
//
// if (mapper.getOwner().equals("rob.elves@eclipse.org")) {
// assertEquals("rob.elves@eclipse.org", mapper.getOwner());
// reassingToUser31(task, taskData);
// task = generateLocalTaskAndDownload(taskNumber);
// assertNotNull(task);
// model = createModel(task);
// taskData = model.getTaskData();
// assertNotNull(taskData);
// mapper = new TaskMapper(taskData);
// assertEquals("tests2@mylyn.eclipse.org", mapper.getOwner());
//
// reassignToDefault31(task, taskData);
// task = generateLocalTaskAndDownload(taskNumber);
// assertNotNull(task);
// model = createModel(task);
// taskData = model.getTaskData();
// assertNotNull(taskData);
// mapper = new TaskMapper(taskData);
// assertEquals("rob.elves@eclipse.org", mapper.getOwner());
// } else if (mapper.getOwner().equals("tests2@mylyn.eclipse.org")) {
// assertEquals("tests2@mylyn.eclipse.org", mapper.getOwner());
// reassignToDefault31(task, taskData);
// task = generateLocalTaskAndDownload(taskNumber);
// assertNotNull(task);
// model = createModel(task);
// taskData = model.getTaskData();
// assertNotNull(taskData);
// mapper = new TaskMapper(taskData);
// assertEquals("rob.elves@eclipse.org", mapper.getOwner());
//
// reassingToUser31(task, taskData);
// task = generateLocalTaskAndDownload(taskNumber);
// assertNotNull(task);
// model = createModel(task);
// taskData = model.getTaskData();
// assertNotNull(taskData);
// mapper = new TaskMapper(taskData);
// assertEquals("tests2@mylyn.eclipse.org", mapper.getOwner());
// } else {
// fail("Bug with unexpected user assigned");
// }
// }
//
// private void reassignToDefault31(ITask task, TaskData taskData) throws CoreException {
// // Modify it (reassignbycomponent)
// String newCommentText = "BugzillaRepositoryClientTest.testReassign31(): reassignbycomponent "
// + (new Date()).toString();
// TaskAttribute comment = taskData.getRoot().getMappedAttribute(TaskAttribute.COMMENT_NEW);
// comment.setValue(newCommentText);
// Set<TaskAttribute> changed = new HashSet<TaskAttribute>();
// changed.add(comment);
//
// TaskAttribute assignee = taskData.getRoot().getAttribute(BugzillaAttribute.SET_DEFAULT_ASSIGNEE.getKey());
// assignee.setValue("1");
// changed.add(assignee);
// // Submit changes
// submit(task, taskData, changed);
// }
//
// private void reassingToUser31(ITask task, TaskData taskData) throws CoreException {
// // Modify it (reassign to tests2@mylyn.eclipse.org)
// String newCommentText = "BugzillaRepositoryClientTest.testReassign31(): reassign " + (new Date()).toString();
// TaskAttribute comment = taskData.getRoot().getMappedAttribute(TaskAttribute.COMMENT_NEW);
// comment.setValue(newCommentText);
// Set<TaskAttribute> changed = new HashSet<TaskAttribute>();
// changed.add(comment);
//
// TaskAttribute assignedAttribute = taskData.getRoot().getAttribute(BugzillaAttribute.ASSIGNED_TO.getKey());
// assignedAttribute.setValue("tests2@mylyn.eclipse.org");
// changed.add(assignedAttribute);
//
// // Submit changes
// submit(task, taskData, changed);
// }
//
// private void doReassignOld(String taskNumber, String defaultAssignee) throws CoreException {
// // Get the task
// ITask task = generateLocalTaskAndDownload(taskNumber);
// assertNotNull(task);
// TaskDataModel model = createModel(task);
// TaskData taskData = model.getTaskData();
// assertNotNull(taskData);
// TaskMapper mapper = new TaskMapper(taskData);
//
// if (mapper.getOwner().equals(defaultAssignee)) {
// assertEquals(defaultAssignee, mapper.getOwner());
// reassingToUserOld(task, taskData);
// task = generateLocalTaskAndDownload(taskNumber);
// assertNotNull(task);
// model = createModel(task);
// taskData = model.getTaskData();
// assertNotNull(taskData);
// mapper = new TaskMapper(taskData);
// assertEquals("tests2@mylyn.eclipse.org", mapper.getOwner());
//
// reassignToDefaultOld(task, taskData);
// task = generateLocalTaskAndDownload(taskNumber);
// assertNotNull(task);
// model = createModel(task);
// taskData = model.getTaskData();
// assertNotNull(taskData);
// mapper = new TaskMapper(taskData);
// assertEquals(defaultAssignee, mapper.getOwner());
// } else if (mapper.getOwner().equals("tests2@mylyn.eclipse.org")) {
// assertEquals("tests2@mylyn.eclipse.org", mapper.getOwner());
// reassignToDefaultOld(task, taskData);
// task = generateLocalTaskAndDownload(taskNumber);
// assertNotNull(task);
// model = createModel(task);
// taskData = model.getTaskData();
// assertNotNull(taskData);
// mapper = new TaskMapper(taskData);
// assertEquals(defaultAssignee, mapper.getOwner());
//
// reassingToUserOld(task, taskData);
// task = generateLocalTaskAndDownload(taskNumber);
// assertNotNull(task);
// model = createModel(task);
// taskData = model.getTaskData();
// assertNotNull(taskData);
// mapper = new TaskMapper(taskData);
// assertEquals("tests2@mylyn.eclipse.org", mapper.getOwner());
// } else {
// fail("Bug with unexpected user assigned");
// }
// }
//
// private void reassignToDefaultOld(ITask task, TaskData taskData) throws CoreException {
// // Modify it (reassignbycomponent)
// String newCommentText = "BugzillaRepositoryClientTest.testReassignOld(): reassignbycomponent "
// + (new Date()).toString();
// TaskAttribute comment = taskData.getRoot().getMappedAttribute(TaskAttribute.COMMENT_NEW);
// comment.setValue(newCommentText);
// Set<TaskAttribute> changed = new HashSet<TaskAttribute>();
// changed.add(comment);
// TaskAttribute selectedOperationAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.OPERATION);
// TaskOperation.applyTo(selectedOperationAttribute, BugzillaOperation.reassignbycomponent.toString(),
// BugzillaOperation.reassignbycomponent.getLabel());
// changed.add(selectedOperationAttribute);
//
// // Submit changes
// submit(task, taskData, null);
// }
//
// private void reassingToUserOld(ITask task, TaskData taskData) throws CoreException {
// // Modify it (reassign to tests2@mylyn.eclipse.org)
// String newCommentText = "BugzillaRepositoryClientTest.testReassignOld(): reassign " + (new Date()).toString();
// TaskAttribute comment = taskData.getRoot().getMappedAttribute(TaskAttribute.COMMENT_NEW);
// comment.setValue(newCommentText);
// Set<TaskAttribute> changed = new HashSet<TaskAttribute>();
// changed.add(comment);
// TaskAttribute selectedOperationAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.OPERATION);
// TaskOperation.applyTo(selectedOperationAttribute, BugzillaOperation.reassign.toString(),
// BugzillaOperation.reassign.getLabel());
// TaskAttribute assignedAttribute = taskData.getRoot().getAttribute("reassignInput");
// assignedAttribute.setValue("tests2@mylyn.eclipse.org");
// changed.add(selectedOperationAttribute);
// changed.add(assignedAttribute);
//
// // Submit changes
// submit(task, taskData, null);
// }
// FIXME
// public void testStdWorkflow222() throws Exception {
// init222();
// doStdWorkflow("101");
// }
//
public void testStdWorkflow() throws Exception {
String taskId = harness.taskCfBugIdExists();
if (taskId == null) {
taskId = harness.createCfBugIdTask();
}
if (BugzillaFixture.current().getBugzillaVersion().compareMajorMinorOnly(BugzillaVersion.BUGZILLA_4_0) < 0) {
if (!BugzillaFixture.current().isCustomWorkflow() && !BugzillaFixture.current().isCustomWorkflowAndStatus()) {
doStdWorkflow32(taskId);
}
} else {
doStdWorkflow40_1(taskId);
doStdWorkflow40_2(taskId);
}
}
private void doStdWorkflow40_1(String dupBugID) throws Exception {
final TaskMapping taskMappingInit = new TaskMapping() {
@Override
public String getProduct() {
return "TestProduct";
}
};
final TaskMapping taskMappingSelect = new TaskMapping() {
@Override
public String getComponent() {
return "TestComponent";
}
@Override
public String getSummary() {
return "test the std workflow";
}
@Override
public String getDescription() {
return "The Description of the std workflow task";
}
};
final TaskData[] taskDataNew = new TaskData[1];
// create Task
taskDataNew[0] = TasksUiInternal.createTaskData(repository, taskMappingInit, taskMappingSelect, null);
ITask taskNew = TasksUiUtil.createOutgoingNewTask(taskDataNew[0].getConnectorKind(),
taskDataNew[0].getRepositoryUrl());
ITaskDataWorkingCopy workingCopy = TasksUi.getTaskDataManager().createWorkingCopy(taskNew, taskDataNew[0]);
Set<TaskAttribute> changed = new HashSet<TaskAttribute>();
workingCopy.save(changed, null);
RepositoryResponse response = BugzillaFixture.current().submitTask(taskDataNew[0], client);//connector.getTaskDataHandler().postTaskData(repository, taskDataNew[0], changed,
//new NullProgressMonitor());
((AbstractTask) taskNew).setSubmitting(true);
assertNotNull(response);
assertEquals(ResponseKind.TASK_CREATED.toString(), response.getReposonseKind().toString());
String taskId = response.getTaskId();
// change Status from CONFIRMED -> IN_PROGRESS
ITask task = generateLocalTaskAndDownload(taskId);
assertNotNull(task);
TaskDataModel model = createModel(task);
TaskData taskData = model.getTaskData();
assertNotNull(taskData);
TaskAttribute statusAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.STATUS);
assertEquals("CONFIRMED", statusAttribute.getValue());
TaskAttribute selectedOperationAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.OPERATION);
TaskAttribute operationAttribute = taskData.getRoot().getAttribute(
TaskAttribute.PREFIX_OPERATION + BugzillaOperation.in_progress.toString());
TaskAttribute operationAttributeUppercase = taskData.getRoot().getAttribute(
TaskAttribute.PREFIX_OPERATION + BugzillaOperation.in_progress.toString().toUpperCase());
TaskOperation.applyTo(selectedOperationAttribute, operationAttribute != null
? operationAttribute.getValue()
: operationAttributeUppercase.getValue(), BugzillaOperation.in_progress.getLabel());
model.attributeChanged(selectedOperationAttribute);
changed.clear();
changed.add(selectedOperationAttribute);
workingCopy.save(changed, null);
response = BugzillaFixture.current().submitTask(taskData, client);
assertEquals(ResponseKind.TASK_UPDATED.toString(), response.getReposonseKind().toString());
// change Status from IN_PROGRESS -> RESOLVED DUPLICATE
task = generateLocalTaskAndDownload(taskId);
assertNotNull(task);
model = createModel(task);
taskData = model.getTaskData();
assertNotNull(taskData);
statusAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.STATUS);
assertEquals("IN_PROGRESS", statusAttribute.getValue());
selectedOperationAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.OPERATION);
TaskOperation.applyTo(selectedOperationAttribute, BugzillaOperation.duplicate.toString(),
BugzillaOperation.duplicate.getLabel());
TaskAttribute duplicateAttribute = taskData.getRoot().getAttribute("dup_id");
duplicateAttribute.setValue(dupBugID);
model.attributeChanged(selectedOperationAttribute);
model.attributeChanged(duplicateAttribute);
changed.clear();
changed.add(selectedOperationAttribute);
changed.add(duplicateAttribute);
workingCopy.save(changed, null);
response = BugzillaFixture.current().submitTask(taskData, client);
assertNotNull(response);
assertEquals(ResponseKind.TASK_UPDATED.toString(), response.getReposonseKind().toString());
// change Status from RESOLVED DUPLICATE -> VERIFIED
task = generateLocalTaskAndDownload(taskId);
assertNotNull(task);
model = createModel(task);
taskData = model.getTaskData();
assertNotNull(taskData);
statusAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.STATUS);
assertEquals("RESOLVED", statusAttribute.getValue());
TaskAttribute resolution = taskData.getRoot().getMappedAttribute(TaskAttribute.RESOLUTION);
assertEquals("DUPLICATE", resolution.getValue());
selectedOperationAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.OPERATION);
TaskOperation.applyTo(selectedOperationAttribute, BugzillaOperation.verify.toString(),
BugzillaOperation.verify.getLabel());
model.attributeChanged(selectedOperationAttribute);
changed.clear();
changed.add(selectedOperationAttribute);
workingCopy.save(changed, null);
response = BugzillaFixture.current().submitTask(taskData, client);
assertNotNull(response);
assertEquals(ResponseKind.TASK_UPDATED.toString(), response.getReposonseKind().toString());
// change Status from VERIFIED -> CONFIRMED
task = generateLocalTaskAndDownload(taskId);
assertNotNull(task);
model = createModel(task);
taskData = model.getTaskData();
assertNotNull(taskData);
statusAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.STATUS);
assertEquals("VERIFIED", statusAttribute.getValue());
selectedOperationAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.OPERATION);
operationAttribute = taskData.getRoot().getAttribute(
TaskAttribute.PREFIX_OPERATION + BugzillaOperation.confirmed.toString());
operationAttributeUppercase = taskData.getRoot().getAttribute(
TaskAttribute.PREFIX_OPERATION + BugzillaOperation.confirmed.toString().toUpperCase());
TaskOperation.applyTo(selectedOperationAttribute, operationAttribute != null
? operationAttribute.getValue()
: operationAttributeUppercase.getValue(), BugzillaOperation.confirmed.getLabel());
model.attributeChanged(selectedOperationAttribute);
changed.clear();
changed.add(selectedOperationAttribute);
workingCopy.save(changed, null);
response = BugzillaFixture.current().submitTask(taskData, client);
assertNotNull(response);
assertEquals(ResponseKind.TASK_UPDATED.toString(), response.getReposonseKind().toString());
// change Status from CONFIRMED -> RESOLVED FIXED
task = generateLocalTaskAndDownload(taskId);
assertNotNull(task);
model = createModel(task);
taskData = model.getTaskData();
assertNotNull(taskData);
statusAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.STATUS);
assertEquals("CONFIRMED", statusAttribute.getValue());
selectedOperationAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.OPERATION);
TaskOperation.applyTo(selectedOperationAttribute, BugzillaOperation.resolve.toString(),
BugzillaOperation.resolve.getLabel());
resolution = taskData.getRoot().getMappedAttribute(TaskAttribute.RESOLUTION);
resolution.setValue("FIXED");
model.attributeChanged(selectedOperationAttribute);
changed.clear();
changed.add(selectedOperationAttribute);
workingCopy.save(changed, null);
response = BugzillaFixture.current().submitTask(taskData, client);
assertNotNull(response);
assertEquals(ResponseKind.TASK_UPDATED.toString(), response.getReposonseKind().toString());
task = generateLocalTaskAndDownload(taskId);
assertNotNull(task);
model = createModel(task);
taskData = model.getTaskData();
assertNotNull(taskData);
statusAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.STATUS);
assertEquals("RESOLVED", statusAttribute.getValue());
resolution = taskData.getRoot().getMappedAttribute(TaskAttribute.RESOLUTION);
assertEquals("FIXED", resolution.getValue());
}
private void doStdWorkflow40_2(String dupBugID) throws Exception {
final TaskMapping taskMappingInit = new TaskMapping() {
@Override
public String getProduct() {
return "Product with Spaces";
}
};
final TaskMapping taskMappingSelect = new TaskMapping() {
@Override
public String getComponent() {
return "Component 1";
}
@Override
public String getSummary() {
return "test the std workflow for Product with Spaces";
}
@Override
public String getDescription() {
return "The Description of the std workflow task";
}
};
final TaskData[] taskDataNew = new TaskData[1];
// create Task
taskDataNew[0] = TasksUiInternal.createTaskData(repository, taskMappingInit, taskMappingSelect, null);
ITask taskNew = TasksUiUtil.createOutgoingNewTask(taskDataNew[0].getConnectorKind(),
taskDataNew[0].getRepositoryUrl());
ITaskDataWorkingCopy workingCopy = TasksUi.getTaskDataManager().createWorkingCopy(taskNew, taskDataNew[0]);
TaskAttribute selectedOperationAttribute = taskDataNew[0].getRoot().getMappedAttribute(TaskAttribute.OPERATION);
TaskOperation.applyTo(selectedOperationAttribute, BugzillaOperation.unconfirmed.toString(),
BugzillaOperation.unconfirmed.getLabel());
Set<TaskAttribute> changed = new HashSet<TaskAttribute>();
changed.add(selectedOperationAttribute);
workingCopy.save(changed, null);
RepositoryResponse response = BugzillaFixture.current().submitTask(taskDataNew[0], client);//connector.getTaskDataHandler().postTaskData(repository, taskDataNew[0], changed,
//new NullProgressMonitor());
((AbstractTask) taskNew).setSubmitting(true);
assertNotNull(response);
assertEquals(ResponseKind.TASK_CREATED.toString(), response.getReposonseKind().toString());
String taskId = response.getTaskId();
// change Status from UNCONFIRMED -> RESOLVED DUPLICATE
ITask task = generateLocalTaskAndDownload(taskId);
assertNotNull(task);
TaskDataModel model = createModel(task);
TaskData taskData = model.getTaskData();
assertNotNull(taskData);
TaskAttribute statusAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.STATUS);
assertEquals("UNCONFIRMED", statusAttribute.getValue());
selectedOperationAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.OPERATION);
TaskOperation.applyTo(selectedOperationAttribute, BugzillaOperation.duplicate.toString(),
BugzillaOperation.duplicate.getLabel());
TaskAttribute duplicateAttribute = taskData.getRoot().getAttribute("dup_id");
duplicateAttribute.setValue(dupBugID);
model.attributeChanged(selectedOperationAttribute);
model.attributeChanged(duplicateAttribute);
changed.clear();
changed.add(selectedOperationAttribute);
changed.add(duplicateAttribute);
workingCopy.save(changed, null);
response = BugzillaFixture.current().submitTask(taskData, client);
assertNotNull(response);
assertEquals(ResponseKind.TASK_UPDATED.toString(), response.getReposonseKind().toString());
}
/*
* Test for the following State transformation
* NEW -> ASSIGNED -> RESOLVED DUPLICATE -> VERIFIED -> CLOSED -> REOPENED -> RESOLVED FIXED
*
*/
private void doStdWorkflow32(String dupBugID) throws Exception {
final TaskMapping taskMappingInit = new TaskMapping() {
@Override
public String getProduct() {
return "TestProduct";
}
};
final TaskMapping taskMappingSelect = new TaskMapping() {
@Override
public String getComponent() {
return "TestComponent";
}
@Override
public String getSummary() {
return "test the std workflow";
}
@Override
public String getDescription() {
return "The Description of the std workflow task";
}
};
final TaskData[] taskDataNew = new TaskData[1];
// create Task
taskDataNew[0] = TasksUiInternal.createTaskData(repository, taskMappingInit, taskMappingSelect, null);
ITask taskNew = TasksUiUtil.createOutgoingNewTask(taskDataNew[0].getConnectorKind(),
taskDataNew[0].getRepositoryUrl());
//set Color to a legal value if exists
// TaskAttribute colorAttribute = taskDataNew[0].getRoot().getAttribute("cf_multiselect");
// if (colorAttribute != null) {
// colorAttribute.setValue("Green");
// }
ITaskDataWorkingCopy workingCopy = TasksUi.getTaskDataManager().createWorkingCopy(taskNew, taskDataNew[0]);
Set<TaskAttribute> changed = new HashSet<TaskAttribute>();
workingCopy.save(changed, null);
RepositoryResponse response = BugzillaFixture.current().submitTask(taskDataNew[0], client);//connector.getTaskDataHandler().postTaskData(repository, taskDataNew[0], changed,
//new NullProgressMonitor());
((AbstractTask) taskNew).setSubmitting(true);
assertNotNull(response);
assertEquals(ResponseKind.TASK_CREATED.toString(), response.getReposonseKind().toString());
String taskId = response.getTaskId();
// change Status from NEW -> ASSIGNED
ITask task = generateLocalTaskAndDownload(taskId);
assertNotNull(task);
TaskDataModel model = createModel(task);
TaskData taskData = model.getTaskData();
assertNotNull(taskData);
TaskAttribute statusAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.STATUS);
assertEquals("NEW", statusAttribute.getValue());
TaskAttribute selectedOperationAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.OPERATION);
TaskOperation.applyTo(selectedOperationAttribute, BugzillaOperation.accept.toString(),
BugzillaOperation.accept.getLabel());
model.attributeChanged(selectedOperationAttribute);
changed.clear();
changed.add(selectedOperationAttribute);
workingCopy.save(changed, null);
response = BugzillaFixture.current().submitTask(taskData, client);
// response = submit(taskNew, taskData, changed);
// assertNotNull(response);
assertEquals(ResponseKind.TASK_UPDATED.toString(), response.getReposonseKind().toString());
// change Status from ASSIGNED -> RESOLVED DUPLICATE
task = generateLocalTaskAndDownload(taskId);
assertNotNull(task);
model = createModel(task);
taskData = model.getTaskData();
assertNotNull(taskData);
statusAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.STATUS);
assertEquals("ASSIGNED", statusAttribute.getValue());
selectedOperationAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.OPERATION);
TaskOperation.applyTo(selectedOperationAttribute, BugzillaOperation.duplicate.toString(),
BugzillaOperation.duplicate.getLabel());
TaskAttribute duplicateAttribute = taskData.getRoot().getAttribute("dup_id");
duplicateAttribute.setValue(dupBugID);
model.attributeChanged(selectedOperationAttribute);
model.attributeChanged(duplicateAttribute);
changed.clear();
changed.add(selectedOperationAttribute);
changed.add(duplicateAttribute);
workingCopy.save(changed, null);
response = BugzillaFixture.current().submitTask(taskData, client);
assertNotNull(response);
assertEquals(ResponseKind.TASK_UPDATED.toString(), response.getReposonseKind().toString());
// change Status from RESOLVED DUPLICATE -> VERIFIED
task = generateLocalTaskAndDownload(taskId);
assertNotNull(task);
model = createModel(task);
taskData = model.getTaskData();
assertNotNull(taskData);
statusAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.STATUS);
assertEquals("RESOLVED", statusAttribute.getValue());
TaskAttribute resolution = taskData.getRoot().getMappedAttribute(TaskAttribute.RESOLUTION);
assertEquals("DUPLICATE", resolution.getValue());
selectedOperationAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.OPERATION);
TaskOperation.applyTo(selectedOperationAttribute, BugzillaOperation.verify.toString(),
BugzillaOperation.verify.getLabel());
model.attributeChanged(selectedOperationAttribute);
changed.clear();
changed.add(selectedOperationAttribute);
workingCopy.save(changed, null);
response = BugzillaFixture.current().submitTask(taskData, client);
assertNotNull(response);
assertEquals(ResponseKind.TASK_UPDATED.toString(), response.getReposonseKind().toString());
// change Status from VERIFIED -> CLOSE
task = generateLocalTaskAndDownload(taskId);
assertNotNull(task);
model = createModel(task);
taskData = model.getTaskData();
assertNotNull(taskData);
statusAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.STATUS);
assertEquals("VERIFIED", statusAttribute.getValue());
selectedOperationAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.OPERATION);
TaskOperation.applyTo(selectedOperationAttribute, BugzillaOperation.close.toString(),
BugzillaOperation.close.getLabel());
model.attributeChanged(selectedOperationAttribute);
changed.clear();
changed.add(selectedOperationAttribute);
workingCopy.save(changed, null);
response = BugzillaFixture.current().submitTask(taskData, client);
assertNotNull(response);
assertEquals(ResponseKind.TASK_UPDATED.toString(), response.getReposonseKind().toString());
// change Status from CLOSE -> REOPENED
task = generateLocalTaskAndDownload(taskId);
assertNotNull(task);
model = createModel(task);
taskData = model.getTaskData();
assertNotNull(taskData);
statusAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.STATUS);
assertEquals("CLOSED", statusAttribute.getValue());
selectedOperationAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.OPERATION);
TaskOperation.applyTo(selectedOperationAttribute, BugzillaOperation.reopen.toString(),
BugzillaOperation.reopen.getLabel());
model.attributeChanged(selectedOperationAttribute);
changed.clear();
changed.add(selectedOperationAttribute);
workingCopy.save(changed, null);
response = BugzillaFixture.current().submitTask(taskData, client);
assertNotNull(response);
assertEquals(ResponseKind.TASK_UPDATED.toString(), response.getReposonseKind().toString());
// change Status from REOPENED -> RESOLVED FIXED
task = generateLocalTaskAndDownload(taskId);
assertNotNull(task);
model = createModel(task);
taskData = model.getTaskData();
assertNotNull(taskData);
statusAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.STATUS);
assertEquals("REOPENED", statusAttribute.getValue());
selectedOperationAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.OPERATION);
TaskOperation.applyTo(selectedOperationAttribute, BugzillaOperation.resolve.toString(),
BugzillaOperation.resolve.getLabel());
resolution = taskData.getRoot().getMappedAttribute(TaskAttribute.RESOLUTION);
resolution.setValue("FIXED");
model.attributeChanged(selectedOperationAttribute);
model.attributeChanged(resolution);
changed.clear();
changed.add(selectedOperationAttribute);
changed.add(resolution);
workingCopy.save(changed, null);
response = BugzillaFixture.current().submitTask(taskData, client);
assertNotNull(response);
assertEquals(ResponseKind.TASK_UPDATED.toString(), response.getReposonseKind().toString());
// test last state
task = generateLocalTaskAndDownload(taskId);
assertNotNull(task);
model = createModel(task);
taskData = model.getTaskData();
assertNotNull(taskData);
statusAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.STATUS);
assertEquals("RESOLVED", statusAttribute.getValue());
resolution = taskData.getRoot().getMappedAttribute(TaskAttribute.RESOLUTION);
assertEquals("FIXED", resolution.getValue());
}
public void testGetTaskData() throws Exception {
TaskData data = BugzillaFixture.current().createTask(PrivilegeLevel.USER, null, null);
assertNotNull(data);
TaskData data2 = connector.getTaskData(repository, data.getTaskId(), new NullProgressMonitor());
assertNotNull(data2);
for (TaskAttribute attribute : data.getRoot().getAttributes().values()) {
if (!attribute.getId().equals(BugzillaAttribute.TOKEN.getKey())) {
TaskAttribute attr = data2.getRoot().getAttribute(attribute.getId());
assertNotNull(attr);
assertEquals(attribute.getValue(), attr.getValue());
}
}
}
public void testMidAirCollision() throws Exception {
TaskData data = BugzillaFixture.current().createTask(PrivilegeLevel.USER, null, null);
assertNotNull(data);
// Get the task
ITask task = generateLocalTaskAndDownload(data.getTaskId());
ITaskDataWorkingCopy workingCopy = TasksUiPlugin.getTaskDataManager().getWorkingCopy(task);
TaskData taskData = workingCopy.getLocalData();
assertNotNull(taskData);
String newCommentText = "BugzillaRepositoryClientTest.testMidAirCollision(): test " + (new Date()).toString();
TaskAttribute attrNewComment = data.getRoot().getMappedAttribute(TaskAttribute.COMMENT_NEW);
attrNewComment.setValue(newCommentText);
Set<TaskAttribute> changed = new HashSet<TaskAttribute>();
changed.add(attrNewComment);
RepositoryResponse response = BugzillaFixture.current().submitTask(data, client);
workingCopy = TasksUiPlugin.getTaskDataManager().getWorkingCopy(task);
taskData = workingCopy.getLocalData();
assertNotNull(taskData);
newCommentText = "BugzillaRepositoryClientTest.testMidAirCollision(): test #### " + (new Date()).toString();
attrNewComment = data.getRoot().getMappedAttribute(TaskAttribute.COMMENT_NEW);
attrNewComment.setValue(newCommentText);
changed = new HashSet<TaskAttribute>();
changed.add(attrNewComment);
TaskAttribute attrDeltaTs = data.getRoot().getMappedAttribute(TaskAttribute.DATE_MODIFICATION);
attrDeltaTs.setValue("2007-01-01 00:00:00");
changed.add(attrDeltaTs);
try {
// Submit changes
response = BugzillaFixture.current().submitTask(data, client);
assertNotNull(response);
//assertEquals(ResponseKind.TASK_UPDATED, response.getReposonseKind());
System.err.println("\n\ntestMidAirCollision >>> ResponseKind:" + response.getReposonseKind().toString()
+ "\n\n");
fail("Mid-air collision expected");
} catch (CoreException e) {
assertTrue(e.getStatus().getMessage().indexOf("Mid-air collision occurred while submitting") != -1);
return;
}
fail("Mid-air collision expected");
}
public void testAuthenticationCredentials() throws Exception {
// use the client's repository when setting credentials below
repository = client.getTaskRepository();
TaskData data = BugzillaFixture.current().createTask(PrivilegeLevel.USER, null, null);
assertNotNull(data);
ITask task = generateLocalTaskAndDownload(data.getTaskId());
assertNotNull(task);
TasksUiPlugin.getTaskActivityManager().activateTask(task);
File sourceContextFile = TasksUiPlugin.getContextStore().getFileForContext(task);
assertEquals(SynchronizationState.SYNCHRONIZED, task.getSynchronizationState());
sourceContextFile.createNewFile();
sourceContextFile.deleteOnExit();
AuthenticationCredentials oldCreds = repository.getCredentials(AuthenticationType.REPOSITORY);
AuthenticationCredentials wrongCreds = new AuthenticationCredentials("wrong", "wrong");
repository.setCredentials(AuthenticationType.REPOSITORY, wrongCreds, false);
TasksUiPlugin.getRepositoryManager().notifyRepositorySettingsChanged(repository);
TaskData taskData = TasksUiPlugin.getTaskDataManager().getTaskData(task);
TaskAttributeMapper mapper = taskData.getAttributeMapper();
TaskAttribute attribute = mapper.createTaskAttachment(taskData);
try {
AttachmentUtil.postContext(connector, repository, task, "test", attribute, new NullProgressMonitor());
} catch (CoreException e) {
assertEquals(SynchronizationState.SYNCHRONIZED, task.getSynchronizationState());
assertTrue(BugzillaTestSupportUtil.isInvalidLogon(e));
return;
} finally {
repository.setCredentials(AuthenticationType.REPOSITORY, oldCreds, false);
TasksUiPlugin.getRepositoryManager().notifyRepositorySettingsChanged(repository);
}
fail("Should have failed due to invalid userid and password.");
}
public void testSynchronize() throws CoreException, Exception {
// Get the task
TaskData data = BugzillaFixture.current().createTask(PrivilegeLevel.USER, null, null);
assertNotNull(data);
ITask task = generateLocalTaskAndDownload(data.getTaskId());
TasksUi.getTaskDataManager().discardEdits(task);
TaskDataModel model = createModel(task);
TaskData taskData = model.getTaskData();
assertNotNull(taskData);
// int numComments = taskData.getAttributeMapper()
// .getAttributesByType(taskData, TaskAttribute.TYPE_ATTACHMENT)
// .size();
// Modify it
String newCommentText = "BugzillaRepositoryClientTest.testSynchronize(): " + (new Date()).toString();
TaskAttribute attrNewComment = taskData.getRoot().getMappedAttribute(TaskAttribute.COMMENT_NEW);
attrNewComment.setValue(newCommentText);
model.attributeChanged(attrNewComment);
model.save(new NullProgressMonitor());
assertEquals(SynchronizationState.OUTGOING, task.getSynchronizationState());
submit(model);
assertEquals(SynchronizationState.SYNCHRONIZED, task.getSynchronizationState());
// TaskData taskData2 = workingCopy.getRepositoryData();
// TaskMapper taskData2Mapper = new TaskMapper(taskData2);
// TaskMapper taskData1Mapper = new TaskMapper(taskData);
// assertFalse(taskData2Mapper.getModificationDate().equals(taskData1Mapper.getModificationDate()));
// // Still not read
// assertFalse(taskData2.getLastModified().equals(task.getLastReadTimeStamp()));
// TasksUiPlugin.getTaskDataManager().setTaskRead(task, true);
// assertEquals(taskData2.getLastModified(), task.getLastReadTimeStamp());
// assertTrue(taskData2.getComments().size() > numComments);
//
// // Has no outgoing changes or conflicts yet needs synch
// // because task doesn't have bug report (new query hit)
// // Result: retrieved with no incoming status
// // task.setSyncState(SynchronizationState.SYNCHRONIZED);
// TasksUiPlugin.getTaskDataStorageManager().remove(task.getRepositoryUrl(), task.getTaskId());
// TasksUiInternal.synchronizeTask(connector, task, false, null);
// assertEquals(SynchronizationState.SYNCHRONIZED, task.getSynchronizationState());
// RepositoryTaskData bugReport2 = null;
// bugReport2 = TasksUiPlugin.getTaskDataStorageManager()
// .getNewTaskData(task.getRepositoryUrl(), task.getTaskId());
// assertNotNull(bugReport2);
// assertEquals(task.getTaskId(), bugReport2.getTaskId());
//
// assertEquals(newCommentText, bugReport2.getComments().get(numComments).getText());
// // TODO: Test that comment was appended
// // ArrayList<Comment> comments = task.getTaskData().getComments();
// // assertNotNull(comments);
// // assertTrue(comments.size() > 0);
// // Comment lastComment = comments.get(comments.size() - 1);
// // assertEquals(newCommentText, lastComment.getText());
}
public void testMissingHits() throws Exception {
ArrayList<String> taskId = harness.taskMissingHitsExists();
if (taskId == null || taskId.isEmpty()) {
harness.createMissingHitsTask();
}
String queryString = BugzillaFixture.current().getRepositoryUrl() + "/buglist.cgi?"
+ "short_desc=test%20Missing%20Hits&resolution=---&query_format=advanced"
+ "&short_desc_type=casesubstring&component=ManualC2&product=ManualTest";
RepositoryQuery query = new RepositoryQuery(BugzillaCorePlugin.CONNECTOR_KIND, "test");
query.setRepositoryUrl(repository.getRepositoryUrl());
query.setUrl(queryString);
TasksUiPlugin.getTaskList().addQuery(query);
TasksUiInternal.synchronizeQuery(connector, query, null, true);
for (ITask task : query.getChildren()) {
assertTrue(task.getSynchronizationState() == SynchronizationState.INCOMING_NEW);
TasksUiPlugin.getTaskDataManager().setTaskRead(task, true);
assertTrue(task.getSynchronizationState() == SynchronizationState.SYNCHRONIZED);
}
repository.setSynchronizationTimeStamp("1970-01-01");
TasksUiInternal.synchronizeQuery(connector, query, null, true);
for (ITask task : query.getChildren()) {
assertTrue(task.getSynchronizationState() == SynchronizationState.SYNCHRONIZED);
}
}
public void testMissingHitsWhileTaskChanged() throws Exception {
String summary1 = "testMissingHitsWhileTaskChanged" + System.currentTimeMillis();
TaskData data1 = BugzillaFixture.current().createTask(PrivilegeLevel.USER, summary1, null);
ITask task1 = generateLocalTaskAndDownload(data1.getTaskId());
// ensure that time advances by 1 second between creation and query time
Thread.sleep(1000);
repository = BugzillaFixture.current().repository();
String stamp = data1.getRoot().getMappedAttribute(TaskAttribute.DATE_MODIFICATION).getValue();
repository.setSynchronizationTimeStamp(stamp);
SynchronizationSession session = new SynchronizationSession();
session.setFullSynchronization(true);
session.setTasks(Collections.singleton(task1));
session.setTaskRepository(repository);
// pre synchronization
connector.preSynchronization(session, null);
Object data = session.getData();
assertNotNull(session.getData());
assertEquals(Collections.singleton(task1), session.getStaleTasks());
// update task
data1.getRoot().getMappedAttribute(TaskAttribute.SUMMARY).setValue(summary1 + "updated");
connector.getTaskDataHandler().postTaskData(repository, data1, null, null);
// perform query
IRepositoryQuery query = TasksUi.getRepositoryModel().createRepositoryQuery(repository);
query.setUrl(repository.getUrl()
+ "buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=" + summary1);
BugzillaTaskDataCollector collector = new BugzillaTaskDataCollector();
connector.performQuery(repository, query, collector, session, null);
assertEquals(data, session.getData());
// post synchronizaion
connector.postSynchronization(session, null);
assertFalse(stamp.equals(repository.getSynchronizationTimeStamp()));
// second pre synchronization
SynchronizationSession session2 = new SynchronizationSession();
session2.setTasks(Collections.singleton(task1));
session2.setTaskRepository(repository);
connector.preSynchronization(session2, null);
assertEquals(Collections.singleton(task1), session2.getStaleTasks());
}
public void testAnonymousRepositoryAccess() throws Exception {
assertNotNull(repository);
AuthenticationCredentials anonymousCreds = new AuthenticationCredentials("", "");
repository.setCredentials(AuthenticationType.REPOSITORY, anonymousCreds, false);
TasksUiPlugin.getRepositoryManager().notifyRepositorySettingsChanged(repository);
// test anonymous task retrieval
TaskData data = BugzillaFixture.current().createTask(PrivilegeLevel.USER, null, null);
assertNotNull(data);
ITask task = this.generateLocalTaskAndDownload(data.getTaskId());
assertNotNull(task);
// test anonymous update of configuration
RepositoryConfiguration config = connector.getRepositoryConfiguration(repository, false, null);
assertNotNull(config);
assertTrue(config.getOptionValues(BugzillaAttribute.COMPONENT).size() > 0);
}
public void testTimeTracker() throws Exception {
BugzillaVersion version = new BugzillaVersion(BugzillaFixture.current().getVersion());
if (version.isSmallerOrEquals(BugzillaVersion.BUGZILLA_3_2)) {
return;
}
boolean enableDeadline = true;
TaskData data = BugzillaFixture.current().createTask(PrivilegeLevel.USER, null, null);
assertNotNull(data);
ITask task = generateLocalTaskAndDownload(data.getTaskId());
assertNotNull(task);
//ITask task = generateLocalTaskAndDownload("" + taskid);
//assertNotNull(task);
TaskDataModel model = createModel(task);
TaskData taskData = model.getTaskData();
assertNotNull(taskData);
assertEquals(SynchronizationState.SYNCHRONIZED, task.getSynchronizationState());
Set<ITask> tasks = new HashSet<ITask>();
tasks.add(task);
synchAndAssertState(tasks, SynchronizationState.SYNCHRONIZED);
float estimatedTime, remainingTime, actualTime, addTime;
String deadline = null;
estimatedTime = Float.parseFloat(taskData.getRoot()
.getAttribute(BugzillaAttribute.ESTIMATED_TIME.getKey())
.getValue());
remainingTime = Float.parseFloat(taskData.getRoot()
.getAttribute(BugzillaAttribute.REMAINING_TIME.getKey())
.getValue());
actualTime = Float.parseFloat(taskData.getRoot()
.getAttribute(BugzillaAttribute.ACTUAL_TIME.getKey())
.getValue());
if (enableDeadline) {
deadline = taskData.getRoot().getAttribute(BugzillaAttribute.DEADLINE.getKey()).getValue();
}
estimatedTime += 2;
remainingTime += 1.5;
addTime = 0.75f;
if (enableDeadline) {
deadline = generateNewDay();
}
taskData.getRoot().getAttribute(BugzillaAttribute.ESTIMATED_TIME.getKey()).setValue("" + estimatedTime);
taskData.getRoot().getAttribute(BugzillaAttribute.REMAINING_TIME.getKey()).setValue("" + remainingTime);
TaskAttribute workTime = taskData.getRoot().getAttribute(BugzillaAttribute.WORK_TIME.getKey());
if (workTime == null) {
BugzillaTaskDataHandler.createAttribute(taskData.getRoot(), BugzillaAttribute.WORK_TIME);
workTime = taskData.getRoot().getAttribute(BugzillaAttribute.WORK_TIME.getKey());
}
workTime.setValue("" + addTime);
if (enableDeadline) {
taskData.getRoot().getAttribute(BugzillaAttribute.DEADLINE.getKey()).setValue("" + deadline);
}
taskData.getRoot()
.getAttribute(BugzillaAttribute.NEW_COMMENT.getKey())
.setValue("New Estimate: " + estimatedTime + "\nNew Remaining: " + remainingTime + "\nAdd: " + addTime);
Set<TaskAttribute> changed = new HashSet<TaskAttribute>();
changed.add(taskData.getRoot().getAttribute(BugzillaAttribute.ESTIMATED_TIME.getKey()));
changed.add(taskData.getRoot().getAttribute(BugzillaAttribute.REMAINING_TIME.getKey()));
changed.add(taskData.getRoot().getAttribute(BugzillaAttribute.WORK_TIME.getKey()));
if (enableDeadline) {
changed.add(taskData.getRoot().getAttribute(BugzillaAttribute.DEADLINE.getKey()));
}
changed.add(taskData.getRoot().getAttribute(BugzillaAttribute.NEW_COMMENT.getKey()));
BugzillaFixture.current().submitTask(taskData, client);
synchAndAssertState(tasks, SynchronizationState.SYNCHRONIZED);
model = createModel(task);
taskData = model.getTaskData();
assertEquals(estimatedTime,
Float.parseFloat(taskData.getRoot().getAttribute(BugzillaAttribute.ESTIMATED_TIME.getKey()).getValue()));
assertEquals(remainingTime,
Float.parseFloat(taskData.getRoot().getAttribute(BugzillaAttribute.REMAINING_TIME.getKey()).getValue()));
assertEquals(actualTime + addTime,
Float.parseFloat(taskData.getRoot().getAttribute(BugzillaAttribute.ACTUAL_TIME.getKey()).getValue()));
if (enableDeadline) {
assertEquals(deadline, taskData.getRoot().getAttribute(BugzillaAttribute.DEADLINE.getKey()).getValue());
}
}
private String generateNewDay() {
int year = 2006;
int month = (int) (Math.random() * 12 + 1);
int day = (int) (Math.random() * 28 + 1);
return "" + year + "-" + ((month <= 9) ? "0" : "") + month + "-" + ((day <= 9) ? "0" : "") + day;
}
public void testSynchChangedReports() throws Exception {
TaskData data = BugzillaFixture.current().createTask(PrivilegeLevel.USER, null, null);
if (BugzillaVersion.BUGZILLA_HEAD.compareTo(BugzillaFixture.current().getBugzillaVersion()) == 0
&& BugzillaFixture.current().getRepositoryUrl().contains("mylyn.eclipse.org")) {
//FIXME: for some actual unknown reason
// connector.preSynchronization(event, null);
// did not include task5
// but in my local bugzilla installation this works perfect.
//
// Until we found the reason we disable this test for the 4.1 bugzilla on mylyn.eclipse.org
return;
}
RepositoryConfiguration repositoryConfiguration = connector.getRepositoryConfiguration(repository.getRepositoryUrl());
List<String> priorities = repositoryConfiguration.getOptionValues(BugzillaAttribute.PRIORITY);
String priority1 = priorities.get(0);
String priority2 = priorities.get(1);
assertNotNull(data);
ITask task4 = generateLocalTaskAndDownload(data.getTaskId());
assertNotNull(task4);
TaskDataModel model4 = createModel(task4);
TaskData taskData4 = model4.getTaskData();
assertNotNull(taskData4);
assertEquals(SynchronizationState.SYNCHRONIZED, task4.getSynchronizationState());
TaskData data2 = BugzillaFixture.current().createTask(PrivilegeLevel.USER, null, null);
assertNotNull(data2);
ITask task5 = generateLocalTaskAndDownload(data2.getTaskId());
assertNotNull(task5);
TaskDataModel model5 = createModel(task5);
TaskData taskData5 = model5.getTaskData();
assertNotNull(taskData5);
assertEquals(SynchronizationState.SYNCHRONIZED, task5.getSynchronizationState());
Set<ITask> tasks = new HashSet<ITask>();
tasks.add(task4);
tasks.add(task5);
// Precondition for test passing is that task5's modification data is
// AFTER
// task4's
DateFormat timeDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date lastModTime4 = null;
Date lastModTime5 = null;
String mostRecentTimeStamp4 = taskData4.getRoot().getAttribute(BugzillaAttribute.DELTA_TS.getKey()).getValue();
String mostRecentTimeStamp = taskData5.getRoot().getAttribute(BugzillaAttribute.DELTA_TS.getKey()).getValue();
lastModTime4 = timeDateFormat.parse(mostRecentTimeStamp4);
lastModTime5 = timeDateFormat.parse(mostRecentTimeStamp);
assertTrue("Precondition not mached", lastModTime5.after(lastModTime4));
repository.setSynchronizationTimeStamp(mostRecentTimeStamp);
SynchronizationSession event = new SynchronizationSession();
event.setTasks(tasks);
event.setNeedsPerformQueries(true);
event.setTaskRepository(repository);
event.setFullSynchronization(true);
connector.preSynchronization(event, null);
assertTrue(event.needsPerformQueries());
// Always last known changed returned
assertFalse(event.getStaleTasks().contains(task4));
assertTrue(event.getStaleTasks().contains(task5));
String priority4 = null;
if (task4.getPriority().equals(priority1)) {
priority4 = priority2;
taskData4.getRoot().getAttribute(BugzillaAttribute.PRIORITY.getKey()).setValue(priority4);
} else {
priority4 = priority1;
taskData4.getRoot().getAttribute(BugzillaAttribute.PRIORITY.getKey()).setValue(priority4);
}
String priority5 = null;
if (task5.getPriority().equals(priority1)) {
priority5 = priority2;
taskData5.getRoot().getAttribute(BugzillaAttribute.PRIORITY.getKey()).setValue(priority5);
} else {
priority5 = priority1;
taskData5.getRoot().getAttribute(BugzillaAttribute.PRIORITY.getKey()).setValue(priority5);
}
Set<TaskAttribute> changed4 = new HashSet<TaskAttribute>();
Set<TaskAttribute> changed5 = new HashSet<TaskAttribute>();
changed4.add(taskData4.getRoot().getAttribute(BugzillaAttribute.PRIORITY.getKey()));
changed5.add(taskData5.getRoot().getAttribute(BugzillaAttribute.PRIORITY.getKey()));
BugzillaFixture.current().submitTask(taskData4, client);
BugzillaFixture.current().submitTask(taskData5, client);
event = new SynchronizationSession();
event.setTasks(tasks);
event.setNeedsPerformQueries(true);
event.setTaskRepository(repository);
event.setFullSynchronization(true);
connector.preSynchronization(event, null);
assertTrue("Expected: " + task4.getTaskId() + ", " + task5.getTaskId() + ", got: " + event.getStaleTasks(),
event.getStaleTasks().contains(task4) && event.getStaleTasks().contains(task5));
TasksUiInternal.synchronizeTasks(connector, tasks, true, null);
for (ITask task : tasks) {
if (task.getTaskId() == "4") {
assertEquals(priority4, taskData4.getRoot()
.getAttribute(BugzillaAttribute.PRIORITY.getKey())
.getValue());
}
if (task.getTaskId() == "5") {
assertEquals(priority5, taskData5.getRoot()
.getAttribute(BugzillaAttribute.PRIORITY.getKey())
.getValue());
}
}
}
public void testCredentialsWithoutPassword() throws Exception {
TaskRepository repository = BugzillaFixture.current().repository();
AuthenticationCredentials oldCreds = repository.getCredentials(AuthenticationType.REPOSITORY);
AuthenticationCredentials anonymousCreds = new AuthenticationCredentials(oldCreds.getUserName(), "");
repository.setCredentials(AuthenticationType.REPOSITORY, anonymousCreds, false);
TaskRepositoryLocation location = new TaskRepositoryLocation(repository);
client = new BugzillaClient(location, repository, BugzillaFixture.current().connector());
try {
client.validate(new NullProgressMonitor());
} catch (CoreException e) {
assertTrue(e.getStatus().getMessage().indexOf("Please validate credentials via Task Repositories view.") != -1);
return;
} finally {
repository.setCredentials(AuthenticationType.REPOSITORY, oldCreds, false);
TasksUiPlugin.getRepositoryManager().notifyRepositorySettingsChanged(repository);
}
fail("Should have failed due to an empty password.");
}
public void testErrorMatchFailedToShort() throws Exception {
try {
doUserMatch("st", null);
fail("CoreException expected but not found");
} catch (CoreException e) {
assertEquals(BugzillaStatus.ERROR_MATCH_FAILED, e.getStatus().getCode());
BugzillaStatus status = (BugzillaStatus) e.getStatus();
assertNotNull(status);
BugzillaUserMatchResponse matchUserResponse = status.getUserMatchResponse();
assertNotNull(matchUserResponse);
assertNotNull(matchUserResponse.getNewCCProposals());
assertNotNull(matchUserResponse.getAssignedToProposals());
assertNotNull(matchUserResponse.getQaContactProposals());
assertEquals(0, matchUserResponse.getNewCCProposals().size());
assertEquals(0, matchUserResponse.getAssignedToProposals().size());
assertEquals(0, matchUserResponse.getQaContactProposals().size());
assertNotNull(matchUserResponse.getNewCCMsg());
assertNull(matchUserResponse.getAssignedToMsg());
assertNull(matchUserResponse.getQaContactMsg());
if (BugzillaFixture.current().getBugzillaVersion().compareMajorMinorOnly(BugzillaVersion.BUGZILLA_3_6) < 0) {
assertTrue(matchUserResponse.getNewCCMsg().equals("st did not match anything "));
} else {
assertTrue(matchUserResponse.getNewCCMsg().equals(
"st was too short for substring match (minimum 3 characters) "));
}
}
}
public void testErrorMatchConfirmMatch() throws Exception {
try {
doUserMatch("est", null);
fail("CoreException expected but not found");
} catch (CoreException e) {
if (BugzillaFixture.current().getBugzillaVersion().compareMajorMinorOnly(BugzillaVersion.BUGZILLA_3_6) < 0) {
assertEquals(BugzillaStatus.ERROR_MATCH_FAILED, e.getStatus().getCode());
BugzillaStatus status = (BugzillaStatus) e.getStatus();
assertNotNull(status);
BugzillaUserMatchResponse matchUserResponse = status.getUserMatchResponse();
assertNotNull(matchUserResponse);
assertNotNull(matchUserResponse.getNewCCProposals());
assertNotNull(matchUserResponse.getAssignedToProposals());
assertNotNull(matchUserResponse.getQaContactProposals());
assertEquals(0, matchUserResponse.getNewCCProposals().size());
assertEquals(Collections.emptyList(), matchUserResponse.getAssignedToProposals());
assertEquals(Collections.emptyList(), matchUserResponse.getQaContactProposals());
assertNotNull(matchUserResponse.getNewCCMsg());
assertNull(matchUserResponse.getAssignedToMsg());
assertNull(matchUserResponse.getQaContactMsg());
assertTrue(matchUserResponse.getNewCCMsg().equals("est did not match anything "));
} else {
assertEquals(BugzillaStatus.ERROR_CONFIRM_MATCH, e.getStatus().getCode());
BugzillaStatus status = (BugzillaStatus) e.getStatus();
assertNotNull(status);
BugzillaUserMatchResponse matchUserResponse = status.getUserMatchResponse();
assertNotNull(matchUserResponse);
assertNotNull(matchUserResponse.getNewCCProposals());
assertNotNull(matchUserResponse.getAssignedToProposals());
assertNotNull(matchUserResponse.getQaContactProposals());
assertEquals(1, matchUserResponse.getNewCCProposals().size());
assertEquals(Collections.emptyList(), matchUserResponse.getAssignedToProposals());
assertEquals(Collections.emptyList(), matchUserResponse.getQaContactProposals());
assertNotNull(matchUserResponse.getNewCCProposals().get("est"));
assertTrue(matchUserResponse.getNewCCProposals().get("est").contains("tests@mylyn.eclipse.org"));
assertTrue(matchUserResponse.getNewCCProposals().get("est").contains("guest@mylyn.eclipse.org"));
assertNull(matchUserResponse.getNewCCMsg());
assertNull(matchUserResponse.getAssignedToMsg());
assertNull(matchUserResponse.getQaContactMsg());
}
}
}
public void testErrorMatchConfirmMatch2() throws Exception {
try {
doUserMatch(null, "est");
fail("CoreException expected but not found");
} catch (CoreException e) {
if (BugzillaFixture.current().getBugzillaVersion().compareMajorMinorOnly(BugzillaVersion.BUGZILLA_3_6) < 0) {
assertEquals(BugzillaStatus.ERROR_MATCH_FAILED, e.getStatus().getCode());
BugzillaStatus status = (BugzillaStatus) e.getStatus();
assertNotNull(status);
BugzillaUserMatchResponse matchUserResponse = status.getUserMatchResponse();
assertNotNull(matchUserResponse);
assertNotNull(matchUserResponse.getNewCCProposals());
assertNotNull(matchUserResponse.getAssignedToProposals());
assertNotNull(matchUserResponse.getQaContactProposals());
assertEquals(0, matchUserResponse.getNewCCProposals().size());
assertEquals(Collections.emptyList(), matchUserResponse.getAssignedToProposals());
assertEquals(Collections.emptyList(), matchUserResponse.getQaContactProposals());
assertNull(matchUserResponse.getNewCCMsg());
assertNotNull(matchUserResponse.getAssignedToMsg());
assertNull(matchUserResponse.getQaContactMsg());
assertTrue(matchUserResponse.getAssignedToMsg().equals("est did not match anything "));
} else {
assertEquals(BugzillaStatus.ERROR_CONFIRM_MATCH, e.getStatus().getCode());
BugzillaStatus status = (BugzillaStatus) e.getStatus();
assertNotNull(status);
BugzillaUserMatchResponse matchUserResponse = status.getUserMatchResponse();
assertNotNull(matchUserResponse);
assertNotNull(matchUserResponse.getNewCCProposals());
assertNotNull(matchUserResponse.getAssignedToProposals());
assertNotNull(matchUserResponse.getQaContactProposals());
assertEquals(0, matchUserResponse.getNewCCProposals().size());
assertEquals(2, matchUserResponse.getAssignedToProposals().size());
assertEquals(Collections.emptyList(), matchUserResponse.getQaContactProposals());
assertTrue(matchUserResponse.getAssignedToProposals().contains("tests@mylyn.eclipse.org"));
assertTrue(matchUserResponse.getAssignedToProposals().contains("guest@mylyn.eclipse.org"));
assertNull(matchUserResponse.getNewCCMsg());
assertNull(matchUserResponse.getAssignedToMsg());
assertNull(matchUserResponse.getQaContactMsg());
}
}
}
public void testErrorMatchConfirmMatch3() throws Exception {
try {
doUserMatch("test", "est");
fail("CoreException expected but not found");
} catch (CoreException e) {
if (BugzillaFixture.current().getBugzillaVersion().compareMajorMinorOnly(BugzillaVersion.BUGZILLA_3_6) < 0) {
assertEquals(BugzillaStatus.ERROR_MATCH_FAILED, e.getStatus().getCode());
BugzillaStatus status = (BugzillaStatus) e.getStatus();
assertNotNull(status);
BugzillaUserMatchResponse matchUserResponse = status.getUserMatchResponse();
assertNotNull(matchUserResponse);
assertNotNull(matchUserResponse.getNewCCProposals());
assertNotNull(matchUserResponse.getAssignedToProposals());
assertNotNull(matchUserResponse.getQaContactProposals());
assertEquals(0, matchUserResponse.getNewCCProposals().size());
assertEquals(Collections.emptyList(), matchUserResponse.getAssignedToProposals());
assertEquals(Collections.emptyList(), matchUserResponse.getQaContactProposals());
assertNotNull(matchUserResponse.getNewCCMsg());
assertNotNull(matchUserResponse.getAssignedToMsg());
assertNull(matchUserResponse.getQaContactMsg());
assertTrue(matchUserResponse.getNewCCMsg().equals("test did not match anything "));
assertTrue(matchUserResponse.getAssignedToMsg().equals("est did not match anything "));
} else {
assertEquals(BugzillaStatus.ERROR_CONFIRM_MATCH, e.getStatus().getCode());
BugzillaStatus status = (BugzillaStatus) e.getStatus();
assertNotNull(status);
BugzillaUserMatchResponse matchUserResponse = status.getUserMatchResponse();
assertNotNull(matchUserResponse);
assertNotNull(matchUserResponse.getNewCCProposals());
assertNotNull(matchUserResponse.getAssignedToProposals());
assertNotNull(matchUserResponse.getQaContactProposals());
assertEquals(1, matchUserResponse.getNewCCProposals().size());
assertEquals(2, matchUserResponse.getAssignedToProposals().size());
assertEquals(Collections.emptyList(), matchUserResponse.getQaContactProposals());
assertNotNull(matchUserResponse.getNewCCProposals().get("test"));
assertTrue(matchUserResponse.getNewCCProposals().get("test").contains("tests@mylyn.eclipse.org"));
assertTrue(matchUserResponse.getAssignedToProposals().contains("tests@mylyn.eclipse.org"));
assertTrue(matchUserResponse.getAssignedToProposals().contains("guest@mylyn.eclipse.org"));
assertNull(matchUserResponse.getNewCCMsg());
assertNull(matchUserResponse.getAssignedToMsg());
assertNull(matchUserResponse.getQaContactMsg());
}
}
}
public void testErrorMatchConfirmMatch4() throws Exception {
try {
doUserMatch("test;guest", null);
fail("CoreException expected but not found");
} catch (CoreException e) {
if (BugzillaFixture.current().getBugzillaVersion().compareMajorMinorOnly(BugzillaVersion.BUGZILLA_3_6) < 0) {
assertEquals(BugzillaStatus.ERROR_MATCH_FAILED, e.getStatus().getCode());
BugzillaStatus status = (BugzillaStatus) e.getStatus();
assertNotNull(status);
BugzillaUserMatchResponse matchUserResponse = status.getUserMatchResponse();
assertNotNull(matchUserResponse);
assertNotNull(matchUserResponse.getNewCCProposals());
assertNotNull(matchUserResponse.getAssignedToProposals());
assertNotNull(matchUserResponse.getQaContactProposals());
assertEquals(0, matchUserResponse.getNewCCProposals().size());
assertEquals(Collections.emptyList(), matchUserResponse.getAssignedToProposals());
assertEquals(Collections.emptyList(), matchUserResponse.getQaContactProposals());
assertNotNull(matchUserResponse.getNewCCMsg());
assertNull(matchUserResponse.getAssignedToMsg());
assertNull(matchUserResponse.getQaContactMsg());
assertTrue(matchUserResponse.getNewCCMsg().equals("test;guest did not match anything "));
} else {
assertEquals(BugzillaStatus.ERROR_CONFIRM_MATCH, e.getStatus().getCode());
BugzillaStatus status = (BugzillaStatus) e.getStatus();
assertNotNull(status);
BugzillaUserMatchResponse matchUserResponse = status.getUserMatchResponse();
assertNotNull(matchUserResponse);
assertNotNull(matchUserResponse.getNewCCProposals());
assertNotNull(matchUserResponse.getAssignedToProposals());
assertNotNull(matchUserResponse.getQaContactProposals());
assertEquals(2, matchUserResponse.getNewCCProposals().size());
assertEquals(0, matchUserResponse.getAssignedToProposals().size());
assertEquals(Collections.emptyList(), matchUserResponse.getQaContactProposals());
assertNotNull(matchUserResponse.getNewCCProposals().get("test"));
assertNotNull(matchUserResponse.getNewCCProposals().get("guest"));
assertTrue(matchUserResponse.getNewCCProposals().get("test").contains("tests@mylyn.eclipse.org"));
assertTrue(matchUserResponse.getNewCCProposals().get("guest").contains("guest@mylyn.eclipse.org"));
assertNull(matchUserResponse.getNewCCMsg());
assertNull(matchUserResponse.getAssignedToMsg());
assertNull(matchUserResponse.getQaContactMsg());
}
}
}
public void testErrorMatchFailed() throws Exception {
try {
doUserMatch("tests1@mylyn.eclipse.org", null);
fail("CoreException expected but not found");
} catch (CoreException e) {
assertEquals(BugzillaStatus.ERROR_MATCH_FAILED, e.getStatus().getCode());
BugzillaStatus status = (BugzillaStatus) e.getStatus();
assertNotNull(status);
BugzillaUserMatchResponse matchUserResponse = status.getUserMatchResponse();
assertNotNull(matchUserResponse);
assertNotNull(matchUserResponse.getNewCCProposals());
assertNotNull(matchUserResponse.getAssignedToProposals());
assertNotNull(matchUserResponse.getQaContactProposals());
assertEquals(0, matchUserResponse.getNewCCProposals().size());
assertEquals(Collections.emptyList(), matchUserResponse.getAssignedToProposals());
assertEquals(Collections.emptyList(), matchUserResponse.getQaContactProposals());
assertNotNull(matchUserResponse.getNewCCMsg());
assertNull(matchUserResponse.getAssignedToMsg());
assertNull(matchUserResponse.getQaContactMsg());
assertTrue(matchUserResponse.getNewCCMsg().equals("tests1@mylyn.eclipse.org did not match anything "));
}
}
public void testErrorMatchFailed2() throws Exception {
try {
doUserMatch("est", "test1");
fail("CoreException expected but not found");
} catch (CoreException e) {
if (BugzillaFixture.current().getBugzillaVersion().compareMajorMinorOnly(BugzillaVersion.BUGZILLA_3_6) < 0) {
assertEquals(BugzillaStatus.ERROR_MATCH_FAILED, e.getStatus().getCode());
BugzillaStatus status = (BugzillaStatus) e.getStatus();
assertNotNull(status);
BugzillaUserMatchResponse matchUserResponse = status.getUserMatchResponse();
assertNotNull(matchUserResponse);
assertNotNull(matchUserResponse.getNewCCProposals());
assertNotNull(matchUserResponse.getAssignedToProposals());
assertNotNull(matchUserResponse.getQaContactProposals());
assertEquals(0, matchUserResponse.getNewCCProposals().size());
assertEquals(Collections.emptyList(), matchUserResponse.getAssignedToProposals());
assertEquals(Collections.emptyList(), matchUserResponse.getQaContactProposals());
assertNotNull(matchUserResponse.getNewCCMsg());
assertNotNull(matchUserResponse.getAssignedToMsg());
assertNull(matchUserResponse.getQaContactMsg());
assertTrue(matchUserResponse.getNewCCMsg().equals("est did not match anything "));
assertTrue(matchUserResponse.getAssignedToMsg().equals("test1 did not match anything "));
} else {
assertEquals(BugzillaStatus.ERROR_MATCH_FAILED, e.getStatus().getCode());
BugzillaStatus status = (BugzillaStatus) e.getStatus();
assertNotNull(status);
BugzillaUserMatchResponse matchUserResponse = status.getUserMatchResponse();
assertNotNull(matchUserResponse);
assertNotNull(matchUserResponse.getNewCCProposals());
assertNotNull(matchUserResponse.getAssignedToProposals());
assertNotNull(matchUserResponse.getQaContactProposals());
assertEquals(1, matchUserResponse.getNewCCProposals().size());
assertEquals(Collections.emptyList(), matchUserResponse.getAssignedToProposals());
assertEquals(Collections.emptyList(), matchUserResponse.getQaContactProposals());
assertNotNull(matchUserResponse.getNewCCProposals().get("est"));
assertTrue(matchUserResponse.getNewCCProposals().get("est").contains("tests@mylyn.eclipse.org"));
assertTrue(matchUserResponse.getNewCCProposals().get("est").contains("guest@mylyn.eclipse.org"));
assertNull(matchUserResponse.getNewCCMsg());
assertNotNull(matchUserResponse.getAssignedToMsg());
assertNull(matchUserResponse.getQaContactMsg());
}
}
}
public void doUserMatch(String newCCAttributeValue, String assignedToAttributeValue) throws CoreException,
IOException {
final TaskMapping taskMappingInit = new TaskMapping() {
@Override
public String getProduct() {
return "TestProduct";
}
};
final TaskMapping taskMappingSelect = new TaskMapping() {
@Override
public String getComponent() {
return "TestComponent";
}
@Override
public String getSummary() {
return "test usermatch";
}
@Override
public String getDescription() {
return "The Description of the usermatch";
}
};
final TaskData[] taskDataNew = new TaskData[1];
// create Task
taskDataNew[0] = TasksUiInternal.createTaskData(repository, taskMappingInit, taskMappingSelect, null);
ITask taskNew = TasksUiUtil.createOutgoingNewTask(taskDataNew[0].getConnectorKind(),
taskDataNew[0].getRepositoryUrl());
ITaskDataWorkingCopy workingCopy = TasksUi.getTaskDataManager().createWorkingCopy(taskNew, taskDataNew[0]);
Set<TaskAttribute> changed = new HashSet<TaskAttribute>();
workingCopy.save(changed, null);
RepositoryResponse response = BugzillaFixture.current().submitTask(taskDataNew[0], client);//connector.getTaskDataHandler().postTaskData(repository, taskDataNew[0], changed,
//new NullProgressMonitor());
((AbstractTask) taskNew).setSubmitting(true);
assertNotNull(response);
assertEquals(ResponseKind.TASK_CREATED.toString(), response.getReposonseKind().toString());
String taskId = response.getTaskId();
ITask task = generateLocalTaskAndDownload(taskId);
assertNotNull(task);
TaskDataModel model = createModel(task);
TaskData taskData = model.getTaskData();
assertNotNull(taskData);
TaskAttribute newCCAttribute = taskData.getRoot().getAttribute(BugzillaAttribute.NEWCC.getKey());
TaskAttribute assignedToAttribute = taskData.getRoot().getAttribute(BugzillaAttribute.ASSIGNED_TO.getKey());
changed.clear();
if (newCCAttribute != null && newCCAttributeValue != null) {
newCCAttribute.setValue(newCCAttributeValue);
model.attributeChanged(newCCAttribute);
changed.add(newCCAttribute);
}
if (assignedToAttribute != null && assignedToAttributeValue != null) {
assignedToAttribute.setValue(assignedToAttributeValue);
model.attributeChanged(assignedToAttribute);
changed.add(assignedToAttribute);
}
workingCopy.save(changed, null);
response = BugzillaFixture.current().submitTask(taskData, client);
}
public void testPrivateDescription() throws Exception {
final TaskMapping taskMappingInit = new TaskMapping() {
@Override
public String getProduct() {
return "TestProduct";
}
};
final TaskMapping taskMappingSelect = new TaskMapping() {
@Override
public String getComponent() {
return "TestComponent";
}
@Override
public String getSummary() {
return "test private comments";
}
@Override
public String getDescription() {
return "The Description of the private comments task";
}
};
if (BugzillaVersion.BUGZILLA_3_4.compareTo(BugzillaFixture.current().getBugzillaVersion()) == 0) {
return;
}
final TaskData[] taskDataNew = new TaskData[1];
// create Task
taskDataNew[0] = TasksUiInternal.createTaskData(repository, taskMappingInit, taskMappingSelect, null);
ITask taskNew = TasksUiUtil.createOutgoingNewTask(taskDataNew[0].getConnectorKind(),
taskDataNew[0].getRepositoryUrl());
ITaskDataWorkingCopy workingCopy = TasksUi.getTaskDataManager().createWorkingCopy(taskNew, taskDataNew[0]);
Set<TaskAttribute> changed = new HashSet<TaskAttribute>();
workingCopy.save(changed, null);
RepositoryResponse response = BugzillaFixture.current().submitTask(taskDataNew[0], client);//connector.getTaskDataHandler().postTaskData(repository, taskDataNew[0], changed,
//new NullProgressMonitor());
((AbstractTask) taskNew).setSubmitting(true);
assertNotNull(response);
assertEquals(ResponseKind.TASK_CREATED.toString(), response.getReposonseKind().toString());
String taskId = response.getTaskId();
ITask task = generateLocalTaskAndDownload(taskId);
assertNotNull(task);
TaskDataModel model = createModel(task);
TaskData taskData = model.getTaskData();
assertNotNull(taskData);
TaskAttribute description = taskData.getRoot().getAttribute(BugzillaAttribute.LONG_DESC.getKey());
TaskAttribute isPrivateAttribute = description.getAttribute(IBugzillaConstants.BUGZILLA_DESCRIPTION_IS_PRIVATE);
assertEquals("0", isPrivateAttribute.getValue());
TaskAttribute idAttribute = description.getAttribute(IBugzillaConstants.BUGZILLA_DESCRIPTION_ID);
String value = idAttribute.getValue();
TaskAttribute definedIsPrivate = description.getAttribute(IBugzillaConstants.BUGZILLA_PREFIX_DEFINED_ISPRIVATE
+ value);
if (definedIsPrivate == null) {
definedIsPrivate = description.createAttribute(IBugzillaConstants.BUGZILLA_PREFIX_DEFINED_ISPRIVATE + value);
}
TaskAttribute isPrivate = description.getAttribute(IBugzillaConstants.BUGZILLA_PREFIX_ISPRIVATE + value);
if (isPrivate == null) {
isPrivate = description.createAttribute(IBugzillaConstants.BUGZILLA_PREFIX_ISPRIVATE + value);
}
definedIsPrivate.setValue("1"); //$NON-NLS-1$
isPrivate.setValue("1"); //$NON-NLS-1$
model.attributeChanged(description);
changed.clear();
changed.add(description);
workingCopy.save(changed, null);
response = BugzillaFixture.current().submitTask(taskData, client);
task = generateLocalTaskAndDownload(taskId);
assertNotNull(task);
model = createModel(task);
taskData = model.getTaskData();
assertNotNull(taskData);
description = taskData.getRoot().getAttribute(BugzillaAttribute.LONG_DESC.getKey());
isPrivateAttribute = description.getAttribute(IBugzillaConstants.BUGZILLA_DESCRIPTION_IS_PRIVATE);
assertEquals("1", isPrivateAttribute.getValue());
}
public void testPrivateComments() throws Exception {
final TaskMapping taskMappingInit = new TaskMapping() {
@Override
public String getProduct() {
return "TestProduct";
}
};
final TaskMapping taskMappingSelect = new TaskMapping() {
@Override
public String getComponent() {
return "TestComponent";
}
@Override
public String getSummary() {
return "test private comments";
}
@Override
public String getDescription() {
return "The Description of the private comments task";
}
};
if (BugzillaVersion.BUGZILLA_3_4.compareTo(BugzillaFixture.current().getBugzillaVersion()) == 0) {
return;
}
final TaskData[] taskDataNew = new TaskData[1];
// create Task
taskDataNew[0] = TasksUiInternal.createTaskData(repository, taskMappingInit, taskMappingSelect, null);
ITask taskNew = TasksUiUtil.createOutgoingNewTask(taskDataNew[0].getConnectorKind(),
taskDataNew[0].getRepositoryUrl());
ITaskDataWorkingCopy workingCopy = TasksUi.getTaskDataManager().createWorkingCopy(taskNew, taskDataNew[0]);
Set<TaskAttribute> changed = new HashSet<TaskAttribute>();
workingCopy.save(changed, null);
RepositoryResponse response = BugzillaFixture.current().submitTask(taskDataNew[0], client);//connector.getTaskDataHandler().postTaskData(repository, taskDataNew[0], changed,
//new NullProgressMonitor());
((AbstractTask) taskNew).setSubmitting(true);
assertNotNull(response);
assertEquals(ResponseKind.TASK_CREATED.toString(), response.getReposonseKind().toString());
String taskId = response.getTaskId();
ITask task = generateLocalTaskAndDownload(taskId);
assertNotNull(task);
TaskDataModel model = createModel(task);
TaskData taskData = model.getTaskData();
assertNotNull(taskData);
TaskAttribute newComment = taskData.getRoot().getAttribute(BugzillaAttribute.NEW_COMMENT.getKey());
newComment.setValue("New Comment");
model.attributeChanged(newComment);
changed.clear();
changed.add(newComment);
workingCopy.save(changed, null);
response = BugzillaFixture.current().submitTask(taskData, client);
task = generateLocalTaskAndDownload(taskId);
assertNotNull(task);
model = createModel(task);
taskData = model.getTaskData();
assertNotNull(taskData);
TaskAttribute comment1 = taskData.getRoot().getAttribute("task.common.comment-1");
TaskAttribute isPrivateAttribute = comment1.getAttribute(IBugzillaConstants.BUGZILLA_DESCRIPTION_IS_PRIVATE);
assertEquals("0", isPrivateAttribute.getValue());
String value = comment1.getValue();
TaskAttribute definedIsPrivate = comment1.getAttribute(IBugzillaConstants.BUGZILLA_PREFIX_DEFINED_ISPRIVATE
+ value);
if (definedIsPrivate == null) {
definedIsPrivate = comment1.createAttribute(IBugzillaConstants.BUGZILLA_PREFIX_DEFINED_ISPRIVATE + value);
}
TaskAttribute isPrivate = comment1.getAttribute(IBugzillaConstants.BUGZILLA_PREFIX_ISPRIVATE + value);
if (isPrivate == null) {
isPrivate = comment1.createAttribute(IBugzillaConstants.BUGZILLA_PREFIX_ISPRIVATE + value);
}
definedIsPrivate.setValue("1"); //$NON-NLS-1$
isPrivate.setValue("1"); //$NON-NLS-1$
model.attributeChanged(comment1);
changed.clear();
changed.add(comment1);
workingCopy.save(changed, null);
response = BugzillaFixture.current().submitTask(taskData, client);
task = generateLocalTaskAndDownload(taskId);
assertNotNull(task);
model = createModel(task);
taskData = model.getTaskData();
assertNotNull(taskData);
comment1 = taskData.getRoot().getAttribute("task.common.comment-1");
isPrivateAttribute = comment1.getAttribute(IBugzillaConstants.BUGZILLA_DESCRIPTION_IS_PRIVATE);
assertEquals("1", isPrivateAttribute.getValue());
}
}