diff options
Diffstat (limited to 'org.eclipse.mylyn.tasks.ui.tests/src/org/eclipse/mylyn/internal/tasks/ui/migrator/CompleteConnectorMigrationWizardTest.java')
-rw-r--r-- | org.eclipse.mylyn.tasks.ui.tests/src/org/eclipse/mylyn/internal/tasks/ui/migrator/CompleteConnectorMigrationWizardTest.java | 261 |
1 files changed, 261 insertions, 0 deletions
diff --git a/org.eclipse.mylyn.tasks.ui.tests/src/org/eclipse/mylyn/internal/tasks/ui/migrator/CompleteConnectorMigrationWizardTest.java b/org.eclipse.mylyn.tasks.ui.tests/src/org/eclipse/mylyn/internal/tasks/ui/migrator/CompleteConnectorMigrationWizardTest.java new file mode 100644 index 000000000..580224e31 --- /dev/null +++ b/org.eclipse.mylyn.tasks.ui.tests/src/org/eclipse/mylyn/internal/tasks/ui/migrator/CompleteConnectorMigrationWizardTest.java @@ -0,0 +1,261 @@ +/******************************************************************************* + * Copyright (c) 2015 Tasktop Technologies. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Tasktop EULA + * which accompanies this distribution, and is available at + * http://tasktop.com/legal + *******************************************************************************/ + +package org.eclipse.mylyn.internal.tasks.ui.migrator; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.jface.wizard.IWizardContainer; +import org.eclipse.jface.wizard.IWizardPage; +import org.eclipse.jface.wizard.WizardDialog; +import org.eclipse.mylyn.commons.workbench.WorkbenchUtil; +import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery; +import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; +import org.eclipse.mylyn.internal.tasks.ui.migrator.CompleteConnectorMigrationWizard.MapContentProvider; +import org.eclipse.mylyn.internal.tasks.ui.views.TaskListView; +import org.eclipse.mylyn.tasks.core.TaskRepository; +import org.eclipse.mylyn.tasks.ui.TaskElementLabelProvider; +import org.eclipse.mylyn.tests.util.TestFixture; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Text; +import org.eclipse.swt.widgets.Tree; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; + +public class CompleteConnectorMigrationWizardTest { + + private CompleteConnectorMigrationWizard wizard; + + private ConnectorMigrator migrator; + + private ConnectorMigrationUi migrationUi; + + @SuppressWarnings("unchecked") + @Before + public void setUp() { + DefaultTasksState tasksState = new DefaultTasksState(); + migrationUi = spy(new ConnectorMigrationUi(TaskListView.getFromActivePerspective(), + TasksUiPlugin.getBackupManager(), tasksState)); + doNothing().when(migrationUi).warnOfValidationFailure((List<TaskRepository>) any(List.class)); + doNothing().when(migrationUi).notifyMigrationComplete(); + migrator = spy(new ConnectorMigrator(ImmutableMap.of("mock", "mock.new"), "", tasksState, migrationUi)); + } + + @After + public void tearDown() throws Exception { + TestFixture.resetTaskList(); + } + + @Test + public void addPages() { + createWizard(new CompleteConnectorMigrationWizard(migrator)); + assertEquals(2, wizard.getPageCount()); + } + + @Test + public void firstPage() { + IWizardContainer container = createWizard(new CompleteConnectorMigrationWizard(migrator)); + IWizardPage firstPage = container.getCurrentPage(); + assertEquals("Have You Recreated Your Queries?", firstPage.getTitle()); + assertEquals( + "Migration will remove your old queries. Please ensure you have created the new queries you want. " + + "Your old and new queries are shown below and you can edit them by double-clicking.", + firstPage.getMessage()); + assertTrue(firstPage.getControl() instanceof Composite); + Composite control = (Composite) firstPage.getControl(); + assertEquals(4, control.getChildren().length); + assertTrue(control.getChildren()[0] instanceof Label); + assertTrue(control.getChildren()[1] instanceof Label); + assertTrue(control.getChildren()[2] instanceof Tree); + assertTrue(control.getChildren()[3] instanceof Tree); + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Test + public void queryTreeShowsOnlySelectedConnectors() { + migrator = new ConnectorMigrator(ImmutableMap.of("mock", "mock.new", "kind", "kind.new"), "", + new DefaultTasksState(), migrationUi); + migrator.setConnectorsToMigrate(ImmutableList.of("kind")); + createWizard(new CompleteConnectorMigrationWizard(migrator)); + ArgumentCaptor<Collection> captor = ArgumentCaptor.forClass(Collection.class); + verify(wizard, times(2)).createRepositoryQueryMap(captor.capture()); + assertEquals(ImmutableSet.of("kind"), ImmutableSet.copyOf(captor.getAllValues().get(0))); + assertEquals(ImmutableSet.of("kind.new"), ImmutableSet.copyOf(captor.getAllValues().get(1))); + + migrator = new ConnectorMigrator(ImmutableMap.of("mock", "mock.new", "kind", "kind.new"), "", + new DefaultTasksState(), migrationUi); + migrator.setConnectorsToMigrate(ImmutableList.of("mock", "kind")); + createWizard(new CompleteConnectorMigrationWizard(migrator)); + captor = ArgumentCaptor.forClass(Collection.class); + verify(wizard, times(2)).createRepositoryQueryMap(captor.capture()); + assertEquals(ImmutableSet.of("mock", "kind"), ImmutableSet.copyOf(captor.getAllValues().get(0))); + assertEquals(ImmutableSet.of("mock.new", "kind.new"), ImmutableSet.copyOf(captor.getAllValues().get(1))); + } + + @Test + public void secondPage() { + IWizardContainer container = createWizard(new CompleteConnectorMigrationWizard(migrator)); + IWizardPage firstPage = container.getCurrentPage(); + IWizardPage secondPage = firstPage.getNextPage(); + assertEquals("Complete Migration", secondPage.getTitle()); + assertEquals("Clicking finish will migrate your tasks and private data. This may take a while.", + secondPage.getMessage()); + assertTrue(secondPage.getControl() instanceof Composite); + Composite control = (Composite) secondPage.getControl(); + assertEquals(1, control.getChildren().length); + assertTrue(control.getChildren()[0] instanceof Text); + String text = ((Text) control.getChildren()[0]).getText(); + assertTrue(text.contains("When you click finish, your context, scheduled dates, private notes and other data " + + "will be migrated to the new connectors. Any tasks in your task list that are not included in the new " + + "queries you created will be downloaded using the new connectors. The old tasks, " + + "queries, and repositories will be deleted.")); + assertTrue(text.contains("This may take a while. You should not use the task list or task editor while this is happening. " + + "You will be prompted when migration is complete.")); + assertTrue(text.contains("You will be able to " + + "undo the migration by selecting \"Restore Tasks from History\" in the Task List view menu and choosing the " + + "connector-migration-*.zip file stored in <workspace>/.metadata/.mylyn/backup. This will restore your task " + + "list and repositories to the state they were in before the migration, but any data stored by 3rd party " + + "plugins for Mylyn may be lost")); + } + + @Test + public void performFinish() throws InvocationTargetException, InterruptedException, IOException { + createWizard(new CompleteConnectorMigrationWizard(migrator)); + assertTrue(wizard.performFinish()); + } + + @Test + public void isPageComplete() throws Exception { + IWizardContainer container = createWizard(new CompleteConnectorMigrationWizard(migrator)); + IWizardPage firstPage = container.getCurrentPage(); + IWizardPage secondPage = firstPage.getNextPage(); + assertTrue(firstPage.isPageComplete()); + assertFalse(secondPage.isPageComplete()); + + container.showPage(secondPage); + assertTrue(firstPage.isPageComplete()); + assertTrue(secondPage.isPageComplete()); + } + + @Test + public void createQueryTree() throws Exception { + TaskRepository repository = createRepository("mock", "http://mock"); + Map<TaskRepository, ? extends Set<RepositoryQuery>> queries = ImmutableMap.of(repository, + ImmutableSet.of(new RepositoryQuery("mock", "mock"))); + TreeViewer viewer = new CompleteConnectorMigrationWizard(migrator).createQueryTree(WorkbenchUtil.getShell(), + queries); + assertEquals(queries, viewer.getInput()); + assertTrue(viewer.getContentProvider() instanceof MapContentProvider); + assertTrue(viewer.getLabelProvider() instanceof TaskElementLabelProvider); + assertNotNull(((TaskElementLabelProvider) viewer.getLabelProvider()).getImage(repository)); + assertEquals("http://mock", ((TaskElementLabelProvider) viewer.getLabelProvider()).getText(repository)); + + assertEquals(0, viewer.getExpandedElements().length); + spinEventLoop(); + assertEquals(1, viewer.getExpandedElements().length); + } + + @Test + public void createRepositoryQueryMap() throws Exception { + TaskRepository repository1 = createRepository("mock", "http://mock"); + TaskRepository repository2 = createRepository("mock", "http://mock2"); + ImmutableSet<TaskRepository> repositories = ImmutableSet.of(repository1, repository2); + RepositoryQuery query1 = createQuery(repository1); + RepositoryQuery query2 = createQuery(repository1); + RepositoryQuery query3 = createQuery(repository2); + RepositoryQuery query4 = createQuery(repository2); + + Map<TaskRepository, Set<RepositoryQuery>> map = // + new CompleteConnectorMigrationWizard(migrator).createRepositoryQueryMap(ImmutableList.of("mock")); + assertEquals(repositories, map.keySet()); + assertEquals(ImmutableSet.of(query1, query2), map.get(repository1)); + assertEquals(ImmutableSet.of(query3, query4), map.get(repository2)); + } + + @Test + public void createRepositoryQueryMapExcludesRepositoryWithNoQueries() throws Exception { + TaskRepository repository = createRepository("mock", "http://mock"); + createRepository("mock", "http://mock2"); + RepositoryQuery query = createQuery(repository); + + Map<TaskRepository, Set<RepositoryQuery>> map = // + new CompleteConnectorMigrationWizard(migrator).createRepositoryQueryMap(ImmutableList.of("mock")); + assertEquals(ImmutableSet.of(repository), map.keySet()); + assertEquals(ImmutableSet.of(query), map.get(repository)); + } + + @Test + public void createRepositoryQueryMapMigratedQuery() throws Exception { + TaskRepository repository = createRepository("mock", "http://mock"); + TaskRepository migratedRepository = createRepository("mock-new", "http://mock"); + RepositoryQuery query = createQuery(repository); + RepositoryQuery migratedQuery = createQuery(migratedRepository); + + Map<TaskRepository, Set<RepositoryQuery>> map = // + new CompleteConnectorMigrationWizard(migrator).createRepositoryQueryMap(ImmutableList.of("mock")); + assertEquals(ImmutableSet.of(repository), map.keySet()); + assertEquals(ImmutableSet.of(query), map.get(repository)); + + map = new CompleteConnectorMigrationWizard(migrator).createRepositoryQueryMap(ImmutableList.of("mock-new")); + assertEquals(ImmutableSet.of(migratedRepository), map.keySet()); + assertEquals(ImmutableSet.of(migratedQuery), map.get(migratedRepository)); + } + + protected TaskRepository createRepository(String kind, String url) { + TaskRepository repository = new TaskRepository(kind, url); + migrator.getRepositoryManager().addRepository(repository); + return repository; + } + + protected RepositoryQuery createQuery(TaskRepository repository) { + RepositoryQuery query = new RepositoryQuery(repository.getConnectorKind(), repository.getConnectorKind() + + repository.getRepositoryUrl() + Math.random()); + query.setRepositoryUrl(repository.getRepositoryUrl()); + TasksUiPlugin.getTaskList().addQuery(query); + return query; + } + + private IWizardContainer createWizard(CompleteConnectorMigrationWizard wiz) { + wizard = spy(wiz); + WizardDialog dialog = new WizardDialog(WorkbenchUtil.getShell(), wizard); + dialog.create(); + IWizardContainer container = spy(wizard.getContainer()); + when(wizard.getContainer()).thenReturn(container); + return container; + } + + private void spinEventLoop() { + while (Display.getCurrent().readAndDispatch()) { + } + } +} |