From 5092e32a263126ce9078f164945478178b51ffe1 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Fri, 19 Dec 2014 14:25:17 +0100 Subject: [PATCH] Add tests for Groovy-based projects Closes gh-61 --- .../initializr/support/ProjectAssert.groovy | 10 ++++ ...lizerControllerFormIntegrationTests.groovy | 54 ++++++++++++++++--- .../web/support/DefaultHomePage.groovy | 3 +- .../initializr/web/support/HomePage.groovy | 4 ++ .../initializr/web/support/StsHomePage.groovy | 3 +- 5 files changed, 64 insertions(+), 10 deletions(-) diff --git a/initializr/src/test/groovy/io/spring/initializr/support/ProjectAssert.groovy b/initializr/src/test/groovy/io/spring/initializr/support/ProjectAssert.groovy index 90c874d7..6c33b43f 100644 --- a/initializr/src/test/groovy/io/spring/initializr/support/ProjectAssert.groovy +++ b/initializr/src/test/groovy/io/spring/initializr/support/ProjectAssert.groovy @@ -65,6 +65,16 @@ class ProjectAssert { isJavaProject(DEFAULT_APPLICATION_NAME) } + ProjectAssert isGroovyProject(String expectedApplicationName) { + hasFile("src/main/groovy/demo/${expectedApplicationName}.groovy", + "src/test/groovy/demo/${expectedApplicationName}Tests.groovy", + 'src/main/resources/application.properties') + } + + ProjectAssert isGroovyProject() { + isGroovyProject(DEFAULT_APPLICATION_NAME) + } + ProjectAssert isJavaWarProject(String expectedApplicationName) { isJavaProject(expectedApplicationName).hasStaticAndTemplatesResources(true) .hasFile('src/main/java/demo/ServletInitializer.java') diff --git a/initializr/src/test/groovy/io/spring/initializr/web/AbstractInitializerControllerFormIntegrationTests.groovy b/initializr/src/test/groovy/io/spring/initializr/web/AbstractInitializerControllerFormIntegrationTests.groovy index 92622b4e..9434dd98 100644 --- a/initializr/src/test/groovy/io/spring/initializr/web/AbstractInitializerControllerFormIntegrationTests.groovy +++ b/initializr/src/test/groovy/io/spring/initializr/web/AbstractInitializerControllerFormIntegrationTests.groovy @@ -20,6 +20,7 @@ import com.gargoylesoftware.htmlunit.WebClient import com.gargoylesoftware.htmlunit.WebRequest import com.gargoylesoftware.htmlunit.WebResponse import com.gargoylesoftware.htmlunit.html.HtmlPage +import io.spring.initializr.support.PomAssert import io.spring.initializr.support.ProjectAssert import io.spring.initializr.web.support.HomePage import org.junit.After @@ -64,7 +65,7 @@ abstract class AbstractInitializerControllerFormIntegrationTests extends Abstrac } @Test - void createDefaultProject() { + void createDefaultJavaProject() { def page = home() def projectAssert = zipProjectAssert(page.generateProject().contentAsStream.bytes) projectAssert.isMavenProject().isJavaProject().hasStaticAndTemplatesResources(false) @@ -73,13 +74,19 @@ abstract class AbstractInitializerControllerFormIntegrationTests extends Abstrac } @Test - void createProjectWithCustomDefaults() { + void createDefaultGroovyProject() { def page = home() - page.groupId = 'com.acme' - page.artifactId = 'foo-bar' - page.name = 'My project' - page.description = 'A description for my project' - page.dependencies << 'web' << 'data-jpa' + page.language = 'groovy' + def projectAssert = zipProjectAssert(page.generateProject().contentAsStream.bytes) + projectAssert.isMavenProject().isGroovyProject().hasStaticAndTemplatesResources(false) + .pomAssert().hasDependenciesCount(3) + .hasSpringBootStarterRootDependency().hasSpringBootStarterDependency('test') + .hasDependency('org.codehaus.groovy', 'groovy') + } + + @Test + void createJavaProjectWithCustomDefaults() { + def page = createCustomPage() WebResponse webResponse = page.generateProject() String value = webResponse.getResponseHeaderValue('Content-Disposition') @@ -89,7 +96,38 @@ abstract class AbstractInitializerControllerFormIntegrationTests extends Abstrac projectAssert.isMavenProject().isJavaProject('MyProjectApplication') .hasStaticAndTemplatesResources(true) - projectAssert.pomAssert().hasGroupId('com.acme').hasArtifactId('foo-bar') + assertMavenProject(projectAssert.pomAssert()) + } + + @Test + void createGroovyProjectWithCustomDefaults() { + def page = createCustomPage() + page.language = 'groovy' + + WebResponse webResponse = page.generateProject() + String value = webResponse.getResponseHeaderValue('Content-Disposition') + assertEquals 'attachment; filename="foo-bar.zip"', value + + def projectAssert = zipProjectAssert(webResponse) + projectAssert.isMavenProject().isGroovyProject('MyProjectApplication') + .hasStaticAndTemplatesResources(true) + + assertMavenProject(projectAssert.pomAssert()) + .hasDependency('org.codehaus.groovy', 'groovy') + } + + private def createCustomPage() { + def page = home() + page.groupId = 'com.acme' + page.artifactId = 'foo-bar' + page.name = 'My project' + page.description = 'A description for my project' + page.dependencies << 'web' << 'data-jpa' + page + } + + private PomAssert assertMavenProject(PomAssert pomAssert) { + pomAssert.hasGroupId('com.acme').hasArtifactId('foo-bar') .hasName('My project').hasDescription('A description for my project') .hasSpringBootStarterDependency('web') .hasSpringBootStarterDependency('data-jpa') diff --git a/initializr/src/test/groovy/io/spring/initializr/web/support/DefaultHomePage.groovy b/initializr/src/test/groovy/io/spring/initializr/web/support/DefaultHomePage.groovy index a2de9af4..feae08da 100644 --- a/initializr/src/test/groovy/io/spring/initializr/web/support/DefaultHomePage.groovy +++ b/initializr/src/test/groovy/io/spring/initializr/web/support/DefaultHomePage.groovy @@ -37,7 +37,8 @@ class DefaultHomePage extends HomePage { select('packaging', packaging) } - private void select(String selectId, String value) { + @Override + protected void select(String selectId, String value) { if (value) { def input = page.getHtmlElementById(selectId) input.setSelectedAttribute(value, true) diff --git a/initializr/src/test/groovy/io/spring/initializr/web/support/HomePage.groovy b/initializr/src/test/groovy/io/spring/initializr/web/support/HomePage.groovy index 40b23271..df83de9c 100644 --- a/initializr/src/test/groovy/io/spring/initializr/web/support/HomePage.groovy +++ b/initializr/src/test/groovy/io/spring/initializr/web/support/HomePage.groovy @@ -33,6 +33,7 @@ abstract class HomePage { String packageName String type String packaging + String language List dependencies = [] protected final HtmlPage page @@ -63,6 +64,7 @@ abstract class HomePage { setTextValue('name', name) setTextValue('description', description) setTextValue('packageName', packageName) + select('language', language) selectDependencies(dependencies) } @@ -73,6 +75,8 @@ abstract class HomePage { } } + protected abstract void select(String selectId, String value) + protected void selectDependencies(List dependencies) { def styles = page.getElementsByName("style") def allStyles = [:] diff --git a/initializr/src/test/groovy/io/spring/initializr/web/support/StsHomePage.groovy b/initializr/src/test/groovy/io/spring/initializr/web/support/StsHomePage.groovy index a45ce1b7..dd505f84 100644 --- a/initializr/src/test/groovy/io/spring/initializr/web/support/StsHomePage.groovy +++ b/initializr/src/test/groovy/io/spring/initializr/web/support/StsHomePage.groovy @@ -36,7 +36,8 @@ class StsHomePage extends HomePage { select('packaging', packaging) } - private void select(String selectId, String value) { + @Override + protected void select(String selectId, String value) { if (value) { page.getElementsByIdAndOrName(selectId).each { it.checked = value.equals(it.defaultValue)