blob: e855a98efff798727983bb01a166d4fb8dfb47d7 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2008 Eugene Kuleshov 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:
* Eugene Kuleshov - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.tasks.tests.web;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import junit.extensions.ActiveTestSuite;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.mylyn.commons.net.AuthenticationCredentials;
import org.eclipse.mylyn.commons.net.AuthenticationType;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.internal.web.tasks.WebRepositoryConnector;
import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
import org.eclipse.mylyn.tasks.core.RepositoryTemplate;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.core.data.TaskData;
import org.eclipse.mylyn.tasks.core.data.TaskDataCollector;
import org.eclipse.mylyn.tasks.ui.TasksUi;
/**
* @author Eugene Kuleshov
*/
public class LiveWebConnectorTemplatesTest extends TestCase {
private final RepositoryTemplate template;
public LiveWebConnectorTemplatesTest(RepositoryTemplate template) {
super("testRepositoryTemplate");
this.template = template;
}
public void testRepositoryTemplate() throws Throwable {
IProgressMonitor monitor = new NullProgressMonitor();
MultiStatus queryStatus = new MultiStatus(TasksUiPlugin.ID_PLUGIN, IStatus.OK, "Query result", null);
final List<TaskData> hits = new ArrayList<TaskData>();
TaskDataCollector collector = new TaskDataCollector() {
@Override
public void accept(TaskData hit) {
hits.add(hit);
}
};
Map<String, String> params = new HashMap<String, String>(template.getAttributes());
String repositoryUrl = template.repositoryUrl;
TaskRepository repository = new TaskRepository(WebRepositoryConnector.REPOSITORY_TYPE, repositoryUrl);
for (Map.Entry<String, String> e : template.getAttributes().entrySet()) {
repository.setProperty(e.getKey(), e.getValue());
}
String url = repository.getRepositoryUrl();
// HACK: repositories that require auth
if ("http://demo.otrs.org".equals(url)) {
repository.setCredentials(AuthenticationType.REPOSITORY, new AuthenticationCredentials("skywalker",
"skywalker"), false);
} else if ("http://changelogic.araneaframework.org".equals(url)) {
repository.setCredentials(AuthenticationType.REPOSITORY,
new AuthenticationCredentials("mylar2", "mylar123"), false);
}
String queryUrlTemplate = template.taskQueryUrl;
String queryUrl = WebRepositoryConnector.evaluateParams(queryUrlTemplate, repository);
String queryPattern = template.getAttribute(WebRepositoryConnector.PROPERTY_QUERY_REGEXP);
String regexp = WebRepositoryConnector.evaluateParams(queryPattern, repository);
String taskPrefix = template.taskPrefixUrl;
IRepositoryQuery query = TasksUi.getRepositoryModel().createRepositoryQuery(repository);
query.setSummary(template.label);
query.setUrl(queryUrl);
query.setAttribute(WebRepositoryConnector.KEY_QUERY_PATTERN, queryPattern);
query.setAttribute(WebRepositoryConnector.KEY_QUERY_TEMPLATE, queryUrlTemplate);
query.setAttribute(WebRepositoryConnector.KEY_TASK_PREFIX, taskPrefix);
for (Map.Entry<String, String> entry : params.entrySet()) {
query.setAttribute(entry.getKey(), entry.getValue());
}
WebRepositoryConnector connector = new WebRepositoryConnector();
IStatus status = connector.performQuery(repository, query, collector, null, monitor);
// IStatus resultingStatus;
// if(regexp!=null && regexp.length()>0) {
// resultingStatus = WebRepositoryConnector.performQuery(buffer, regexp, null, monitor, collector,
// repository);
// } else {
// resultingStatus = WebRepositoryConnector.performRssQuery(queryUrl, monitor, collector, repository);
// }
assertTrue("Query failed\n" + queryUrl + "\n" + regexp + "\n" + status.toString(), queryStatus.isOK());
try {
assertTrue("Expected non-empty query result\n" + queryUrl + "\n" + regexp, hits.size() > 0);
} catch (Throwable t) {
String buffer = WebRepositoryConnector.fetchResource(queryUrl, params, repository);
System.err.println(queryUrl);
System.err.println(buffer);
System.err.println("--------------------------------------------------------");
throw t;
}
}
@Override
public String getName() {
return template.label;
}
private static final String excluded = "http://demo.otrs.org,";
public static TestSuite suite() {
TestSuite suite = new ActiveTestSuite(LiveWebConnectorTemplatesTest.class.getName());
Set<RepositoryTemplate> templates = TasksUiPlugin.getRepositoryTemplateManager().getTemplates(
WebRepositoryConnector.REPOSITORY_TYPE);
assertTrue("No templates found", templates.size() > 0);
for (RepositoryTemplate template : templates) {
if (excluded.indexOf(template.repositoryUrl + ",") == -1) {
suite.addTest(new LiveWebConnectorTemplatesTest(template));
}
}
return suite;
}
}