/*******************************************************************************
* Copyright (c) 2016 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.openshift.test.ui.server;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.jboss.tools.openshift.common.core.connection.ConnectionsRegistrySingleton;
import org.jboss.tools.openshift.common.core.connection.IConnection;
import org.jboss.tools.openshift.core.connection.Connection;
import org.jboss.tools.openshift.internal.ui.server.ServerResourceViewModel;
import org.jboss.tools.openshift.internal.ui.treeitem.ObservableTreeItem;
import org.jboss.tools.openshift.test.util.ResourceMocks;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.openshift.restclient.ResourceKind;
import com.openshift.restclient.model.IProject;
import com.openshift.restclient.model.IResource;
import com.openshift.restclient.model.IService;
/**
* @author Andre Dietisheim
*/
public class ServerResourceViewModelWithServiceTest {
private ServerResourceViewModel model;
private IService selectedService;
private Connection connection;
@Before
public void setUp() {
this.connection = ResourceMocks.create3ProjectsConnection();
ConnectionsRegistrySingleton.getInstance().add(connection);
this.model = new ServerResourceViewModel(this.selectedService = ResourceMocks.PROJECT2_SERVICES[1], connection);
model.loadResources();
}
@After
public void tearDown() {
ConnectionsRegistrySingleton.getInstance().remove(connection);
}
@Test
public void shouldReturnConnection() {
// given
// when
IConnection connection = model.getConnection();
// then
assertThat(connection).isEqualTo(this.connection);
}
@Test
public void shouldNotLoadResourcesBeforeBeingToldTo() {
// given
Connection connection = ResourceMocks.createConnection("http://10.1.2.2:8443", "dev@paas.redhat.com");
new ServerResourceViewModel(connection);
// when
// then
verify(connection, never()).getResources(any());
verify(connection, never()).getResources(any(), any());
}
@Test
public void shouldLoadResourcesWhenToldTo() {
// given
Connection connection = ResourceMocks.createConnection("http://10.1.2.2:8443", "dev@paas.redhat.com");
ServerResourceViewModel model = new ServerResourceViewModel(connection);
model.loadResources();
// when
// then
verify(connection, atLeastOnce()).getResources(any());
}
@Test
public void shouldReturnNullServiceIfNoConnectionIsSet() {
// given
ServerResourceViewModel model = new ServerResourceViewModel(null);
model.loadResources();
// when
IResource resource = model.getResource();
// then
assertThat(resource).isNull();
}
@Test
public void shouldSetNewConnectionIfLoadingWithConnection() {
// given
ServerResourceViewModel model = new ServerResourceViewModel(null);
model.loadResources();
assertThat(model.getConnection()).isNull();
// when
model.loadResources(connection);
// then
assertThat(model.getConnection()).isEqualTo(connection);
}
@Test
public void shouldReturnNullResourceIfResourcesNotLoaded() {
// given
ServerResourceViewModel model = new ServerResourceViewModel(null);
// when
IResource resource = model.getResource();
// then
assertThat(resource).isNull();
}
@Test
public void shouldReturnResourceIfResourcesAreLoaded() {
// given
model.loadResources();
// when
IResource resource = model.getResource();
// then
assertThat(resource).isEqualTo(selectedService);
}
@Test
public void shouldReturn1stServiceInListIfInitializedServiceIsNotInListOfAllServices() {
// given
IService otherService = ResourceMocks.createResource(IService.class, ResourceKind.SERVICE);
ServerResourceViewModel model = new ServerResourceViewModel(otherService, connection);
model.loadResources();
// when
IResource service = model.getResource();
// then
assertThat(service).isEqualTo(ResourceMocks.PROJECT2_SERVICES[0]);
}
@Test
public void shouldReturnServiceForGivenName() {
// given
// when
IService service = model.getService(ResourceMocks.PROJECT2_SERVICES[2].getName());
// then
assertThat(service).isEqualTo(ResourceMocks.PROJECT2_SERVICES[2]);
}
@Test
public void shouldSetNewConnectionIfLoadResourcesWithConnection() {
// given
ServerResourceViewModel model = new ServerResourceViewModel(null);
model.loadResources();
assertThat(model.getConnection()).isNull();
// when
model.loadResources(connection);
// then
assertThat(model.getConnection()).isEqualTo(connection);
}
@Test
public void shouldReturnNewServiceItemsIfLoadResourcesWithConnection() {
// given
List<ObservableTreeItem> serviceItems = new ArrayList<>(model.getResourceItems());
Connection connection = ResourceMocks.createConnection("http://localhost:8080", "dev@42.org");
IProject project = ResourceMocks.createResource(IProject.class, ResourceKind.PROJECT);
when(connection.getResources(ResourceKind.PROJECT))
.thenReturn(Collections.singletonList(project));
IService service = ResourceMocks.createResource(IService.class, ResourceKind.SERVICE);
when(project.getResources(ResourceKind.SERVICE))
.thenReturn(Collections.singletonList(service));
// when
model.loadResources(connection);
// then
List<ObservableTreeItem> newServiceItems = model.getResourceItems();
assertThat(newServiceItems).isNotEqualTo(serviceItems);
}
@Test
public void shouldReturnNewSelectedServiceIfLoadResourcesWithConnection() {
// given
IResource selectedService = model.getResource();
Connection connection = ResourceMocks.createConnection("https://localhost:8181", "ops@42.org");
ConnectionsRegistrySingleton.getInstance().add(connection);
try {
IProject project = ResourceMocks.createResource(IProject.class, ResourceKind.PROJECT);
when(connection.getResources(ResourceKind.PROJECT))
.thenReturn(Collections.singletonList(project));
IService service = ResourceMocks.createResource(IService.class, ResourceKind.SERVICE);
when(project.getResources(ResourceKind.SERVICE))
.thenReturn(Collections.singletonList(service));
// when
model.loadResources(connection);
// then
IResource newSelectedService = model.getResource();
assertThat(selectedService).isNotEqualTo(newSelectedService);
} finally {
ConnectionsRegistrySingleton.getInstance().remove(connection);
}
}
}