@Test public void assertExistsPrivateCtor() { reflections.getSubTypesOf(Object.class).stream() .filter(clazz -> !clazz.isAnnotationPresent(Configuration.class)) .filter(clazz -> !clazz.isAnnotationPresent(Component.class)) .filter(clazz -> !clazz.isAnnotationPresent(SpringBootApplication.class)) .filter(clazz -> !clazz.getName().endsWith("Test")) .filter(clazz -> !clazz.isInterface()) .filter(clazz -> Arrays.stream(clazz.getDeclaredFields()) .allMatch(field -> Modifier.isStatic(field.getModifiers()))) .forEach(clazz -> { System.out.println("Expecting class "+clazz.getName()+" to :"); System.out.print("\t-> be final "); assertThat(clazz).isFinal(); System.out.println("[*]"); System.out.print("\t-> have exactly one constructor "); Constructor<?>[] constructors = clazz.getDeclaredConstructors(); assertThat(constructors).hasSize(1); System.out.println("[*]"); System.out.print("\t-> and that this constructor is private "); assertThat(Modifier.isPrivate(constructors[0].getModifiers())); System.out.println("[*]"); }); }
/** * Return root package of spring boot application. * * @param applicationContext * @return list of packages */ public static List<String> getApplicationPackageName(final ApplicationContext applicationContext) { Set<String> candidateClasses = new HashSet<>(); candidateClasses.addAll(Arrays.asList(applicationContext.getBeanNamesForAnnotation(SpringBootApplication.class))); candidateClasses.addAll(Arrays.asList(applicationContext.getBeanNamesForAnnotation(EnableAutoConfiguration.class))); candidateClasses.addAll(Arrays.asList(applicationContext.getBeanNamesForAnnotation(ComponentScan.class))); if (candidateClasses.isEmpty()) { throw new RuntimeException("Is mandatory for the starter have @SpringBootApplication, @EnableAutoConfiguration or @ComponentScan annotation"); } else { return candidateClasses.parallelStream() .map(candidateClazz -> applicationContext.getBean(candidateClazz).getClass().getPackage().getName()) .distinct() .collect(Collectors.toList()); } }
@Test public void springBootUseSpringBootApplicationGroovy() { ProjectRequest request = createProjectRequest("web"); request.setLanguage("groovy"); request.setBootVersion("1.2.0.RC1"); request.setName("MyDemo"); request.setPackageName("foo"); generateProject(request) .sourceCodeAssert("src/main/groovy/foo/MyDemoApplication.groovy") .hasImports(SpringBootApplication.class.getName()) .doesNotHaveImports(EnableAutoConfiguration.class.getName(), ComponentScan.class.getName(), Configuration.class.getName()) .contains("@SpringBootApplication").doesNotContain( "@EnableAutoConfiguration", "@Configuration", "@ComponentScan"); }
@Bean @ConditionalOnClass(SpringBootApplication.class) public FilterRegistrationBean keycloakPreAuthActionsFilterRegistrationBean( KeycloakPreAuthActionsFilter filter) { FilterRegistrationBean registrationBean = new FilterRegistrationBean(filter); registrationBean.setEnabled(false); return registrationBean; }
@Test public void springBoot11UseEnableAutoConfigurationJava() { ProjectRequest request = createProjectRequest("web"); request.setBootVersion("1.1.9.RELEASE"); request.setName("MyDemo"); request.setPackageName("foo"); generateProject(request) .sourceCodeAssert("src/main/java/foo/MyDemoApplication.java") .hasImports(EnableAutoConfiguration.class.getName(), ComponentScan.class.getName(), Configuration.class.getName()) .doesNotHaveImports(SpringBootApplication.class.getName()) .contains("@EnableAutoConfiguration", "@Configuration", "@ComponentScan") .doesNotContain("@SpringBootApplication"); }
@Test public void springBootUseSpringBootApplicationJava() { ProjectRequest request = createProjectRequest("web"); request.setBootVersion("1.2.0.RC1"); request.setName("MyDemo"); request.setPackageName("foo"); generateProject(request) .sourceCodeAssert("src/main/java/foo/MyDemoApplication.java") .hasImports(SpringBootApplication.class.getName()) .doesNotHaveImports(EnableAutoConfiguration.class.getName(), ComponentScan.class.getName(), Configuration.class.getName()) .contains("@SpringBootApplication").doesNotContain( "@EnableAutoConfiguration", "@Configuration", "@ComponentScan"); }
@Test public void springBoot11UseEnableAutoConfigurationGroovy() { ProjectRequest request = createProjectRequest("web"); request.setLanguage("groovy"); request.setBootVersion("1.1.9.RELEASE"); request.setName("MyDemo"); request.setPackageName("foo"); generateProject(request) .sourceCodeAssert("src/main/groovy/foo/MyDemoApplication.groovy") .hasImports(EnableAutoConfiguration.class.getName(), ComponentScan.class.getName(), Configuration.class.getName()) .doesNotHaveImports(SpringBootApplication.class.getName()) .contains("@EnableAutoConfiguration", "@Configuration", "@ComponentScan") .doesNotContain("@SpringBootApplication"); }
@Test public void springBoot11UseEnableAutoConfigurationKotlin() { ProjectRequest request = createProjectRequest("web"); request.setLanguage("kotlin"); request.setBootVersion("1.1.9.RELEASE"); request.setName("MyDemo"); request.setPackageName("foo"); generateProject(request) .sourceCodeAssert("src/main/kotlin/foo/MyDemoApplication.kt") .hasImports(EnableAutoConfiguration.class.getName(), ComponentScan.class.getName(), Configuration.class.getName()) .doesNotHaveImports(SpringBootApplication.class.getName()) .contains("@EnableAutoConfiguration", "@Configuration", "@ComponentScan") .doesNotContain("@SpringBootApplication"); }
@Test public void springBootUseSpringBootApplicationKotlin() { ProjectRequest request = createProjectRequest("web"); request.setLanguage("kotlin"); request.setBootVersion("1.2.0.RC1"); request.setName("MyDemo"); request.setPackageName("foo"); generateProject(request) .sourceCodeAssert("src/main/kotlin/foo/MyDemoApplication.kt") .hasImports(SpringBootApplication.class.getName()) .doesNotHaveImports(EnableAutoConfiguration.class.getName(), ComponentScan.class.getName(), Configuration.class.getName()) .contains("@SpringBootApplication").doesNotContain( "@EnableAutoConfiguration", "@Configuration", "@ComponentScan"); }