/******************************************************************************** | |
* 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.utils; | |
import static org.assertj.core.api.Assertions.assertThat; | |
import static org.mockito.ArgumentMatchers.anyList; | |
import static org.mockito.ArgumentMatchers.anyString; | |
import static org.mockito.ArgumentMatchers.eq; | |
import static org.mockito.Mockito.mock; | |
import static org.mockito.Mockito.when; | |
import java.util.Arrays; | |
import java.util.Collections; | |
import java.util.HashMap; | |
import java.util.Map; | |
import java.util.Optional; | |
import org.eclipse.mdm.api.base.massdata.ReadRequest; | |
import org.eclipse.mdm.api.base.model.Channel; | |
import org.eclipse.mdm.api.base.model.ChannelGroup; | |
import org.eclipse.mdm.api.base.model.Unit; | |
import org.eclipse.mdm.api.dflt.ApplicationContext; | |
import org.eclipse.mdm.api.dflt.EntityManager; | |
import org.eclipse.mdm.protobuf.Mdm; | |
import org.junit.Before; | |
import org.junit.Test; | |
public class ProtobufConverterTest { | |
ChannelGroup channelGroup = mock(ChannelGroup.class); | |
Channel channel1 = mock(Channel.class); | |
Channel channel2 = mock(Channel.class); | |
Unit unit1 = mock(Unit.class); | |
Unit unit2 = mock(Unit.class); | |
EntityManager em = mock(EntityManager.class); | |
ApplicationContext context = mock(ApplicationContext.class); | |
@Before | |
public void init() { | |
when(channelGroup.getID()).thenReturn("1"); | |
when(unit1.getID()).thenReturn("1"); | |
when(unit2.getID()).thenReturn("2"); | |
when(channel1.getID()).thenReturn("1"); | |
when(channel1.getUnit()).thenReturn(unit1); | |
when(channel2.getID()).thenReturn("2"); | |
when(channel2.getUnit()).thenReturn(unit2); | |
when(em.load(eq(ChannelGroup.class), anyString())).thenReturn(channelGroup); | |
when(em.load(eq(Channel.class), anyList())).thenReturn(Arrays.asList(channel1, channel2)); | |
when(em.load(eq(Unit.class), anyList())).thenReturn(Arrays.asList(unit1, unit2)); | |
when(context.getEntityManager()).thenReturn(Optional.of(em)); | |
} | |
@Test | |
public void testRequestChannelWithDefaultUnit() { | |
ReadRequest readRequest = ProtobufConverter.convert(context, | |
Mdm.ReadRequest.newBuilder().setChannelGroupId("1").addChannelIds("1").build()); | |
Map<Channel, Unit> channels = new HashMap<>(); | |
channels.put(channel1, unit1); | |
assertThat(readRequest).hasFieldOrPropertyWithValue("channelGroup", channelGroup) | |
.hasFieldOrPropertyWithValue("channels", channels) | |
.hasFieldOrPropertyWithValue("loadAllChannels", false); | |
} | |
@Test | |
public void testRequestChannelWithExplicitUnit() { | |
ReadRequest channelWithUnit = ProtobufConverter.convert(context, | |
Mdm.ReadRequest.newBuilder().setChannelGroupId("1").addChannelIds("1").addUnitIds("1").build()); | |
Map<Channel, Unit> channels = new HashMap<>(); | |
channels.put(channel1, unit1); | |
assertThat(channelWithUnit).hasFieldOrPropertyWithValue("channelGroup", channelGroup) | |
.hasFieldOrPropertyWithValue("channels", channels) | |
.hasFieldOrPropertyWithValue("loadAllChannels", false); | |
} | |
@Test | |
public void testRequestAllChannelsWithDefaultUnits() { | |
ReadRequest allChannelWithoutUnits = ProtobufConverter.convert(context, | |
Mdm.ReadRequest.newBuilder().setChannelGroupId("1").build()); | |
assertThat(allChannelWithoutUnits).hasFieldOrPropertyWithValue("channelGroup", channelGroup) | |
.hasFieldOrPropertyWithValue("channels", Collections.emptyMap()) | |
.hasFieldOrPropertyWithValue("loadAllChannels", true); | |
} | |
@Test | |
public void testRequestAllChannelsWithExplicitUnits() { | |
ReadRequest allChannelWithUnits = ProtobufConverter.convert(context, Mdm.ReadRequest.newBuilder() | |
.setChannelGroupId("1").addChannelIds("1").addChannelIds("2").addUnitIds("2").addUnitIds("1").build()); | |
Map<Channel, Unit> channels = new HashMap<>(); | |
channels.put(channel1, unit2); | |
channels.put(channel2, unit1); | |
assertThat(allChannelWithUnits).hasFieldOrPropertyWithValue("channelGroup", channelGroup) | |
.hasFieldOrPropertyWithValue("channels", channels) | |
.hasFieldOrPropertyWithValue("loadAllChannels", false); | |
} | |
@Test | |
public void testSuperfluousUnitsAreIgnored() { | |
ReadRequest allChannelWithUnits = ProtobufConverter.convert(context, Mdm.ReadRequest.newBuilder() | |
.setChannelGroupId("1").addChannelIds("1").addUnitIds("2").addUnitIds("1").build()); | |
Map<Channel, Unit> channels = new HashMap<>(); | |
channels.put(channel1, unit2); | |
assertThat(allChannelWithUnits).hasFieldOrPropertyWithValue("channelGroup", channelGroup) | |
.hasFieldOrPropertyWithValue("channels", channels) | |
.hasFieldOrPropertyWithValue("loadAllChannels", false); | |
} | |
@Test | |
public void testLessUnitsThenChannels() { | |
ReadRequest allChannelWithUnits = ProtobufConverter.convert(context, Mdm.ReadRequest.newBuilder() | |
.setChannelGroupId("1").addChannelIds("1").addChannelIds("2").addUnitIds("2").build()); | |
Map<Channel, Unit> channels = new HashMap<>(); | |
channels.put(channel1, unit2); | |
channels.put(channel2, unit2); // no unitId was supplied -> default unit | |
assertThat(allChannelWithUnits).hasFieldOrPropertyWithValue("channelGroup", channelGroup) | |
.hasFieldOrPropertyWithValue("channels", channels) | |
.hasFieldOrPropertyWithValue("loadAllChannels", false); | |
} | |
@Test | |
public void testEmptyStringAsUnitIdIsInterpretedAsDefaultUnit() { | |
ReadRequest allChannelWithUnits = ProtobufConverter.convert(context, Mdm.ReadRequest.newBuilder() | |
.setChannelGroupId("1").addChannelIds("1").addChannelIds("2").addUnitIds("").addUnitIds("1").build()); | |
Map<Channel, Unit> channels = new HashMap<>(); | |
channels.put(channel1, unit1); // empty unitId was supplied -> default unit | |
channels.put(channel2, unit1); | |
assertThat(allChannelWithUnits).hasFieldOrPropertyWithValue("channelGroup", channelGroup) | |
.hasFieldOrPropertyWithValue("channels", channels) | |
.hasFieldOrPropertyWithValue("loadAllChannels", false); | |
} | |
} |