@Test
 public void testGetTaskUrl() throws Exception {
   assertThat(
       connector.getTaskUrl(actualFixture.repository().getRepositoryUrl(), "123"),
       equalTo(actualFixture.repository().getRepositoryUrl() + "/rest.cgi/bug/123"));
   assertThat(
       connector.getTaskUrl(actualFixture.repository().getRepositoryUrl(), "Test"),
       equalTo(actualFixture.repository().getRepositoryUrl() + "/rest.cgi/bug/Test"));
 }
  @Test
  public void testRepositoryCacheNotChanged() throws Exception {
    TaskRepository repository =
        new TaskRepository(
            actualFixture.repository().getConnectorKind(),
            actualFixture.repository().getRepositoryUrl());
    UserCredentials credentials = CommonTestUtil.getCredentials(PrivilegeLevel.USER);
    repository.setCredentials(
        org.eclipse.mylyn.commons.net.AuthenticationType.REPOSITORY,
        new AuthenticationCredentials(credentials.getUserName(), credentials.getPassword()),
        true);

    // load a configuration into the cache
    BugzillaRestConfiguration configuration = connector.getRepositoryConfiguration(repository);
    assertNotNull(configuration);

    // test that with an wrong user the configuration is removed from the cache
    String orgUserName = repository.getProperty("org.eclipse.mylyn.tasklist.repositories.username");
    repository.setProperty("org.eclipse.mylyn.tasklist.repositories.username", "xxx");
    BugzillaRestConfiguration configurationForCompare =
        connector.getRepositoryConfiguration(repository);
    assertNull(configurationForCompare);

    // load a configuration into the cache
    repository.setProperty("org.eclipse.mylyn.tasklist.repositories.username", orgUserName);
    configurationForCompare = connector.getRepositoryConfiguration(repository);
    assertThat(configuration, not(equalTo(configurationForCompare)));
    // the following three properties do not remove the entry from the cache
    repository.setProperty(RepositoryLocation.PROPERTY_LABEL, "nolabel");
    BugzillaRestConfiguration newConfiguration = connector.getRepositoryConfiguration(repository);
    assertNotNull(newConfiguration);
    assertEquals(configurationForCompare, newConfiguration);
    repository.setProperty(TaskRepository.OFFLINE, "false");
    newConfiguration = connector.getRepositoryConfiguration(repository);
    assertNotNull(newConfiguration);
    assertEquals(configurationForCompare, newConfiguration);
    repository.setProperty(TaskRepository.OFFLINE, "false");
    newConfiguration = connector.getRepositoryConfiguration(repository);
    assertNotNull(newConfiguration);
    assertEquals(configurationForCompare, newConfiguration);
    repository.setProperty(IRepositoryConstants.PROPERTY_ENCODING, "UTF-16");
    newConfiguration = connector.getRepositoryConfiguration(repository);
    assertNotNull(newConfiguration);
    assertEquals(configurationForCompare, newConfiguration);
    repository.setProperty(TaskRepository.PROXY_HOSTNAME, "nohost");
    newConfiguration = connector.getRepositoryConfiguration(repository);
    assertNotNull(newConfiguration);
    assertEquals(configurationForCompare, newConfiguration);
    repository.setProperty(TaskRepository.PROXY_PORT, "noport");
    newConfiguration = connector.getRepositoryConfiguration(repository);
    assertNotNull(newConfiguration);
    assertEquals(configurationForCompare, newConfiguration);
    repository.setProperty("org.eclipse.mylyn.tasklist.repositories.savePassword", "true");
    newConfiguration = connector.getRepositoryConfiguration(repository);
    assertNotNull(newConfiguration);
    assertEquals(configurationForCompare, newConfiguration);
  }
 @Test
 public void testGetRepositoryUrlFromTaskUrl() throws Exception {
   assertNull(
       connector.getRepositoryUrlFromTaskUrl(
           actualFixture.repository().getRepositoryUrl() + "/rest/bug/1"));
   assertThat(
       connector.getRepositoryUrlFromTaskUrl(
           actualFixture.repository().getRepositoryUrl() + "/rest.cgi/bug/1"),
       equalTo(actualFixture.repository().getRepositoryUrl()));
 }
 @Test
 public void testLoadCacheWrongRepository() throws Exception {
   TaskRepository taskRepository =
       new TaskRepository(
           connector.getConnectorKind(), "http://mylyn.org/bugzilla-rest-trunk-wrong/");
   AuthenticationCredentials credentials = new AuthenticationCredentials("username", "password");
   taskRepository.setCredentials(AuthenticationType.REPOSITORY, credentials, false);
   BugzillaRestConfiguration configuration = connector.getRepositoryConfiguration(taskRepository);
   assertNull(configuration);
 }
 @Test
 public void testUpdateTaskFromTaskData() throws Exception {
   TaskData taskData =
       new TaskData(
           new TaskAttributeMapper(actualFixture.repository()),
           connector.getConnectorKind(),
           actualFixture.repository().getRepositoryUrl(),
           "123");
   ITask task =
       new TaskTask(
           connector.getConnectorKind(), actualFixture.repository().getRepositoryUrl(), "");
   connector.updateTaskFromTaskData(actualFixture.repository(), task, taskData);
   assertThat(
       task.getUrl(),
       equalTo(actualFixture.repository().getRepositoryUrl() + "/rest.cgi/bug/123"));
 }
  @Test
  public void testReloadCache() throws Exception {
    connector = new BugzillaRestConnectorLocal(new Duration(5, TimeUnit.SECONDS));
    assertNotNull(connector);
    configuration = connector.getRepositoryConfiguration(actualFixture.repository());
    assertNotNull(configuration);

    // now wait until we know that the configuration is no longer valid
    // Parameter of Constructor from BugzillaRestConnector
    // (Default see BugzillaRestConnector.CONFIGURATION_CACHE_REFRESH_AFTER_WRITE_DURATION)
    BugzillaRestConfiguration configuration_new = waitAndGetConfiguration(6000L);
    assertEquals(configuration, configuration_new);

    waitForCacheRemoval();
    BugzillaRestConfiguration configuration_new1 =
        connector.getRepositoryConfiguration(actualFixture.repository());
    assertThat(configuration, not(configuration_new1));
  }
 @Test
 public void testLoadCache() throws Exception {
   BugzillaRestConfiguration configuration =
       connector.getRepositoryConfiguration(actualFixture.repository());
   assertNotNull(configuration);
   BugzillaRestConfiguration configuration_new = waitAndGetConfiguration(6000L);
   assertEquals(configuration, configuration_new);
   BugzillaRestConfiguration configuration_new1 = waitAndGetConfiguration(3000L);
   assertEquals(configuration, configuration_new1);
 }
 @Test
 public void testConfigurationFromConnector() throws CoreException, IOException {
   BugzillaRestConfiguration configuration =
       connector.getRepositoryConfiguration(actualFixture.repository());
   assertNotNull(configuration);
   assertEquals(
       IOUtils.toString(
           CommonTestUtil.getResource(
               this, actualFixture.getTestDataFolder() + "/configuration.json")),
       new Gson()
           .toJson(configuration)
           .replaceAll(actualFixture.repository().getRepositoryUrl(), "http://dummy.url"));
 }
  @Test
  public void testRepositoryCacheChanged() throws Exception {
    TaskRepository repository =
        new TaskRepository(
            actualFixture.repository().getConnectorKind(),
            actualFixture.repository().getRepositoryUrl());
    UserCredentials credentials = CommonTestUtil.getCredentials(PrivilegeLevel.USER);
    repository.setCredentials(
        org.eclipse.mylyn.commons.net.AuthenticationType.REPOSITORY,
        new AuthenticationCredentials(credentials.getUserName(), credentials.getPassword()),
        true);

    // load a configuration into the cache
    BugzillaRestConfiguration configuration = connector.getRepositoryConfiguration(repository);
    assertNotNull(configuration);

    // test that with an wrong user the configuration is removed from the cache
    String orgUserName = repository.getProperty("org.eclipse.mylyn.tasklist.repositories.username");
    repository.setProperty("org.eclipse.mylyn.tasklist.repositories.username", "xxx");
    BugzillaRestConfiguration configurationForCompare =
        connector.getRepositoryConfiguration(repository);
    assertNull(configurationForCompare);
    repository.setProperty("org.eclipse.mylyn.tasklist.repositories.username", orgUserName);
    configurationForCompare = connector.getRepositoryConfiguration(repository);
    assertNotNull(configurationForCompare);

    repository.setProperty(IRepositoryConstants.PROPERTY_TIMEZONE, "Europe/Brussels");
    BugzillaRestConfiguration newConfiguration = connector.getRepositoryConfiguration(repository);
    assertNotNull(newConfiguration);
    assertThat(configurationForCompare, not(equalTo(newConfiguration)));
    configurationForCompare = newConfiguration;

    repository.setProperty("version", "xxx");
    newConfiguration = connector.getRepositoryConfiguration(repository);
    assertNotNull(newConfiguration);
    assertThat(configurationForCompare, not(equalTo(newConfiguration)));
  }
 private BugzillaRestConfiguration waitAndGetConfiguration(long millis)
     throws InterruptedException, CoreException {
   Thread.sleep(millis);
   return connector.getRepositoryConfiguration(actualFixture.repository());
 }