blob: 42db6e0ffec1ff4888b8e9ce7d17d1332974d0a2 [file] [log] [blame]
package com.intellij.tasks.integration;
import com.intellij.tasks.Task;
import com.intellij.tasks.TaskTestUtil;
import com.intellij.tasks.generic.GenericRepository;
import com.intellij.tasks.generic.GenericRepositoryType;
import org.jetbrains.annotations.NotNull;
import static com.intellij.tasks.TaskTestUtil.TaskBuilder;
import static com.intellij.tasks.TaskTestUtil.assertTasksEqual;
/**
* @author Mikhail Golubev
*/
public class SprintlyIntegrationTest extends GenericSubtypeTestCase {
private static final String TASK_LIST_RESPONSE = "[\n" +
" {\n" +
" \"number\" : 1,\n" +
" \"progress\" : {\n" +
" \"started_at\" : \"2013-09-03T16:12:51+00:00\",\n" +
" \"triaged_at\" : \"2013-09-03T16:12:35+00:00\"\n" +
" },\n" +
" \"status\" : \"in-progress\",\n" +
" \"last_modified\" : \"2013-09-03T16:12:51+00:00\",\n" +
" \"score\" : \"~\",\n" +
" \"description\" : \"These SEGFAULTs oppress me\",\n" +
" \"tags\" : [\n" +
" \"bar\",\n" +
" \"tag\",\n" +
" \"foo\"\n" +
" ],\n" +
" \"email\" : {\n" +
" \"files\" : \"files-505027@items.sprint.ly\",\n" +
" \"discussion\" : \"discussion-505027@items.sprint.ly\"\n" +
" },\n" +
" \"created_at\" : \"2013-09-03T16:10:43+00:00\",\n" +
" \"assigned_to\" : {\n" +
" \"last_login\" : \"2013-09-03T16:02:32+00:00\",\n" +
" \"email\" : \"qsolo825@gmail.com\",\n" +
" \"created_at\" : \"2013-09-03T16:02:30+00:00\",\n" +
" \"id\" : 17259,\n" +
" \"last_name\" : \"Golubev\",\n" +
" \"first_name\" : \"Mikhail\"\n" +
" },\n" +
" \"type\" : \"defect\",\n" +
" \"product\" : {\n" +
" \"name\" : \"My Enormous Project\",\n" +
" \"id\" : 14182,\n" +
" \"archived\" : false\n" +
" },\n" +
" \"title\" : \"Nasty Bug!\",\n" +
" \"short_url\" : \"http://sprint.ly/i/14182/1/\",\n" +
" \"created_by\" : {\n" +
" \"last_login\" : \"2013-09-03T16:02:32+00:00\",\n" +
" \"email\" : \"qsolo825@gmail.com\",\n" +
" \"created_at\" : \"2013-09-03T16:02:30+00:00\",\n" +
" \"id\" : 17259,\n" +
" \"last_name\" : \"Golubev\",\n" +
" \"first_name\" : \"Mikhail\"\n" +
" }\n" +
" },\n" +
" {\n" +
" \"number\" : 2,\n" +
" \"progress\" : {\n" +
" \"triaged_at\" : \"2013-09-03T16:14:08+00:00\"\n" +
" },\n" +
" \"status\" : \"backlog\",\n" +
" \"last_modified\" : \"2013-09-04T10:18:02+00:00\",\n" +
" \"score\" : \"~\",\n" +
" \"description\" : \"Finish Sprint.ly connector\",\n" +
" \"tags\" : [\n" +
" \"foo\"\n" +
" ],\n" +
" \"email\" : {\n" +
" \"files\" : \"files-505035@items.sprint.ly\",\n" +
" \"discussion\" : \"discussion-505035@items.sprint.ly\"\n" +
" },\n" +
" \"created_at\" : \"2013-09-03T16:13:54+00:00\",\n" +
" \"assigned_to\" : {\n" +
" \"last_login\" : \"2013-09-03T16:02:32+00:00\",\n" +
" \"email\" : \"qsolo825@gmail.com\",\n" +
" \"created_at\" : \"2013-09-03T16:02:30+00:00\",\n" +
" \"id\" : 17259,\n" +
" \"last_name\" : \"Golubev\",\n" +
" \"first_name\" : \"Mikhail\"\n" +
" },\n" +
" \"type\" : \"task\",\n" +
" \"product\" : {\n" +
" \"name\" : \"My Enormous Project\",\n" +
" \"id\" : 14182,\n" +
" \"archived\" : false\n" +
" },\n" +
" \"title\" : \"Some task\",\n" +
" \"short_url\" : \"http://sprint.ly/i/14182/2/\",\n" +
" \"created_by\" : {\n" +
" \"last_login\" : \"2013-09-03T16:02:32+00:00\",\n" +
" \"email\" : \"qsolo825@gmail.com\",\n" +
" \"created_at\" : \"2013-09-03T16:02:30+00:00\",\n" +
" \"id\" : 17259,\n" +
" \"last_name\" : \"Golubev\",\n" +
" \"first_name\" : \"Mikhail\"\n" +
" }\n" +
" }\n" +
"]\n";
public static final String SINGLE_TASK_RESPONSE = "{\n" +
" \"number\" : 1,\n" +
" \"progress\" : {\n" +
" \"started_at\" : \"2013-09-03T16:12:51+00:00\",\n" +
" \"triaged_at\" : \"2013-09-03T16:12:35+00:00\"\n" +
" },\n" +
" \"status\" : \"in-progress\",\n" +
" \"last_modified\" : \"2013-09-04T13:53:14+00:00\",\n" +
" \"score\" : \"~\",\n" +
" \"description\" : \"This is this horrible bug's description\",\n" +
" \"tags\" : [\n" +
" \"bar\",\n" +
" \"tag\",\n" +
" \"foo\"\n" +
" ],\n" +
" \"email\" : {\n" +
" \"files\" : \"files-505027@items.sprint.ly\",\n" +
" \"discussion\" : \"discussion-505027@items.sprint.ly\"\n" +
" },\n" +
" \"created_at\" : \"2013-09-03T16:10:43+00:00\",\n" +
" \"assigned_to\" : {\n" +
" \"last_login\" : \"2013-09-03T16:02:32+00:00\",\n" +
" \"email\" : \"qsolo825@gmail.com\",\n" +
" \"created_at\" : \"2013-09-03T16:02:30+00:00\",\n" +
" \"id\" : 17259,\n" +
" \"last_name\" : \"Golubev\",\n" +
" \"first_name\" : \"Mikhail\"\n" +
" },\n" +
" \"type\" : \"defect\",\n" +
" \"product\" : {\n" +
" \"name\" : \"My Enormous Project\",\n" +
" \"id\" : 14182,\n" +
" \"archived\" : false\n" +
" },\n" +
" \"title\" : \"Nasty Bug!\",\n" +
" \"short_url\" : \"http://sprint.ly/i/14182/1/\",\n" +
" \"created_by\" : {\n" +
" \"last_login\" : \"2013-09-03T16:02:32+00:00\",\n" +
" \"email\" : \"qsolo825@gmail.com\",\n" +
" \"created_at\" : \"2013-09-03T16:02:30+00:00\",\n" +
" \"id\" : 17259,\n" +
" \"last_name\" : \"Golubev\",\n" +
" \"first_name\" : \"Mikhail\"\n" +
" }\n" +
"}\n";
public void testParsingTaskList() throws Exception {
Task[] tasks = myRepository.getActiveResponseHandler().parseIssues(TASK_LIST_RESPONSE, 50);
assertTasksEqual(new Task[]{
new TaskBuilder("1", "Nasty Bug!", myRepository)
.withDescription("These SEGFAULTs oppress me")
.withIssueUrl("http://sprint.ly/i/14182/1/")
.withUpdated("2013-09-03 16:12:51")
.withCreated("2013-09-03 16:10:43"),
new TaskBuilder("2", "Some task", myRepository)
.withDescription("Finish Sprint.ly connector")
.withIssueUrl("http://sprint.ly/i/14182/2/")
.withUpdated("2013-09-04 10:18:02")
.withCreated("2013-09-03 16:13:54")
}, tasks);
}
public void testParsingSingleTask() throws Exception {
Task task = myRepository.getActiveResponseHandler().parseIssue(SINGLE_TASK_RESPONSE);
assertTasksEqual(
new TaskBuilder("1", "Nasty Bug!", myRepository)
.withDescription("This is this horrible bug's description")
.withIssueUrl("http://sprint.ly/i/14182/1/")
.withUpdated("2013-09-04 13:53:14")
.withCreated("2013-09-03 16:10:43"),
task);
}
@NotNull
@Override
protected GenericRepository createRepository(GenericRepositoryType genericType) {
return (GenericRepository)genericType.new SprintlyRepository().createRepository();
}
}