import java.util.Map;
 import java.util.UUID;
 import org.junit.jupiter.api.Test;
+import org.onap.policy.clamp.acm.participant.intermediary.api.ElementState;
 import org.onap.policy.clamp.acm.participant.intermediary.api.InstanceElementDto;
 import org.onap.policy.clamp.acm.participant.intermediary.handler.AutomationCompositionOutHandler;
 import org.onap.policy.clamp.acm.participant.intermediary.handler.cache.AcDefinition;
     private static final UUID ELEMENT_ID = UUID.randomUUID();
     private static final UUID COMPOSITION_ID = UUID.randomUUID();
     private static final ToscaConceptIdentifier DEFINITION_ELEMENT_ID = new ToscaConceptIdentifier("code", "0.0.1");
+    private static final ToscaConceptIdentifier WRONG_DEF_ELEMENT_ID = new ToscaConceptIdentifier("wrong", "0.0.1");
 
     @Test
     void testUpdateAutomationCompositionElementState() {
-        var automationComposiitonHandler = mock(AutomationCompositionOutHandler.class);
-        var apiImpl = new ParticipantIntermediaryApiImpl(automationComposiitonHandler, mock(CacheProvider.class));
+        var automationCompositionHandler = mock(AutomationCompositionOutHandler.class);
+        var apiImpl = new ParticipantIntermediaryApiImpl(automationCompositionHandler, mock(CacheProvider.class));
         apiImpl.updateAutomationCompositionElementState(AUTOMATION_COMPOSITION_ID, ELEMENT_ID, DeployState.UNDEPLOYED,
                 LockState.NONE, StateChangeResult.NO_ERROR, null);
-        verify(automationComposiitonHandler).updateAutomationCompositionElementState(AUTOMATION_COMPOSITION_ID,
+        verify(automationCompositionHandler).updateAutomationCompositionElementState(AUTOMATION_COMPOSITION_ID,
                 ELEMENT_ID, DeployState.UNDEPLOYED, LockState.NONE, StateChangeResult.NO_ERROR, null);
     }
 
     @Test
     void testUpdateCompositionState() {
-        var automationComposiitonHandler = mock(AutomationCompositionOutHandler.class);
-        var apiImpl = new ParticipantIntermediaryApiImpl(automationComposiitonHandler, mock(CacheProvider.class));
+        var automationCompositionHandler = mock(AutomationCompositionOutHandler.class);
+        var apiImpl = new ParticipantIntermediaryApiImpl(automationCompositionHandler, mock(CacheProvider.class));
         apiImpl.updateCompositionState(COMPOSITION_ID, AcTypeState.PRIMED, StateChangeResult.NO_ERROR, "");
-        verify(automationComposiitonHandler).updateCompositionState(COMPOSITION_ID, AcTypeState.PRIMED,
+        verify(automationCompositionHandler).updateCompositionState(COMPOSITION_ID, AcTypeState.PRIMED,
                 StateChangeResult.NO_ERROR, "");
     }
 
     @Test
     void testSendAcElementInfo() {
-        var automationComposiitonHandler = mock(AutomationCompositionOutHandler.class);
-        var apiImpl = new ParticipantIntermediaryApiImpl(automationComposiitonHandler, mock(CacheProvider.class));
+        var automationCompositionHandler = mock(AutomationCompositionOutHandler.class);
+        var apiImpl = new ParticipantIntermediaryApiImpl(automationCompositionHandler, mock(CacheProvider.class));
         apiImpl.sendAcElementInfo(AUTOMATION_COMPOSITION_ID, ELEMENT_ID, USE_STATE, OPERATIONAL_STATE, MAP);
-        verify(automationComposiitonHandler).sendAcElementInfo(AUTOMATION_COMPOSITION_ID, ELEMENT_ID, USE_STATE,
+        verify(automationCompositionHandler).sendAcElementInfo(AUTOMATION_COMPOSITION_ID, ELEMENT_ID, USE_STATE,
                 OPERATIONAL_STATE, MAP);
     }
 
     @Test
     void testSendAcDefinitionInfo() {
-        var automationComposiitonHandler = mock(AutomationCompositionOutHandler.class);
-        var apiImpl = new ParticipantIntermediaryApiImpl(automationComposiitonHandler, mock(CacheProvider.class));
+        var automationCompositionHandler = mock(AutomationCompositionOutHandler.class);
+        var apiImpl = new ParticipantIntermediaryApiImpl(automationCompositionHandler, mock(CacheProvider.class));
         apiImpl.sendAcDefinitionInfo(COMPOSITION_ID, DEFINITION_ELEMENT_ID, MAP);
-        verify(automationComposiitonHandler).sendAcDefinitionInfo(COMPOSITION_ID, DEFINITION_ELEMENT_ID, MAP);
+        verify(automationCompositionHandler).sendAcDefinitionInfo(COMPOSITION_ID, DEFINITION_ELEMENT_ID, MAP);
     }
 
     @Test
         acElement.setId(ELEMENT_ID);
         automationComposition.setElements(Map.of(ELEMENT_ID, acElement));
 
-        var automationComposiitonHandler = mock(AutomationCompositionOutHandler.class);
-        var apiImpl = new ParticipantIntermediaryApiImpl(automationComposiitonHandler, cacheProvider);
+        var automationCompositionHandler = mock(AutomationCompositionOutHandler.class);
+        var apiImpl = new ParticipantIntermediaryApiImpl(automationCompositionHandler, cacheProvider);
         var mapResult = apiImpl.getAutomationCompositions();
         assertEquals(map, mapResult);
 
         var map = Map.of(COMPOSITION_ID, acDefinition);
         var cacheProvider = mock(CacheProvider.class);
         when(cacheProvider.getAcElementsDefinitions()).thenReturn(map);
-        var automationComposiitonHandler = mock(AutomationCompositionOutHandler.class);
-        var apiImpl = new ParticipantIntermediaryApiImpl(automationComposiitonHandler, cacheProvider);
+        var automationCompositionHandler = mock(AutomationCompositionOutHandler.class);
+        var apiImpl = new ParticipantIntermediaryApiImpl(automationCompositionHandler, cacheProvider);
         var mapResult = apiImpl.getAcElementsDefinitions();
         assertThat(map).hasSameSizeAs(mapResult);
         assertThat(mapResult.get(COMPOSITION_ID)).isNotEmpty();
         result = apiImpl.getAcElementsDefinitions(COMPOSITION_ID);
         assertEquals(acDefinition.getElements(), result);
 
-        var element = apiImpl.getAcElementDefinition(UUID.randomUUID(), new ToscaConceptIdentifier("wrong", "0.0.1"));
+        var element = apiImpl.getAcElementDefinition(UUID.randomUUID(), WRONG_DEF_ELEMENT_ID);
         assertThat(element).isNull();
 
-        element = apiImpl.getAcElementDefinition(COMPOSITION_ID, new ToscaConceptIdentifier("wrong", "0.0.1"));
+        element = apiImpl.getAcElementDefinition(COMPOSITION_ID, WRONG_DEF_ELEMENT_ID);
         assertThat(element).isNull();
 
         element = apiImpl.getAcElementDefinition(COMPOSITION_ID, DEFINITION_ELEMENT_ID);
         assertEquals(COMPOSITION_ID, instanceElementDto.instanceId());
         assertEquals(ELEMENT_ID, instanceElementDto.elementId());
     }
+
+    @Test
+    void testGetInstanceElementDto() {
+        var automationComposition = new AutomationComposition();
+        automationComposition.setInstanceId(AUTOMATION_COMPOSITION_ID);
+        var map = Map.of(AUTOMATION_COMPOSITION_ID, automationComposition);
+        var cacheProvider = mock(CacheProvider.class);
+        when(cacheProvider.getAutomationCompositions()).thenReturn(map);
+        var acElement = new AutomationCompositionElement();
+        acElement.setId(ELEMENT_ID);
+        acElement.setProperties(MAP);
+        acElement.setOutProperties(MAP);
+        automationComposition.setElements(Map.of(ELEMENT_ID, acElement));
+
+        var automationCompositionHandler = mock(AutomationCompositionOutHandler.class);
+        var apiImpl = new ParticipantIntermediaryApiImpl(automationCompositionHandler, cacheProvider);
+        var mapResult = apiImpl.getAutomationCompositions();
+        assertEquals(map, mapResult);
+
+        var rndInstance = UUID.randomUUID();
+        var rndElementId = UUID.randomUUID();
+        var element = apiImpl.getInstanceElementDto(rndInstance, rndElementId);
+        assertThat(element).isNotNull();
+        assertEquals(rndInstance, element.instanceId());
+        assertEquals(rndElementId, element.elementId());
+        assertEquals(ElementState.NOT_PRESENT, element.state());
+
+        element = apiImpl.getInstanceElementDto(AUTOMATION_COMPOSITION_ID, rndElementId);
+        assertThat(element).isNotNull();
+        assertEquals(AUTOMATION_COMPOSITION_ID, element.instanceId());
+        assertEquals(rndElementId, element.elementId());
+        assertEquals(ElementState.NOT_PRESENT, element.state());
+
+        element = apiImpl.getInstanceElementDto(AUTOMATION_COMPOSITION_ID, ELEMENT_ID);
+        assertThat(element).isNotNull();
+        assertEquals(AUTOMATION_COMPOSITION_ID, element.instanceId());
+        assertEquals(ELEMENT_ID, element.elementId());
+        assertEquals(acElement.getProperties(), element.inProperties());
+        assertEquals(acElement.getOutProperties(), element.outProperties());
+        assertEquals(ElementState.PRESENT, element.state());
+    }
+
+    @Test
+    void testGetCompositionElementDto() {
+        var acElementDefinition = new AutomationCompositionElementDefinition();
+        acElementDefinition.setAcElementDefinitionId(DEFINITION_ELEMENT_ID);
+        acElementDefinition.setAutomationCompositionElementToscaNodeTemplate(new ToscaNodeTemplate());
+        acElementDefinition.getAutomationCompositionElementToscaNodeTemplate().setProperties(MAP);
+        acElementDefinition.setOutProperties(MAP);
+        var acDefinition = new AcDefinition();
+        acDefinition.setCompositionId(COMPOSITION_ID);
+        acDefinition.getElements().put(DEFINITION_ELEMENT_ID, acElementDefinition);
+        var cacheProvider = mock(CacheProvider.class);
+        when(cacheProvider.getAcElementsDefinitions()).thenReturn(Map.of(COMPOSITION_ID, acDefinition));
+        var automationCompositionHandler = mock(AutomationCompositionOutHandler.class);
+        var apiImpl = new ParticipantIntermediaryApiImpl(automationCompositionHandler, cacheProvider);
+
+        var rndCompositionId = UUID.randomUUID();
+        var element = apiImpl.getCompositionElementDto(rndCompositionId, WRONG_DEF_ELEMENT_ID);
+        assertThat(element).isNotNull();
+        assertEquals(rndCompositionId, element.compositionId());
+        assertEquals(WRONG_DEF_ELEMENT_ID, element.elementDefinitionId());
+        assertEquals(ElementState.NOT_PRESENT, element.state());
+
+        element = apiImpl.getCompositionElementDto(COMPOSITION_ID, WRONG_DEF_ELEMENT_ID);
+        assertThat(element).isNotNull();
+        assertEquals(COMPOSITION_ID, element.compositionId());
+        assertEquals(WRONG_DEF_ELEMENT_ID, element.elementDefinitionId());
+        assertEquals(ElementState.NOT_PRESENT, element.state());
+
+        element = apiImpl.getCompositionElementDto(COMPOSITION_ID, DEFINITION_ELEMENT_ID);
+        assertThat(element).isNotNull();
+        assertEquals(COMPOSITION_ID, element.compositionId());
+        assertEquals(DEFINITION_ELEMENT_ID, element.elementDefinitionId());
+        assertEquals(acElementDefinition.getAutomationCompositionElementToscaNodeTemplate().getProperties(),
+                element.inProperties());
+        assertEquals(acElementDefinition.getOutProperties(), element.outProperties());
+        assertEquals(ElementState.PRESENT, element.state());
+    }
 }