Java tutorial
/* * Copyright 2006-2016 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 com.consol.citrus.admin.service; import com.consol.citrus.Citrus; import com.consol.citrus.admin.model.*; import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ClassPathResource; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.testng.AbstractTestNGSpringContextTests; import org.testng.Assert; import org.testng.annotations.Test; import java.io.IOException; import java.util.List; import java.util.Optional; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.when; /** * @author Christoph Deppisch */ @ContextConfiguration(locations = { "classpath:citrus-admin-unit-context.xml" }) public class TestCaseServiceTest extends AbstractTestNGSpringContextTests { @Autowired private TestCaseService testCaseService; private Project project = Mockito.mock(Project.class); @Test public void testGetTestPackages() throws IOException { reset(project); when(project.getSettings()).thenReturn(new ProjectSettings()); String projectHome = new ClassPathResource("projects/sample").getFile().getAbsolutePath(); when(project.getProjectHome()).thenReturn(projectHome); when(project.getJavaDirectory()).thenReturn(projectHome + "/src/test/java/"); List<TestGroup> testPackages = testCaseService.getTestPackages(project); Assert.assertNotNull(testPackages); Assert.assertEquals(testPackages.size(), 5L); assertTestPackage(testPackages, "javadsl", 4L); assertTestPackage(testPackages, "foo", 2L); assertTestPackage(testPackages, "bar", 2L); assertTestPackage(testPackages, "com.consol.citrus.bar", 2L); assertTestPackage(testPackages, "com.consol.citrus.bar.scan", 1L); assertTestPresent(testPackages.get(0).getTests(), "CitrusJavaTest.fooTest", "CitrusJavaTest", "fooTest"); assertTestPresent(testPackages.get(0).getTests(), "BarJavaTest", "CitrusJavaTest", "barTest"); assertTestPresent(testPackages.get(0).getTests(), "DataProviderJavaTest.fooProviderTest", "DataProviderJavaTest", "fooProviderTest"); assertTestPresent(testPackages.get(0).getTests(), "BarProviderTest", "DataProviderJavaTest", "barProviderTest"); assertTestPresent(testPackages.get(1).getTests(), "FooTest", "FooTest", "FooTest"); assertTestPresent(testPackages.get(1).getTests(), "WithoutLastUpdatedOnTest", "WithoutLastUpdatedOnTest", "withoutLastUpdatedOnTest"); assertTestPresent(testPackages.get(2).getTests(), "BarTest", "BarTest", "barTest"); assertTestPresent(testPackages.get(2).getTests(), "Bar2Test", "BarTest", "bar2Test"); assertTestPresent(testPackages.get(3).getTests(), "BarPackageTest", "BarTest", "barPackageTest"); assertTestPresent(testPackages.get(3).getTests(), "barPackageNameTest", "BarTest", "barPackageNameTest"); assertTestPresent(testPackages.get(4).getTests(), "barPackageScanTest", "BarTest", "barPackageScanTest"); } /** * Finds package by name and validates test list size. * @param testPackages * @param name * @param size */ private void assertTestPackage(List<TestGroup> testPackages, String name, long size) { Optional<TestGroup> testGroup = testPackages.stream().filter(group -> group.getName().equals(name)) .findFirst(); Assert.assertTrue(testGroup.isPresent(), "Missing test package with name: " + name); Assert.assertEquals(testGroup.get().getTests().size(), size); } /** * Checks that test is present in list. * @param tests * @param name * @param className * @param methodName */ private void assertTestPresent(List<com.consol.citrus.admin.model.Test> tests, String name, String className, String methodName) { for (com.consol.citrus.admin.model.Test test : tests) { if (test.getName().equals(name) && test.getClassName().equals(className) && test.getMethodName().equals(methodName)) { return; } } Assert.fail(String.format("Missing test: name='%s', className='%s', methodName='%s'", name, className, methodName)); } @Test public void testGetTestDetailXml() throws Exception { reset(project); when(project.getSettings()).thenReturn(new ProjectSettings()); when(project.getProjectHome()) .thenReturn(new ClassPathResource("projects/sample").getFile().getAbsolutePath()); when(project.getAbsolutePath("foo/FooTest.xml")) .thenReturn(new ClassPathResource("projects/sample/src/test/resources/foo/FooTest.xml").getFile() .getAbsolutePath()); TestDetail testDetail = testCaseService.getTestDetail(project, new com.consol.citrus.admin.model.Test("foo", "FooTest", "fooTest", "FooTest", TestType.XML)); Assert.assertEquals(testDetail.getName(), "FooTest"); Assert.assertEquals(testDetail.getPackageName(), "foo"); Assert.assertEquals(testDetail.getRelativePath(), "foo/FooTest.xml"); Assert.assertEquals(testDetail.getType(), TestType.XML); Assert.assertEquals(testDetail.getAuthor(), "Christoph"); Assert.assertEquals(testDetail.getLastModified().longValue(), 1315222929000L); Assert.assertEquals(testDetail.getDescription(), "This is a sample test"); Assert.assertTrue(testDetail.getFile().endsWith("foo/FooTest")); Assert.assertEquals(testDetail.getActions().size(), 3L); Assert.assertEquals(testDetail.getActions().get(0).getType(), "echo"); Assert.assertEquals(testDetail.getActions().get(1).getType(), "send"); Assert.assertEquals(testDetail.getActions().get(2).getType(), "send"); Assert.assertEquals(testDetail.getActions().get(0).getProperties().size(), 2L); Assert.assertEquals(testDetail.getActions().get(0).getProperties().get(0).getId(), "description"); Assert.assertEquals(testDetail.getActions().get(0).getProperties().get(1).getId(), "message"); Assert.assertEquals(testDetail.getActions().get(1).getProperties().size(), 4L); Assert.assertEquals(testDetail.getActions().get(1).getProperties().get(0).getId(), "endpoint"); Assert.assertEquals(testDetail.getActions().get(1).getProperties().get(0).getValue(), "sampleEndpoint"); Assert.assertEquals(testDetail.getActions().get(1).getProperties().get(1).getId(), "message.data"); Assert.assertEquals(testDetail.getActions().get(1).getProperties().get(1).getValue(), "Hello"); Assert.assertEquals(testDetail.getActions().get(2).getProperties().size(), 4L); Assert.assertEquals(testDetail.getActions().get(2).getProperties().get(0).getId(), "endpoint"); Assert.assertEquals(testDetail.getActions().get(2).getProperties().get(0).getValue(), "samplePayloadEndpoint"); Assert.assertEquals(testDetail.getActions().get(2).getProperties().get(1).getId(), "message.payload"); Assert.assertEquals(testDetail.getActions().get(2).getProperties().get(1).getValue(), "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Test xmlns=\"http://www.citrusframework.org\" xmlns:spring=\"http://www.springframework.org/schema/beans\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">Hello</Test>"); } @Test public void testGetTestDetailXmlWithoutLastUpdatedOn() throws Exception { reset(project); when(project.getSettings()).thenReturn(new ProjectSettings()); when(project.getProjectHome()) .thenReturn(new ClassPathResource("projects/sample").getFile().getAbsolutePath()); when(project.getAbsolutePath("foo/WithoutLastUpdatedOnTest.xml")).thenReturn( new ClassPathResource("projects/sample/src/test/resources/foo/WithoutLastUpdatedOnTest.xml") .getFile().getAbsolutePath()); TestDetail testDetail = testCaseService.getTestDetail(project, new com.consol.citrus.admin.model.Test("foo", "WithoutLastUpdatedOnTest", "withoutLastUpdatedOnTest", "WithoutLastUpdatedOnTest", TestType.XML)); Assert.assertNull(testDetail.getLastModified()); } @Test public void testGetTestDetailJava() throws Exception { reset(project); when(project.getName()).thenReturn("citrus-core"); when(project.getVersion()).thenReturn(Citrus.getVersion()); when(project.isMavenProject()).thenReturn(true); when(project.getSettings()).thenReturn(new ProjectSettings()); String projectHome = new ClassPathResource("projects/maven").getFile().getAbsolutePath(); when(project.getProjectHome()).thenReturn(projectHome); when(project.getJavaDirectory()).thenReturn(projectHome + "projects/maven/src/test/java/"); when(project.getMavenPomFile()).thenReturn(new ClassPathResource("projects/maven/pom.xml").getFile()); TestDetail testDetail = testCaseService.getTestDetail(project, new com.consol.citrus.admin.model.Test("com.consol.citrus.admin.javadsl", "CitrusJavaTest", "fooTest", "CitrusJavaTest.fooTest", TestType.JAVA)); Assert.assertEquals(testDetail.getName(), "CitrusJavaTest.fooTest"); Assert.assertEquals(testDetail.getPackageName(), "com.consol.citrus.admin.javadsl"); Assert.assertEquals(testDetail.getRelativePath(), "com/consol/citrus/admin/javadsl/CitrusJavaTest.java"); Assert.assertEquals(testDetail.getType(), TestType.JAVA); Assert.assertTrue(testDetail.getFile().endsWith("javadsl/CitrusJavaTest")); Assert.assertEquals(testDetail.getActions().size(), 1L); Assert.assertEquals(testDetail.getActions().get(0).getType(), "echo"); Assert.assertEquals(testDetail.getActions().get(0).getProperties().size(), 2L); Assert.assertEquals(testDetail.getActions().get(0).getProperties().get(0).getId(), "description"); Assert.assertEquals(testDetail.getActions().get(0).getProperties().get(1).getId(), "message"); } }