Restore integration tests

The new layout broke some integration tests as it is now necessary to
click on a link to display additional options.

 Tests have also been rewritten to take the new design (and new features)
 into account.
This commit is contained in:
Stephane Nicoll
2015-12-11 13:48:26 +01:00
parent 22bec6d00d
commit 89330da312
4 changed files with 210 additions and 81 deletions

View File

@@ -27,6 +27,8 @@ import static org.junit.Assert.assertTrue
*/
class ProjectAssert {
public static final DEFAULT_PACKAGE_NAME = 'com.example'
private static final DEFAULT_APPLICATION_NAME = generateDefaultApplicationName()
final File dir
@@ -95,29 +97,32 @@ class ProjectAssert {
this
}
ProjectAssert isJavaProject(String expectedApplicationName) {
hasFile("src/main/java/com/example/${expectedApplicationName}.java",
"src/test/java/com/example/${expectedApplicationName}Tests.java",
ProjectAssert isJavaProject(String expectedPackageName, String expectedApplicationName) {
String packageName = expectedPackageName.replace('.', '/')
hasFile("src/main/java/$packageName/${expectedApplicationName}.java",
"src/test/java/$packageName/${expectedApplicationName}Tests.java",
'src/main/resources/application.properties')
}
ProjectAssert isJavaProject() {
isJavaProject(DEFAULT_APPLICATION_NAME)
isJavaProject(DEFAULT_PACKAGE_NAME, DEFAULT_APPLICATION_NAME)
}
ProjectAssert isGroovyProject(String expectedApplicationName) {
ProjectAssert isGroovyProject(String expectedPackageName, String expectedApplicationName) {
String codeLocation = (mavenProject ? 'java' : 'groovy')
hasFile("src/main/$codeLocation/com/example/${expectedApplicationName}.groovy",
"src/test/$codeLocation/com/example/${expectedApplicationName}Tests.groovy",
String packageName = expectedPackageName.replace('.', '/')
hasFile("src/main/$codeLocation/$packageName/${expectedApplicationName}.groovy",
"src/test/$codeLocation/$packageName/${expectedApplicationName}Tests.groovy",
'src/main/resources/application.properties')
}
ProjectAssert isGroovyProject() {
isGroovyProject(DEFAULT_APPLICATION_NAME)
isGroovyProject(DEFAULT_PACKAGE_NAME, DEFAULT_APPLICATION_NAME)
}
ProjectAssert isJavaWarProject(String expectedApplicationName) {
isJavaProject(expectedApplicationName).hasStaticAndTemplatesResources(true)
isJavaProject(DEFAULT_PACKAGE_NAME, expectedApplicationName)
.hasStaticAndTemplatesResources(true)
.hasFile('src/main/java/com/example/ServletInitializer.java')
}

View File

@@ -16,6 +16,7 @@
package io.spring.initializr.web
import io.spring.initializr.test.ProjectAssert
import org.junit.Test
import org.springframework.http.HttpEntity
@@ -50,7 +51,7 @@ class MainControllerEnvIntegrationTests extends AbstractInitializrControllerInte
@Test
void generateProjectWithInvalidName() {
downloadZip('/starter.zip?style=data-jpa&name=Invalid')
.isJavaProject('FooBarApplication')
.isJavaProject(ProjectAssert.DEFAULT_PACKAGE_NAME, 'FooBarApplication')
.isMavenProject()
.hasStaticAndTemplatesResources(false).pomAssert()
.hasDependenciesCount(2)

View File

@@ -17,13 +17,16 @@
package io.spring.initializr.web
import geb.Browser
import io.spring.initializr.test.ProjectAssert
import io.spring.initializr.web.test.HomePage
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.openqa.selenium.Keys
import org.openqa.selenium.WebDriver
import org.openqa.selenium.firefox.FirefoxDriver
import org.openqa.selenium.firefox.FirefoxProfile
import org.openqa.selenium.interactions.Actions
import org.springframework.test.context.ActiveProfiles
@@ -39,6 +42,9 @@ class ProjectGenerationSmokeTests extends AbstractInitializrControllerIntegratio
private File downloadDir
private WebDriver driver
private Browser browser
private Actions actions
private def enterAction
@Before
void setup() {
@@ -52,8 +58,11 @@ class ProjectGenerationSmokeTests extends AbstractInitializrControllerIntegratio
"application/zip,application/x-compress,application/octet-stream");
driver = new FirefoxDriver(fxProfile);
actions = new Actions(driver)
browser = new Browser()
browser.driver = driver
enterAction = actions.sendKeys(Keys.ENTER).build()
}
@After
@@ -64,26 +73,126 @@ class ProjectGenerationSmokeTests extends AbstractInitializrControllerIntegratio
}
@Test
void createDefaultJavaProject() {
void createSimpleProject() {
toHome {
page.generateProject.click()
at HomePage
def projectAssert = zipProjectAssert(from('demo.zip'))
projectAssert.hasBaseDir("demo").isMavenProject().isJavaProject()
.hasStaticAndTemplatesResources(false)
.pomAssert().hasDependenciesCount(2)
.hasSpringBootStarterRootDependency().hasSpringBootStarterTest()
assertSimpleProject()
.isMavenProject()
.pomAssert()
.hasDependenciesCount(2)
.hasSpringBootStarterRootDependency()
.hasSpringBootStarterTest()
}
}
@Test
void createDefaultGroovyProject() {
void createSimpleProjectWithGradle() {
toHome {
page.type = 'gradle-project'
page.generateProject.click()
at HomePage
assertSimpleProject()
.isGradleProject()
.gradleBuildAssert()
.contains("compile('org.springframework.boot:spring-boot-starter')")
.contains("testCompile('org.springframework.boot:spring-boot-starter-test')")
}
}
@Test
void createSimpleProjectWithDifferentBootVersion() {
toHome {
page.bootVersion = '1.0.2.RELEASE'
page.generateProject.click()
at HomePage
assertSimpleProject()
.isMavenProject()
.pomAssert()
.hasBootVersion('1.0.2.RELEASE')
.hasDependenciesCount(2)
.hasSpringBootStarterRootDependency()
.hasSpringBootStarterTest()
}
}
@Test
void createSimpleProjectWithDependencies() {
toHome {
selectDependency(page, 'Data JPA')
selectDependency(page, 'Security')
page.generateProject.click()
at HomePage
assertSimpleProject()
.isMavenProject()
.pomAssert()
.hasDependenciesCount(3)
.hasSpringBootStarterDependency('data-jpa')
.hasSpringBootStarterDependency('security')
.hasSpringBootStarterTest()
}
}
@Test
void selectDependencyTwiceRemovesIt() {
toHome {
selectDependency(page, 'Data JPA')
selectDependency(page, 'Security')
selectDependency(page, 'Security') // remove
page.generateProject.click()
at HomePage
assertSimpleProject()
.isMavenProject()
.pomAssert()
.hasDependenciesCount(2)
.hasSpringBootStarterDependency('data-jpa')
.hasSpringBootStarterTest()
}
}
ProjectAssert assertSimpleProject() {
zipProjectAssert(from('demo.zip'))
.hasBaseDir("demo")
.isJavaProject()
.hasStaticAndTemplatesResources(false)
}
@Test
void customArtifactIdUpdateNameAutomatically() {
toHome {
page.groupId = 'org.foo'
page.generateProject.click()
at HomePage
zipProjectAssert(from('demo.zip'))
.hasBaseDir("demo")
.isJavaProject('org.foo', 'DemoApplication')
}
}
@Test
void customGroupIdIdUpdatePackageAutomatically() {
toHome {
page.artifactId = 'my-project'
page.generateProject.click()
at HomePage
zipProjectAssert(from('my-project.zip'))
.hasBaseDir("my-project")
.isJavaProject('com.example', 'MyProjectApplication')
}
}
@Test
void createGroovyProject() {
toHome {
page.advanced.click()
page.language = 'groovy'
page.generateProject.click()
at HomePage
def projectAssert = zipProjectAssert(from('demo.zip'))
projectAssert.hasBaseDir('demo').isMavenProject().isGroovyProject()
projectAssert.hasBaseDir('demo')
.isMavenProject()
.isGroovyProject()
.hasStaticAndTemplatesResources(false)
.pomAssert().hasDependenciesCount(3)
.hasSpringBootStarterRootDependency().hasSpringBootStarterTest()
@@ -92,76 +201,16 @@ class ProjectGenerationSmokeTests extends AbstractInitializrControllerIntegratio
}
@Test
void createJavaProjectWithCustomDefaults() {
toHome {
page.groupId = 'com.acme'
page.artifactId = 'foo-bar'
page.name = 'My project'
page.description = 'A description for my project'
page.dependency('web').click()
page.dependency('data-jpa').click()
page.generateProject.click()
at HomePage
def projectAssert = zipProjectAssert(from('foo-bar.zip'))
projectAssert.hasBaseDir("foo-bar").isMavenProject()
.isJavaProject('MyProjectApplication')
.hasStaticAndTemplatesResources(true)
.pomAssert().hasGroupId('com.acme').hasArtifactId('foo-bar')
.hasName('My project').hasDescription('A description for my project')
.hasSpringBootStarterDependency('web')
.hasSpringBootStarterDependency('data-jpa')
.hasSpringBootStarterTest()
}
}
@Test
void createGroovyProjectWithCustomDefaults() {
toHome {
page.language = 'groovy'
page.groupId = 'org.biz'
page.artifactId = 'groovy-project'
page.name = 'My Groovy project'
page.description = 'A description for my Groovy project'
page.dependency('web').click()
page.dependency('data-jpa').click()
page.generateProject.click()
at HomePage
def projectAssert = zipProjectAssert(from('groovy-project.zip'))
projectAssert.hasBaseDir("groovy-project").isMavenProject()
.isGroovyProject('MyGroovyProjectApplication')
.hasStaticAndTemplatesResources(true)
.pomAssert().hasGroupId('org.biz').hasArtifactId('groovy-project')
.hasName('My Groovy project').hasDescription('A description for my Groovy project')
.hasSpringBootStarterDependency('web')
.hasSpringBootStarterDependency('data-jpa')
.hasSpringBootStarterTest()
.hasDependency('org.codehaus.groovy', 'groovy')
}
}
@Test
void createSimpleGradleProject() {
toHome {
page.type = 'gradle-project'
page.dependency('data-jpa').click()
page.generateProject.click()
at HomePage
def projectAssert = zipProjectAssert(from('demo.zip'))
projectAssert.hasBaseDir("demo").isGradleProject()
.isJavaProject()
.hasStaticAndTemplatesResources(false)
}
}
@Test
void createWarProject() {
toHome {
page.advanced.click()
page.packaging = 'war'
page.generateProject.click()
at HomePage
def projectAssert = zipProjectAssert(from('demo.zip'))
projectAssert.hasBaseDir("demo").isMavenProject()
projectAssert.hasBaseDir("demo")
.isMavenProject()
.isJavaWarProject()
.pomAssert().hasPackaging('war').hasDependenciesCount(3)
.hasSpringBootStarterDependency('web') // Added with war packaging
@@ -170,9 +219,70 @@ class ProjectGenerationSmokeTests extends AbstractInitializrControllerIntegratio
}
}
@Test
void createJavaProjectWithCustomDefaults() {
toHome {
page.groupId = 'com.acme'
page.artifactId = 'foo-bar'
page.advanced.click()
page.name = 'My project'
page.description = 'A description for my project'
page.packageName = 'com.example.foo'
page.dependency('web').click()
page.dependency('data-jpa').click()
page.generateProject.click()
at HomePage
def projectAssert = zipProjectAssert(from('foo-bar.zip'))
projectAssert.hasBaseDir("foo-bar")
.isMavenProject()
.isJavaProject('com.example.foo', 'MyProjectApplication')
.hasStaticAndTemplatesResources(true)
.pomAssert()
.hasGroupId('com.acme')
.hasArtifactId('foo-bar')
.hasName('My project')
.hasDescription('A description for my project')
.hasSpringBootStarterDependency('web')
.hasSpringBootStarterDependency('data-jpa')
.hasSpringBootStarterTest()
}
}
@Test
void createGroovyProjectWithCustomDefaults() {
toHome {
page.groupId = 'org.biz'
page.artifactId = 'groovy-project'
page.advanced.click()
page.language = 'groovy'
page.name = 'My Groovy project'
page.description = 'A description for my Groovy project'
page.packageName = 'com.example.biz'
page.dependency('web').click()
page.dependency('data-jpa').click()
page.generateProject.click()
at HomePage
def projectAssert = zipProjectAssert(from('groovy-project.zip'))
projectAssert.hasBaseDir("groovy-project")
.isMavenProject()
.isGroovyProject('com.example.biz', 'MyGroovyProjectApplication')
.hasStaticAndTemplatesResources(true)
.pomAssert()
.hasGroupId('org.biz')
.hasArtifactId('groovy-project')
.hasName('My Groovy project')
.hasDescription('A description for my Groovy project')
.hasSpringBootStarterDependency('web')
.hasSpringBootStarterDependency('data-jpa')
.hasSpringBootStarterTest()
.hasDependency('org.codehaus.groovy', 'groovy')
}
}
@Test
void dependencyHiddenAccordingToRange() {
toHome { // bur: [1.1.4.RELEASE,1.2.0.BUILD-SNAPSHOT)
page.advanced.click()
page.dependency('org.acme:bur').displayed == true
page.bootVersion = '1.0.2.RELEASE'
@@ -190,6 +300,7 @@ class ProjectGenerationSmokeTests extends AbstractInitializrControllerIntegratio
@Test
void dependencyUncheckedWhenHidden() {
toHome {
page.advanced.click()
page.dependency('org.acme:bur').value() == 'org.acme:bur'
page.bootVersion = '1.0.2.RELEASE'
page.dependency('org.acme:bur').displayed == false
@@ -207,6 +318,11 @@ class ProjectGenerationSmokeTests extends AbstractInitializrControllerIntegratio
browser
}
private selectDependency(def page, String text) {
page.autocomplete = text
enterAction.perform()
}
private byte[] from(String fileName) {
getArchive(fileName).bytes
}

View File

@@ -28,8 +28,15 @@ class HomePage extends Page {
static at = { title == 'Spring Initializr' }
static content = {
advanced { $('.tofullversion a') }
simple { $('tosimpleversion a') }
// Simple view
groupId { $('form').groupId() }
artifactId { $('form').artifactId() }
autocomplete { $('form').autocomplete() }
// Advanced view
name { $('form').name() }
description { $('form').description() }
packageName { $('form').packageName() }