/* * Sakuli - Testing and Monitoring-Tool for Websites and common UIs. * * Copyright 2013 - 2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.sakuli.datamodel.helper; import org.apache.commons.io.FileUtils; import org.sakuli.BaseTest; import org.sakuli.datamodel.TestCase; import org.sakuli.datamodel.TestCaseStep; import org.sakuli.datamodel.TestSuite; import org.sakuli.datamodel.builder.TestCaseStepBuilder; import org.sakuli.datamodel.state.TestCaseStepState; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.net.URISyntaxException; import java.net.URL; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.testng.Assert.*; /** * @author tschneck * Date: 02.07.15 */ public class TestCaseStepHelperTest { public static final String CACHEFILE_NAME = "stephelper/" + TestCaseStepHelper.STEPS_CACHE_FILE; @BeforeMethod public void setUp() throws Exception { if (this.getClass().getResource(CACHEFILE_NAME) != null) { Files.deleteIfExists(getResource(CACHEFILE_NAME)); } } @Test public void testCheckWarningTime() throws Exception { assertNull(TestCaseStepHelper.checkWarningTime(0, "test")); assertNull(TestCaseStepHelper.checkWarningTime(1, "test")); String regex = "TestCaseStep \\[name = test\\] - the warning threshold.*"; BaseTest.assertRegExMatch(TestCaseStepHelper.checkWarningTime(-1, "test"), regex); } @Test public void testParseSteps() throws Throwable { Path tcFile = getResource("stephelper/tc.js"); FileUtils.writeStringToFile( tcFile.getParent().resolve(TestCaseStepHelper.STEPS_CACHE_FILE).toFile(), "z_step_1\nother_step_2\nstep_3?special\n", Charset.forName("UTF-8")); List<TestCaseStep> steps = TestCaseStepHelper.readCachedStepDefinitions(tcFile); //do this to ensure correct sorting List<TestCaseStep> result = Arrays.asList(steps.get(2), steps.get(0), steps.get(1)); Collections.sort(result); assertNotNull(getResource(CACHEFILE_NAME)); assertEquals(result.size(), 3); Iterator<TestCaseStep> it = result.iterator(); assertInitStep(it.next(), "z_step_1"); assertInitStep(it.next(), "other_step_2"); assertInitStep(it.next(), "step_3?special"); } protected void assertInitStep(TestCaseStep step, String stepId) { assertEquals(step.getId(), stepId); assertEquals(step.getState(), TestCaseStepState.INIT); } @Test public void testNoCacheFileFound() throws Throwable { assertNull(this.getClass().getResource(CACHEFILE_NAME)); List<TestCaseStep> steps = TestCaseStepHelper.readCachedStepDefinitions(getResource("stephelper/tc.js")); assertEquals(steps.size(), 0); } @Test public void testWriteCachedStepsError() throws Throwable { Path tcFile = getResource("stephelper/tc.js"); TestSuite testSuite = mock(TestSuite.class); TestCase tc = mock(TestCase.class); when(tc.getTcFile()).thenReturn(tcFile); when(tc.getSteps()).thenReturn(Arrays.asList( new TestCaseStepBuilder("step_warning").withState(TestCaseStepState.WARNING).build(), new TestCaseStepBuilder("step_ok").withState(TestCaseStepState.OK).build(), new TestCaseStepBuilder("step_not_started_1").build(), new TestCaseStepBuilder("step_not_started_2").build() )); when(testSuite.getTestCases()).thenReturn(Collections.singletonMap("1", tc)); TestCaseStepHelper.writeCachedStepDefinitions(testSuite); Path cacheFile = getResource(CACHEFILE_NAME); assertTrue(Files.exists(cacheFile)); assertEquals(FileUtils.readFileToString(cacheFile.toFile(), Charset.forName("UTF-8")), "step_warning\nstep_ok\nstep_not_started_1\nstep_not_started_2\n"); } protected Path getResource(String fileName) throws URISyntaxException { URL filePath = this.getClass().getResource(fileName); assertNotNull(filePath); return Paths.get(filePath.toURI()); } }