blob: a480ef3ae268b2bce7c63a7467f02b0cba2b316f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2021 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.nodeprovider.control;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import org.eclipse.mdm.api.base.ConnectionException;
import org.eclipse.mdm.api.base.adapter.Attribute;
import org.eclipse.mdm.api.base.adapter.EntityType;
import org.eclipse.mdm.api.base.adapter.ModelManager;
import org.eclipse.mdm.api.base.model.BaseEntity;
import org.eclipse.mdm.api.base.model.Channel;
import org.eclipse.mdm.api.base.model.ChannelGroup;
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.api.dflt.model.Pool;
import org.eclipse.mdm.api.dflt.model.Project;
import org.eclipse.mdm.api.odsadapter.query.ODSModelManager;
import org.eclipse.mdm.businessobjects.control.NavigationActivity;
import org.eclipse.mdm.connector.boundary.ConnectorService;
import org.eclipse.mdm.protobuf.Mdm.Node;
import org.junit.BeforeClass;
import org.junit.Test;
import org.mockito.Mockito;
public class DefaultNodeProviderTest {
private static final String SOURCE = "TESTSOURCE";
private static final String ENVIRONMENT = "Environment";
private static final String PROJECT = "Project";
private static final String POOL = "Pool";
private static final String TEST = "Test";
private static final String TESTSTEP = "TestStep";
private static final String MEASUREMENT = "Measurement";
private static final String CHANNELGROUP = "ChannelGroup";
private static final String CHANNEL = "Channel";
private static final String ENVIRONMENT_ID = "1";
private static final String PROJECT_ID = "10";
private static final String POOL_ID = "100";
private static final String TEST_ID = "1000";
private static final String TESTSTEP_ID = "10000";
private static final String MEASUREMENT_ID = "100000";
private static final String CHANNELGROUP_ID = "1000000";
private static final String CHANNEL_ID = "10000000";
private static DefaultNodeProvider defaultNodeProvider;
@BeforeClass
public static void setup() throws ConnectionException {
BaseEntity environment = mockEntity(Environment.class, ENVIRONMENT, ENVIRONMENT_ID);
BaseEntity project = mockEntity(Project.class, PROJECT, PROJECT_ID);
BaseEntity pool1 = mockEntity(Pool.class, POOL, POOL_ID);
BaseEntity test1 = mockEntity(org.eclipse.mdm.api.base.model.Test.class, TEST, TEST_ID);
BaseEntity teststep1 = mockEntity(TestStep.class, TESTSTEP, TESTSTEP_ID);
BaseEntity measurement1 = mockEntity(Measurement.class, MEASUREMENT, MEASUREMENT_ID);
BaseEntity channelgroup = mockEntity(ChannelGroup.class, CHANNELGROUP, CHANNELGROUP_ID);
BaseEntity channel1 = mockEntity(Channel.class, CHANNEL, CHANNEL_ID);
NavigationActivity navigationActivity = mock(NavigationActivity.class);
doReturn(Collections.singletonList(environment)).when(navigationActivity).getEnvironments();
doReturn(Collections.singletonList(project)).when(navigationActivity).getProjects(eq(SOURCE));
doReturn(Collections.singletonList(pool1)).when(navigationActivity).getPools(eq(SOURCE), eq(PROJECT_ID));
doReturn(Collections.singletonList(test1)).when(navigationActivity).getTests(eq(SOURCE), eq(POOL_ID));
doReturn(Collections.singletonList(teststep1)).when(navigationActivity).getTestSteps(eq(SOURCE), eq(TEST_ID));
doReturn(Collections.singletonList(measurement1)).when(navigationActivity).getMeasurements(eq(SOURCE),
eq(TESTSTEP_ID));
doReturn(Collections.singletonList(channelgroup)).when(navigationActivity).getChannelGroups(eq(SOURCE),
eq(MEASUREMENT_ID));
doReturn(Collections.singletonList(channel1)).when(navigationActivity).getChannels(eq(SOURCE),
eq(CHANNELGROUP_ID));
defaultNodeProvider = new DefaultNodeProvider(navigationActivity, mockConnectorService());
}
@Test
public void testFromRoot() {
List<Node> environments = defaultNodeProvider.getRoots();
assertThat(environments).hasSize(1);
Node environment = environments.get(0);
assertThat(environment.getId()).isEqualTo(ENVIRONMENT_ID);
assertThat(environment.getSource()).isEqualTo(SOURCE);
assertThat(environment.getType()).isEqualTo(ENVIRONMENT);
List<Node> projects = defaultNodeProvider.getChildren(environment);
assertThat(projects).hasSize(1);
Node project = projects.get(0);
assertThat(project.getId()).isEqualTo(PROJECT_ID);
assertThat(project.getSource()).isEqualTo(SOURCE);
assertThat(project.getType()).isEqualTo(PROJECT);
List<Node> pools = defaultNodeProvider.getChildren(project);
assertThat(pools).hasSize(1);
Node pool = pools.get(0);
assertThat(pool.getId()).isEqualTo(POOL_ID);
assertThat(pool.getSource()).isEqualTo(SOURCE);
assertThat(pool.getType()).isEqualTo(POOL);
List<Node> tests = defaultNodeProvider.getChildren(pool);
assertThat(tests).hasSize(1);
Node test = tests.get(0);
assertThat(test.getId()).isEqualTo(TEST_ID);
assertThat(test.getSource()).isEqualTo(SOURCE);
assertThat(test.getType()).isEqualTo(TEST);
List<Node> teststeps = defaultNodeProvider.getChildren(test);
assertThat(teststeps).hasSize(1);
Node teststep = teststeps.get(0);
assertThat(teststep.getId()).isEqualTo(TESTSTEP_ID);
assertThat(teststep.getSource()).isEqualTo(SOURCE);
assertThat(teststep.getType()).isEqualTo(TESTSTEP);
List<Node> measurements = defaultNodeProvider.getChildren(teststep);
assertThat(measurements).hasSize(1);
Node measurement = measurements.get(0);
assertThat(measurement.getId()).isEqualTo(MEASUREMENT_ID);
assertThat(measurement.getSource()).isEqualTo(SOURCE);
assertThat(measurement.getType()).isEqualTo(MEASUREMENT);
List<Node> channelgroups = defaultNodeProvider.getChildren(measurement);
assertThat(channelgroups).hasSize(1);
Node channelgroup = channelgroups.get(0);
assertThat(channelgroup.getId()).isEqualTo(CHANNELGROUP_ID);
assertThat(channelgroup.getSource()).isEqualTo(SOURCE);
assertThat(channelgroup.getType()).isEqualTo(CHANNELGROUP);
List<Node> channels = defaultNodeProvider.getChildren(channelgroup);
assertThat(channels).hasSize(1);
Node channel = channels.get(0);
assertThat(channel.getId()).isEqualTo(CHANNEL_ID);
assertThat(channel.getSource()).isEqualTo(SOURCE);
assertThat(channel.getType()).isEqualTo(CHANNEL);
}
private static ConnectorService mockConnectorService() {
ConnectorService connectorService = mock(ConnectorService.class);
ApplicationContext mockedApplicationContext = mockApplicationContext();
Mockito.when(connectorService.getContexts()).thenReturn(Arrays.asList(mockedApplicationContext));
Mockito.when(connectorService.getContextByName(anyString())).thenReturn(mockedApplicationContext);
return connectorService;
}
private static ApplicationContext mockApplicationContext() {
ApplicationContext applicationContext = mock(ApplicationContext.class);
EntityManager entityManager = mockEntityManager();
ModelManager modelManager = mockModelManager();
Mockito.when(applicationContext.getEntityManager()).thenReturn(Optional.of(entityManager));
Mockito.when(applicationContext.getModelManager()).thenReturn(Optional.of(modelManager));
return applicationContext;
}
private static ModelManager mockModelManager() {
ODSModelManager modelManger = mock(ODSModelManager.class);
doAnswer(onMock -> {
EntityType entityType = mock(EntityType.class);
Attribute idAttribute = mock(Attribute.class);
doReturn("Id").when(idAttribute).getName();
Value value = mock(Value.class);
doReturn(ValueType.STRING).when(value).getValueType();
doReturn(entityType).when(idAttribute).getEntityType();
doReturn(entityType).when(idAttribute).getEntityType();
doReturn(idAttribute).when(entityType).getIDAttribute();
Entity e = onMock.getArgument(0);
doReturn("").when(e).getName();
String type = e.getTypeName();
doReturn(type).when(entityType).getName();
if (ENVIRONMENT.equals(type)) {
doReturn(ENVIRONMENT_ID).when(value).extract();
doReturn(value).when(idAttribute).createValue(anyString(), any());
} else if (PROJECT.equals(type)) {
doReturn(PROJECT_ID).when(value).extract();
doReturn(value).when(idAttribute).createValue(anyString(), any());
} else if (POOL.equals(type)) {
doReturn(POOL_ID).when(value).extract();
doReturn(value).when(idAttribute).createValue(anyString(), any());
} else if (TEST.equals(type)) {
doReturn(TEST_ID).when(value).extract();
doReturn(value).when(idAttribute).createValue(anyString(), any());
} else if (TESTSTEP.equals(type)) {
doReturn(TESTSTEP_ID).when(value).extract();
doReturn(value).when(idAttribute).createValue(anyString(), any());
} else if (MEASUREMENT.equals(type)) {
doReturn(MEASUREMENT_ID).when(value).extract();
doReturn(value).when(idAttribute).createValue(anyString(), any());
} else if (CHANNELGROUP.equals(type)) {
doReturn(CHANNELGROUP_ID).when(value).extract();
doReturn(value).when(idAttribute).createValue(anyString(), any());
} else if (CHANNEL.equals(type)) {
doReturn(CHANNEL_ID).when(value).extract();
doReturn(value).when(idAttribute).createValue(anyString(), any());
}
return entityType;
}).when(modelManger).getEntityType(any(Entity.class));
// doAnswer(onMock -> {
// return onMock.
// }).when(modelManger.listEntityTypes());
return modelManger;
}
private static EntityManager mockEntityManager() {
EntityManager entityManager = mock(EntityManager.class);
// TODO
return entityManager;
}
private static <T extends BaseEntity> BaseEntity mockEntity(Class<T> mockedClass, String typeName, String id) {
BaseEntity entity = mock(mockedClass);
doReturn(SOURCE).when(entity).getSourceName();
doReturn(typeName).when(entity).getTypeName();
doReturn(id).when(entity).getID();
return entity;
}
}