blob: 2a52552eaca4421adaa9b7a6c6e3e506478450b5 [file] [log] [blame]
/********************************************************************************
* Copyright (c) 2015-2019 Contributors to the Eclipse Foundation
*
* See the NOTICE file(s) distributed with this work for additional
* information regarding copyright ownership.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
********************************************************************************/
package org.eclipse.mdm.businessobjects.control.context;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.when;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import org.eclipse.mdm.api.base.adapter.ChildrenStore;
import org.eclipse.mdm.api.base.adapter.Core;
import org.eclipse.mdm.api.base.model.ContextComponent;
import org.eclipse.mdm.api.base.model.ContextRoot;
import org.eclipse.mdm.api.base.model.ContextType;
import org.eclipse.mdm.api.base.model.Entity;
import org.eclipse.mdm.api.base.model.Environment;
import org.eclipse.mdm.api.base.model.Measurement;
import org.eclipse.mdm.api.base.model.TestStep;
import org.eclipse.mdm.api.base.model.Value;
import org.eclipse.mdm.api.base.model.ValueType;
import org.eclipse.mdm.api.dflt.ApplicationContext;
import org.eclipse.mdm.api.dflt.EntityManager;
import org.eclipse.mdm.connector.boundary.ConnectorService;
import org.mockito.Mockito;
public final class ContextActivityMockHelper {
public static final int ITEM_COUNT = 1;
public static final int CC_COUNT = 10;
public static final int CC_VALUE_COUNT = 10;
private ContextActivityMockHelper() {
}
public static ConnectorService createConnectorMock() throws Exception {
ConnectorService connectorBean = Mockito.mock(ConnectorService.class);
List<ApplicationContext> contextList = new ArrayList<>();
for (int i = 1; i <= ITEM_COUNT; i++) {
contextList.add(createContextMock("MDMENV_" + i));
}
when(connectorBean.getContexts()).thenReturn(contextList);
when(connectorBean.getContextByName(anyString())).thenReturn(contextList.get(0));
return connectorBean;
}
private static ApplicationContext createContextMock(String sourceName) throws Exception {
Environment env = createEntityMock(Environment.class, sourceName, sourceName, "1", null);
EntityManager em = Mockito.mock(EntityManager.class);
TestStep testStep = createEntityMock(TestStep.class, "TestStepWithContext", "MDM", "1", null);
Measurement measurement = createEntityMock(Measurement.class, "MeasurementWithContext", "MDM", "1", null);
when(em.loadEnvironment()).thenReturn(env);
when(em.load(TestStep.class, "1")).thenReturn(testStep);
when(em.load(Measurement.class, "1")).thenReturn(measurement);
when(em.loadParent(measurement, Measurement.PARENT_TYPE_TESTSTEP)).thenReturn(Optional.of(testStep));
List<Measurement> mList = new ArrayList<>();
mList.add(measurement);
when(em.loadChildren(testStep, TestStep.CHILD_TYPE_MEASUREMENT)).thenReturn(mList);
Map<ContextType, ContextRoot> orderedContext = createContext("ordered");
Map<ContextType, ContextRoot> measuredContext = createContext("measured");
when(em.loadContexts(testStep)).thenReturn(orderedContext);
when(em.loadContexts(measurement)).thenReturn(measuredContext);
ApplicationContext context = Mockito.mock(ApplicationContext.class);
when(context.getEntityManager()).thenReturn(Optional.of(em));
return context;
}
private static <T extends Entity> T createEntityMock(Class<T> type, String name, String sourceName, String id,
ChildrenStore childrenStore) throws Exception {
HashMap<String, Value> map = new HashMap<String, Value>();
map.put("Name", ValueType.STRING.create("Name", name));
Core core = Mockito.mock(Core.class);
when(core.getSourceName()).thenReturn(sourceName);
when(core.getValues()).thenReturn(map);
when(core.getID()).thenReturn(id);
if (childrenStore != null) {
when(core.getChildrenStore()).thenReturn(childrenStore);
}
if (ContextRoot.class.equals(type)) {
if (name.contains("TSQ_")) {
when(core.getTypeName()).thenReturn("TestSequence");
} else if (name.contains("UUT")) {
when(core.getTypeName()).thenReturn("UnitUnderTest");
} else {
when(core.getTypeName()).thenReturn("TestEquipment");
}
}
Constructor<T> constructor = type.getDeclaredConstructor(Core.class);
constructor.setAccessible(true);
T instance = constructor.newInstance(core);
constructor.setAccessible(false);
return instance;
}
private static ContextRoot createUUTContextRootMock(String type) throws Exception {
List<ContextComponent> ccList = createContextComponentMocks("UUT");
ChildrenStore childrenStore = new ChildrenStore();
for (ContextComponent cc : ccList) {
childrenStore.add(cc);
}
return createEntityMock(ContextRoot.class, "MessungUUT_" + type, "MDM", "1", childrenStore);
}
private static ContextRoot createTSQContextRootMock(String type) throws Exception {
List<ContextComponent> ccList = createContextComponentMocks("TSQ");
ChildrenStore childrenStore = new ChildrenStore();
for (ContextComponent cc : ccList) {
childrenStore.add(cc);
}
return createEntityMock(ContextRoot.class, "MessungTSQ_" + type, "MDM", "1", childrenStore);
}
private static ContextRoot createTEQContextRootMock(String type) throws Exception {
List<ContextComponent> ccList = createContextComponentMocks("TEQ");
ChildrenStore childrenStore = new ChildrenStore();
for (ContextComponent cc : ccList) {
childrenStore.add(cc);
}
return createEntityMock(ContextRoot.class, "MessungTEQ_" + type, "MDM", "1", childrenStore);
}
private static List<ContextComponent> createContextComponentMocks(String type) throws Exception {
List<ContextComponent> ccList = new ArrayList<>();
for (int i = 1; i <= CC_COUNT; i++) {
ContextComponent cc = createEntityMock(ContextComponent.class, type + "_ContextComponent_" + i, "MDM",
Integer.toString(i), null);
when(cc.getValues()).thenReturn(createValues(type));
ccList.add(cc);
}
return ccList;
}
private static Map<String, Value> createValues(String type) {
Map<String, Value> valueMap = new HashMap<>();
for (int i = 1; i <= CC_VALUE_COUNT; i++) {
String vName = type + "_ValueName_" + i;
valueMap.put(vName, ValueType.STRING.create(vName, type + "_Value_" + i));
}
return valueMap;
}
private static Map<ContextType, ContextRoot> createContext(String type) throws Exception {
Map<ContextType, ContextRoot> contextMap = new HashMap<>();
contextMap.put(ContextType.UNITUNDERTEST, createUUTContextRootMock(type));
contextMap.put(ContextType.TESTSEQUENCE, createTSQContextRootMock(type));
contextMap.put(ContextType.TESTEQUIPMENT, createTEQContextRootMock(type));
return contextMap;
}
}