/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
* 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 org.kie.workbench.common.stunner.core.client.service;
import org.jboss.errai.common.client.api.Caller;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.workbench.common.stunner.core.client.api.ClientFactoryManager;
import org.kie.workbench.common.stunner.core.diagram.Diagram;
import org.kie.workbench.common.stunner.core.diagram.Metadata;
import org.kie.workbench.common.stunner.core.graph.Element;
import org.kie.workbench.common.stunner.core.service.FactoryService;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.uberfire.mocks.CallerMock;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class ClientFactoryServicesTest {
@Mock
ClientFactoryManager clientFactoryManager;
@Mock
FactoryService factoryService;
@Mock
Metadata metadata;
private Caller<FactoryService> factoryServiceCaller;
;
private ClientFactoryService tested;
@Before
public void setup() throws Exception {
this.factoryServiceCaller = new CallerMock<FactoryService>(factoryService);
this.tested = new ClientFactoryService(clientFactoryManager,
factoryServiceCaller);
}
@Test
@SuppressWarnings("unchecked")
public void testNewDefinitionLocal() {
String id = "id1";
ServiceCallback<Object> callback = mock(ServiceCallback.class);
Object def = mock(Object.class);
when(clientFactoryManager.newDefinition(eq(id))).thenReturn(def);
tested.newDefinition(id,
callback);
verify(callback,
times(1)).onSuccess(eq(def));
verify(clientFactoryManager,
times(1)).newDefinition(eq(id));
verify(clientFactoryManager,
times(0)).newDefinition(any(Class.class));
verify(factoryService,
times(0)).newDefinition(anyString());
verify(factoryService,
times(0)).newDefinition(any(Class.class));
}
@Test
@SuppressWarnings("unchecked")
public void testNewDefinitionRemote() {
String id = "id1";
ServiceCallback<Object> callback = mock(ServiceCallback.class);
Object def = mock(Object.class);
when(clientFactoryManager.newDefinition(eq(id))).thenReturn(null);
when(factoryService.newDefinition(eq(id))).thenReturn(def);
tested.newDefinition(id,
callback);
verify(callback,
times(1)).onSuccess(eq(def));
verify(clientFactoryManager,
times(1)).newDefinition(eq(id));
verify(clientFactoryManager,
times(0)).newDefinition(any(Class.class));
verify(factoryService,
times(1)).newDefinition(eq(id));
verify(factoryService,
times(0)).newDefinition(any(Class.class));
}
private class MyType {
}
@Test
@SuppressWarnings("unchecked")
public void testNewDefinitionByTpeLocal() {
ServiceCallback<MyType> callback = mock(ServiceCallback.class);
MyType def = mock(MyType.class);
when(clientFactoryManager.newDefinition(eq(MyType.class))).thenReturn(def);
tested.newDefinition(MyType.class,
callback);
verify(callback,
times(1)).onSuccess(eq(def));
verify(clientFactoryManager,
times(0)).newDefinition(anyString());
verify(clientFactoryManager,
times(1)).newDefinition(eq(MyType.class));
verify(factoryService,
times(0)).newDefinition(anyString());
verify(factoryService,
times(0)).newDefinition(any(Class.class));
}
@Test
@SuppressWarnings("unchecked")
public void testNewDefinitionByTpeRemote() {
ServiceCallback<MyType> callback = mock(ServiceCallback.class);
MyType def = mock(MyType.class);
when(clientFactoryManager.newDefinition(eq(MyType.class))).thenReturn(null);
when(factoryService.newDefinition(eq(MyType.class))).thenReturn(def);
tested.newDefinition(MyType.class,
callback);
verify(callback,
times(1)).onSuccess(eq(def));
verify(clientFactoryManager,
times(0)).newDefinition(anyString());
verify(clientFactoryManager,
times(1)).newDefinition(eq(MyType.class));
verify(factoryService,
times(0)).newDefinition(anyString());
verify(factoryService,
times(1)).newDefinition(eq(MyType.class));
}
@Test
@SuppressWarnings("unchecked")
public void testNewElementLocal() {
String id = "id1";
String defSetId = "defSet1";
ServiceCallback<Element> callback = mock(ServiceCallback.class);
Element def = mock(Element.class);
when(clientFactoryManager.newElement(eq(id),
eq(defSetId))).thenReturn(def);
tested.newElement(id,
defSetId,
callback);
verify(callback,
times(1)).onSuccess(eq(def));
verify(clientFactoryManager,
times(1)).newElement(eq(id),
eq(defSetId));
verify(clientFactoryManager,
times(0)).newElement(anyString(),
any(Class.class));
verify(factoryService,
times(0)).newElement(anyString(),
anyString());
verify(factoryService,
times(0)).newElement(anyString(),
any(Class.class));
}
@Test
@SuppressWarnings("unchecked")
public void testNewElementRemote() {
String id = "id1";
String defSetId = "defSet1";
ServiceCallback<Element> callback = mock(ServiceCallback.class);
Element def = mock(Element.class);
when(clientFactoryManager.newElement(eq(id),
eq(defSetId))).thenReturn(null);
when(factoryService.newElement(eq(id),
eq(defSetId))).thenReturn(def);
tested.newElement(id,
defSetId,
callback);
verify(callback,
times(1)).onSuccess(eq(def));
verify(clientFactoryManager,
times(1)).newElement(eq(id),
eq(defSetId));
verify(clientFactoryManager,
times(0)).newElement(anyString(),
any(Class.class));
verify(factoryService,
times(1)).newElement(eq(id),
eq(defSetId));
verify(factoryService,
times(0)).newElement(anyString(),
any(Class.class));
}
@Test
@SuppressWarnings("unchecked")
public void testNewElementByTpeLocal() {
String id = "id1";
ServiceCallback<Element> callback = mock(ServiceCallback.class);
Element def = mock(Element.class);
when(clientFactoryManager.newElement(eq(id),
eq(MyType.class))).thenReturn(def);
tested.newElement(id,
MyType.class,
callback);
verify(callback,
times(1)).onSuccess(eq(def));
verify(clientFactoryManager,
times(0)).newElement(anyString(),
anyString());
verify(clientFactoryManager,
times(1)).newElement(anyString(),
eq(MyType.class));
verify(factoryService,
times(0)).newElement(anyString(),
anyString());
verify(factoryService,
times(0)).newElement(anyString(),
any(Class.class));
}
@Test
@SuppressWarnings("unchecked")
public void testNewElementByTpeRemote() {
String id = "id1";
ServiceCallback<Element> callback = mock(ServiceCallback.class);
Element def = mock(Element.class);
when(clientFactoryManager.newElement(eq(id),
eq(MyType.class))).thenReturn(null);
when(factoryService.newElement(eq(id),
eq(MyType.class))).thenReturn(def);
tested.newElement(id,
MyType.class,
callback);
verify(callback,
times(1)).onSuccess(eq(def));
verify(clientFactoryManager,
times(0)).newElement(anyString(),
anyString());
verify(clientFactoryManager,
times(1)).newElement(anyString(),
eq(MyType.class));
verify(factoryService,
times(0)).newElement(anyString(),
anyString());
verify(factoryService,
times(1)).newElement(anyString(),
any(Class.class));
}
@Test
@SuppressWarnings("unchecked")
public void testNewDiagramLocal() {
String id = "id1";
String name = "name1";
ServiceCallback<Diagram> callback = mock(ServiceCallback.class);
Diagram def = mock(Diagram.class);
when(clientFactoryManager.newDiagram(eq(name),
eq(id),
any(Metadata.class))).thenReturn(def);
tested.newDiagram(name,
id,
metadata,
callback);
verify(callback,
times(1)).onSuccess(eq(def));
verify(clientFactoryManager,
times(1)).newDiagram(eq(name),
eq(id),
eq(metadata));
verify(clientFactoryManager,
times(0)).newDiagram(anyString(),
any(Class.class),
any(Metadata.class));
verify(factoryService,
times(0)).newDiagram(anyString(),
anyString(),
any(Metadata.class));
verify(factoryService,
times(0)).newDiagram(anyString(),
any(Class.class),
any(Metadata.class));
}
@Test
@SuppressWarnings("unchecked")
public void testNewDiagramRemote() {
String id = "id1";
String name = "name1";
ServiceCallback<Diagram> callback = mock(ServiceCallback.class);
Diagram def = mock(Diagram.class);
when(clientFactoryManager.newDiagram(eq(name),
eq(id),
any(Metadata.class))).thenReturn(null);
when(factoryService.newDiagram(eq(name),
eq(id),
any(Metadata.class))).thenReturn(def);
tested.newDiagram(name,
id,
metadata,
callback);
verify(callback,
times(1)).onSuccess(eq(def));
verify(clientFactoryManager,
times(1)).newDiagram(eq(name),
eq(id),
any(Metadata.class));
verify(clientFactoryManager,
times(0)).newDiagram(anyString(),
any(Class.class),
any(Metadata.class));
verify(factoryService,
times(1)).newDiagram(eq(name),
eq(id),
any(Metadata.class));
verify(factoryService,
times(0)).newDiagram(anyString(),
any(Class.class),
any(Metadata.class));
}
@Test
@SuppressWarnings("unchecked")
public void testNewDiagramByTpeLocal() {
String name = "name1";
ServiceCallback<Diagram> callback = mock(ServiceCallback.class);
Diagram def = mock(Diagram.class);
when(clientFactoryManager.newDiagram(eq(name),
eq(MyType.class),
any(Metadata.class))).thenReturn(def);
tested.newDiagram(name,
MyType.class,
metadata,
callback);
verify(callback,
times(1)).onSuccess(eq(def));
verify(clientFactoryManager,
times(0)).newDiagram(anyString(),
anyString(),
any(Metadata.class));
verify(clientFactoryManager,
times(1)).newDiagram(anyString(),
eq(MyType.class),
any(Metadata.class));
verify(factoryService,
times(0)).newDiagram(anyString(),
anyString(),
any(Metadata.class));
verify(factoryService,
times(0)).newDiagram(anyString(),
any(Class.class),
any(Metadata.class));
}
@Test
@SuppressWarnings("unchecked")
public void testNewDiagramByTpeRemote() {
String name = "name1";
ServiceCallback<Diagram> callback = mock(ServiceCallback.class);
Diagram def = mock(Diagram.class);
when(clientFactoryManager.newDiagram(eq(name),
eq(MyType.class),
any(Metadata.class))).thenReturn(null);
when(factoryService.newDiagram(eq(name),
eq(MyType.class),
any(Metadata.class))).thenReturn(def);
tested.newDiagram(name,
MyType.class,
metadata,
callback);
verify(callback,
times(1)).onSuccess(eq(def));
verify(clientFactoryManager,
times(0)).newDiagram(anyString(),
anyString(),
any(Metadata.class));
verify(clientFactoryManager,
times(1)).newDiagram(anyString(),
eq(MyType.class),
any(Metadata.class));
verify(factoryService,
times(0)).newDiagram(anyString(),
anyString(),
any(Metadata.class));
verify(factoryService,
times(1)).newDiagram(anyString(),
any(Class.class),
any(Metadata.class));
}
}