package com.epam.wilma.stubconfig.dom.parser.node; /*========================================================================== Copyright 2013-2017 EPAM Systems This file is part of Wilma. Wilma is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Wilma is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Wilma. If not, see <http://www.gnu.org/licenses/>. ===========================================================================*/ import static org.mockito.BDDMockito.given; import static org.testng.AssertJUnit.assertEquals; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import com.epam.wilma.domain.stubconfig.sequence.SequenceDescriptorAttributes; import com.epam.wilma.domain.stubconfig.sequencehandler.DummySequenceHandler; import com.epam.wilma.stubconfig.configuration.StubConfigurationAccess; import com.epam.wilma.stubconfig.configuration.domain.PropertyDto; import com.epam.wilma.stubconfig.initializer.sequencehandler.SequenceHandlerInitializer; /** * Unit test for {@link SequenceDescriptorAttributesParser}. * @author Adam_Csaba_Kiraly * */ public class SequenceDescriptorAttributesParserTest { private static final String GROUP_NAME = "groupname"; private static final String SEQUENCE_HANDLER_CLASS_NAME = "sequence-handler-class-name"; private static final String SEQUENCE_DESCRIPTOR_NAME = "sequence-descriptor-name"; @Mock private SequenceHandlerInitializer sequenceHandlerInitializer; @Mock private StubConfigurationAccess stubConfigurationAccess; @InjectMocks private SequenceDescriptorAttributesParser underTest; @Mock private Element element; @Mock private Document document; @Mock private PropertyDto value; @Mock private Element documentElement; @Mock private NodeList nodes; @BeforeMethod public void setUp() { MockitoAnnotations.initMocks(this); given(document.getDocumentElement()).willReturn(documentElement); given(documentElement.getAttribute(GROUP_NAME)).willReturn(GROUP_NAME); given(element.getElementsByTagName("param")).willReturn(nodes); given(nodes.getLength()).willReturn(1); given(nodes.item(0)).willReturn(element); } @Test public void testParseNodeWhenTimeoutIsGivenShouldUseTheGivenTimeout() { //GIVEN given(element.getAttribute("name")).willReturn(SEQUENCE_DESCRIPTOR_NAME).willReturn("KEY"); given(element.getAttribute("class")).willReturn(SEQUENCE_HANDLER_CLASS_NAME); given(element.getAttribute("timeout")).willReturn("6000"); given(element.getAttribute("value")).willReturn("VALUE"); given(stubConfigurationAccess.getProperties()).willReturn(value); DummySequenceHandler dummySequenceHandler = new DummySequenceHandler(); given(sequenceHandlerInitializer.getExternalClassObject(SEQUENCE_HANDLER_CLASS_NAME)).willReturn(dummySequenceHandler); //WHEN SequenceDescriptorAttributes result = underTest.parseNode(element, document); //THEN assertEquals(SEQUENCE_DESCRIPTOR_NAME, result.getName()); assertEquals(6000L, result.getDefaultTimeout()); assertEquals(GROUP_NAME, result.getGroupName()); assertEquals(dummySequenceHandler, result.getHandler()); assertEquals("VALUE", result.getParameters().get("KEY")); } @Test public void testParseNodeWhenTimeoutIsNotGivenShouldUseTheDefaultTimeout() { //GIVEN given(element.getAttribute("name")).willReturn(SEQUENCE_DESCRIPTOR_NAME).willReturn("KEY"); given(element.getAttribute("class")).willReturn(SEQUENCE_HANDLER_CLASS_NAME); given(element.getAttribute("timeout")).willReturn(""); given(element.getAttribute("value")).willReturn("VALUE"); given(stubConfigurationAccess.getProperties()).willReturn(value); given(value.getDefaultSequenceTimeout()).willReturn(9000L); DummySequenceHandler dummySequenceHandler = new DummySequenceHandler(); given(sequenceHandlerInitializer.getExternalClassObject(SEQUENCE_HANDLER_CLASS_NAME)).willReturn(dummySequenceHandler); //WHEN SequenceDescriptorAttributes result = underTest.parseNode(element, document); //THEN assertEquals(SEQUENCE_DESCRIPTOR_NAME, result.getName()); assertEquals(9000L, result.getDefaultTimeout()); assertEquals(GROUP_NAME, result.getGroupName()); assertEquals(dummySequenceHandler, result.getHandler()); assertEquals("VALUE", result.getParameters().get("KEY")); } @Test public void testParseNodeWhenThereIsNoParameter() { //GIVEN given(nodes.getLength()).willReturn(0); given(element.getAttribute("name")).willReturn(SEQUENCE_DESCRIPTOR_NAME); given(element.getAttribute("class")).willReturn(SEQUENCE_HANDLER_CLASS_NAME); given(element.getAttribute("timeout")).willReturn(""); given(stubConfigurationAccess.getProperties()).willReturn(value); given(value.getDefaultSequenceTimeout()).willReturn(9000L); DummySequenceHandler dummySequenceHandler = new DummySequenceHandler(); given(sequenceHandlerInitializer.getExternalClassObject(SEQUENCE_HANDLER_CLASS_NAME)).willReturn(dummySequenceHandler); //WHEN SequenceDescriptorAttributes result = underTest.parseNode(element, document); //THEN assertEquals(SEQUENCE_DESCRIPTOR_NAME, result.getName()); assertEquals(9000L, result.getDefaultTimeout()); assertEquals(GROUP_NAME, result.getGroupName()); assertEquals(dummySequenceHandler, result.getHandler()); } }