/*
* Copyright 2013 Hewlett-Packard Development Company, L.P
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.hp.alm.ali.idea.tasks;
import com.hp.alm.ali.ServerVersion;
import com.hp.alm.ali.idea.IntellijTest;
import com.hp.alm.ali.idea.RestInvocations;
import com.hp.alm.ali.idea.model.Entity;
import com.hp.alm.ali.idea.services.ActiveItemService;
import com.hp.alm.ali.idea.util.ApplicationUtil;
import com.hp.alm.ali.idea.util.DetailUtil;
import com.intellij.openapi.project.Project;
import com.intellij.tasks.LocalTask;
import com.intellij.tasks.Task;
import com.intellij.tasks.TaskListenerAdapter;
import com.intellij.tasks.TaskManager;
import org.junit.*;
public class TaskManagerIntegrationTest extends IntellijTest {
private TaskManagerIntegration taskManagerIntegration;
private TaskManager taskManager;
private ActiveItemService activeItemService;
@Before
public void preClean() {
taskManagerIntegration = getComponent(TaskManagerIntegration.class);
taskManager = getComponent(TaskManager.class);
activeItemService = getComponent(ActiveItemService.class);
// prevent detail opening when manipulating tasks in this test
taskManagerIntegration.removeListener(activeItemService);
}
@After
public void postClean() {
taskManagerIntegration.addListener(activeItemService);
}
public TaskManagerIntegrationTest() {
super(ServerVersion.AGM);
}
@Test
public void testActivate() {
Entity defect = new Entity("defect", 1);
defect.setProperty("name", "Name...");
defect.setProperty("description", "Description...");
defect.setProperty("dev-comments", "Comments...");
defect.setProperty("last-modified", "2012-12-12 12:12:12");
defect.setProperty("creation-time", "2012-12-12");
taskManagerIntegration.activate(defect);
Assert.assertEquals("defect #1: Name...", taskManager.getActiveTask().getPresentableName());
}
@Test
public void testActivate_uninitialized() {
RestInvocations.loadMetadata(handler, "defect");
RestInvocations.loadMetadata(handler, "release-backlog-item");
handler.addRequest("GET", "/qcbin/rest/domains/domain/projects/project/defects?fields=actual-fix-time,attachment,in-bucket,changeset,build-closed,closing-version,closing-date,dev-comments,id,status,description,detected-by,build-detected,detected-in-rcyc,detected-in-rel,detection-version,creation-time,estimated-fix-time,extended-reference,fixed-on-date,has-change,has-linkage,has-others-linkage,last-modified,planned-closing-ver,priority,user-04,user-03,reproducible,severity,subject,name,user-02,user-01,watch-id,release-backlog-item.product-id,release-backlog-item.owner,release-backlog-item.blocked,release-backlog-item.entity-name,release-backlog-item.entity-type,release-backlog-item.feature-id,release-backlog-item.invested,release-backlog-item.kanban-status-id,release-backlog-item.linked-entities-info,release-backlog-item.no-of-sons,release-backlog-item.kanban-parent-status-id,release-backlog-item.rank,release-backlog-item.release-id,release-backlog-item.entity-id,release-backlog-item.remaining,release-backlog-item.sprint-id,release-backlog-item.status,release-backlog-item.kan-parent-duration,release-backlog-item.story-points,release-backlog-item.kan-status-duration,release-backlog-item.team-id,release-backlog-item.theme-id,release-backlog-item.estimated,release-backlog-item.watch-id,release-backlog-item.id,product-group-id&query={id[86]}&order-by={}", 200)
.content("entityServiceTest_entity.xml");
Entity defect = new Entity("defect", 86);
handler.async();
taskManager.addTaskListener(new TaskListenerAdapter() {
@Override
public void taskActivated(final LocalTask localTask) {
taskManager.removeTaskListener(this);
handler.done(new Runnable() {
@Override
public void run() {
Assert.assertEquals("defect #86: somewhat", localTask.getPresentableName());
}
});
}
});
taskManagerIntegration.activate(defect);
}
@Test
public void testActivate_default() {
handler.async();
ApplicationUtil.invokeLaterIfNeeded(new Runnable() {
@Override
public void run() {
testActivate();
taskManagerIntegration.activate(null);
Assert.assertEquals("Default task", taskManager.getActiveTask().getPresentableName());
handler.done();
}
});
}
@Test
public void testTaskManagerEvent() {
handler.async(2);
getComponent(DetailUtil.class)._setLauncher(new DetailUtil.Launcher() {
@Override
public void loadDetail(Project project, final Entity entity, final boolean show, final boolean select) {
handler.done(new Runnable() {
@Override
public void run() {
Assert.assertEquals("defect", entity.getType());
Assert.assertEquals(85, entity.getId());
Assert.assertEquals(true, show);
Assert.assertEquals(true, select);
}
});
}
});
ApplicationUtil.invokeLaterIfNeeded(new Runnable() {
@Override
public void run() {
activateDefault();
taskManagerIntegration.addListener(new TaskManagerIntegration.Listener() {
@Override
public void taskEntityActivated(final Entity entity) {
taskManagerIntegration.removeListener(this);
handler.done(new Runnable() {
@Override
public void run() {
Assert.assertEquals("defect", entity.getType());
Assert.assertEquals(85, entity.getId());
}
});
}
});
HpAlmTask task = new HpAlmTask(getProject(), new Entity("defect", 85));
taskManager.activateTask(task, false);
}
});
}
@Test
public void testTaskManagerEvent_default() {
handler.async();
ApplicationUtil.invokeLaterIfNeeded(new Runnable() {
@Override
public void run() {
testActivate();
taskManagerIntegration.addListener(new TaskManagerIntegration.Listener() {
@Override
public void taskEntityActivated(final Entity entity) {
taskManagerIntegration.removeListener(this);
handler.done(new Runnable() {
@Override
public void run() {
Assert.assertNull(entity);
}
});
}
});
activateDefault();
}
});
}
private void activateDefault() {
Task task = taskManagerIntegration._getDefaultTask();
Assert.assertNotNull(task);
taskManager.activateTask(task, false);
}
}