mirror of
https://gitee.com/dcren/initializr.git
synced 2025-07-15 14:04:30 +08:00
Extract config classes to TestConfiguration
This commit is contained in:
parent
c62acf515e
commit
f0e07531cc
135
app.groovy
135
app.groovy
@ -1,10 +1,8 @@
|
||||
package app
|
||||
|
||||
@Grab("spring-boot-starter-actuator")
|
||||
@Grab("org.codehaus.groovy:groovy-ant:2.3.2")
|
||||
@Grab('spring-boot-starter-actuator')
|
||||
@Grab('org.codehaus.groovy:groovy-ant:2.3.2')
|
||||
|
||||
@Configuration
|
||||
@EnableConfigurationProperties(Projects)
|
||||
@Controller
|
||||
@Log
|
||||
class MainController {
|
||||
@ -24,71 +22,73 @@ class MainController {
|
||||
@Autowired
|
||||
private Projects projects
|
||||
|
||||
@RequestMapping("/")
|
||||
@RequestMapping('/')
|
||||
@ResponseBody
|
||||
String home() {
|
||||
def model = [:]
|
||||
// sort lists
|
||||
model["styles"] = projects.styles.sort { it.name }
|
||||
model["types"] = projects.types.sort { it.name }
|
||||
template "home.html", model
|
||||
model['styles'] = projects.styles.sort { it.name }
|
||||
model['types'] = projects.types.sort { it.name }
|
||||
template 'home.html', model
|
||||
}
|
||||
|
||||
@RequestMapping("/spring")
|
||||
@RequestMapping('/spring')
|
||||
@ResponseBody
|
||||
ResponseEntity<byte[]> spring() {
|
||||
File download = new File(tmpdir, "spring.zip")
|
||||
File download = new File(tmpdir, 'spring.zip')
|
||||
if (!download.exists()) {
|
||||
log.info("Creating: " + download)
|
||||
log.info('Creating: ' + download)
|
||||
new AntBuilder().zip(destfile: download) {
|
||||
zipfileset(dir:".", includes:"spring/bin/**", filemode:"775")
|
||||
zipfileset(dir:".", includes:"spring/**", excludes:"spring/bin/**")
|
||||
zipfileset(dir:'.', includes:'spring/bin/**', filemode:'775')
|
||||
zipfileset(dir:'.', includes:'spring/**', excludes:'spring/bin/**')
|
||||
}
|
||||
}
|
||||
log.info("Downloading: " + download)
|
||||
new ResponseEntity<byte[]>(download.bytes, ["Content-Type":"application/zip"] as HttpHeaders, HttpStatus.OK)
|
||||
log.info('Downloading: ' + download)
|
||||
new ResponseEntity<byte[]>(download.bytes, ['Content-Type':'application/zip'] as HttpHeaders, HttpStatus.OK)
|
||||
}
|
||||
|
||||
@RequestMapping(value="/starter.tgz", produces="application/x-compress")
|
||||
@RequestMapping(value='/starter.tgz', produces='application/x-compress')
|
||||
@ResponseBody
|
||||
ResponseEntity<byte[]> springTgz(PomRequest request) {
|
||||
|
||||
File dir = File.createTempFile("tmp","",new File(tmpdir));
|
||||
File dir = File.createTempFile('tmp','',new File(tmpdir));
|
||||
def tempFiles = getProjectFiles(dir, request)
|
||||
|
||||
File download = new File(tmpdir, dir.name + ".tgz")
|
||||
log.info("Creating: " + download)
|
||||
File download = new File(tmpdir, dir.name + '.tgz')
|
||||
log.info('Creating: ' + download)
|
||||
tempFiles << download
|
||||
|
||||
new AntBuilder().tar(destfile: download, compression: "gzip") {
|
||||
zipfileset(dir:dir, includes:"**")
|
||||
new AntBuilder().tar(destfile: download, compression: 'gzip') {
|
||||
zipfileset(dir:dir, includes:'**')
|
||||
}
|
||||
log.info("Downloading: " + download)
|
||||
def result = new ResponseEntity<byte[]>(download.bytes, ["Content-Type":"application/x-compress"] as HttpHeaders, HttpStatus.OK)
|
||||
log.info("Uploading: ${download} (${download.bytes.length} bytes)")
|
||||
def result = new ResponseEntity<byte[]>(download.bytes, ['Content-Type':'application/x-compress'] as HttpHeaders, HttpStatus.OK)
|
||||
|
||||
reactor.notify("tempfiles", Event.wrap(tempFiles))
|
||||
log.info('Notifying reactor: ' + download)
|
||||
reactor.notify('tempfiles', Event.wrap(tempFiles))
|
||||
|
||||
result
|
||||
}
|
||||
|
||||
@RequestMapping("/starter.zip")
|
||||
@RequestMapping('/starter.zip')
|
||||
@ResponseBody
|
||||
ResponseEntity<byte[]> springZip(PomRequest request) {
|
||||
|
||||
File dir = File.createTempFile("tmp","",new File(tmpdir));
|
||||
File dir = File.createTempFile('tmp','',new File(tmpdir));
|
||||
def tempFiles = getProjectFiles(dir, request)
|
||||
|
||||
File download = new File(tmpdir, dir.name + ".zip")
|
||||
log.info("Creating: " + download)
|
||||
File download = new File(tmpdir, dir.name + '.zip')
|
||||
log.info('Creating: ' + download)
|
||||
tempFiles << download
|
||||
|
||||
new AntBuilder().zip(destfile: download) {
|
||||
zipfileset(dir:dir, includes:"**")
|
||||
zipfileset(dir:dir, includes:'**')
|
||||
}
|
||||
log.info("Downloading: " + download)
|
||||
def result = new ResponseEntity<byte[]>(download.bytes, ["Content-Type":"application/zip"] as HttpHeaders, HttpStatus.OK)
|
||||
log.info("Uploading: ${download} (${download.bytes.length} bytes)")
|
||||
def result = new ResponseEntity<byte[]>(download.bytes, ['Content-Type':'application/zip'] as HttpHeaders, HttpStatus.OK)
|
||||
|
||||
reactor.notify("tempfiles", Event.wrap(tempFiles))
|
||||
log.info('Notifying reactor: ' + download)
|
||||
reactor.notify('tempfiles', Event.wrap(tempFiles))
|
||||
|
||||
result
|
||||
}
|
||||
@ -103,62 +103,62 @@ class MainController {
|
||||
dir.mkdirs()
|
||||
|
||||
String pom = new String(pom(request, model).body)
|
||||
new File(dir, "pom.xml").write(pom)
|
||||
new File(dir, 'pom.xml').write(pom)
|
||||
|
||||
String gradle = new String(gradle(request, model).body)
|
||||
new File(dir, "build.gradle").write(gradle)
|
||||
new File(dir, 'build.gradle').write(gradle)
|
||||
|
||||
File src = new File(new File(dir, "src/main/java"),request.packageName.replace(".", "/"))
|
||||
File src = new File(new File(dir, 'src/main/java'),request.packageName.replace('.', '/'))
|
||||
src.mkdirs()
|
||||
write(src, "Application.java", model)
|
||||
write(src, 'Application.java', model)
|
||||
|
||||
File test = new File(new File(dir, "src/test/java"),request.packageName.replace(".", "/"))
|
||||
File test = new File(new File(dir, 'src/test/java'),request.packageName.replace('.', '/'))
|
||||
test.mkdirs()
|
||||
if (model.styles.contains("-web")) {
|
||||
model.testAnnotations = "@WebAppConfiguration\n"
|
||||
model.testImports = "import org.springframework.test.context.web.WebAppConfiguration;\n"
|
||||
if (model.styles.contains('-web')) {
|
||||
model.testAnnotations = '@WebAppConfiguration\n'
|
||||
model.testImports = 'import org.springframework.test.context.web.WebAppConfiguration;\n'
|
||||
} else {
|
||||
model.testAnnotations = ""
|
||||
model.testImports = ""
|
||||
model.testAnnotations = ''
|
||||
model.testImports = ''
|
||||
}
|
||||
write(test, "ApplicationTests.java", model)
|
||||
write(test, 'ApplicationTests.java', model)
|
||||
|
||||
File resources = new File(dir, "src/main/resources")
|
||||
File resources = new File(dir, 'src/main/resources')
|
||||
resources.mkdirs()
|
||||
new File(resources, "application.properties").write("")
|
||||
new File(resources, 'application.properties').write('')
|
||||
|
||||
tempFiles
|
||||
|
||||
}
|
||||
|
||||
def write(File src, String name, def model) {
|
||||
log.info("Creating: " + src + "/" + name)
|
||||
log.info('Creating: ' + src + '/' + name)
|
||||
def body = template name, model
|
||||
new File(src, name).write(body)
|
||||
}
|
||||
|
||||
@RequestMapping("/pom")
|
||||
@RequestMapping('/pom')
|
||||
@ResponseBody
|
||||
ResponseEntity<byte[]> pom(PomRequest request, Map model) {
|
||||
model.bootVersion = bootVersion
|
||||
new ResponseEntity<byte[]>(render("starter-pom.xml", request, model), ["Content-Type":"application/octet-stream"] as HttpHeaders, HttpStatus.OK)
|
||||
new ResponseEntity<byte[]>(render('starter-pom.xml', request, model), ['Content-Type':'application/octet-stream'] as HttpHeaders, HttpStatus.OK)
|
||||
|
||||
}
|
||||
|
||||
@RequestMapping("/build")
|
||||
@RequestMapping('/build')
|
||||
@ResponseBody
|
||||
ResponseEntity<byte[]> gradle(PomRequest request, Map model) {
|
||||
model.bootVersion = bootVersion
|
||||
new ResponseEntity<byte[]>(render("starter-build.gradle", request, model), ["Content-Type":"application/octet-stream"] as HttpHeaders, HttpStatus.OK)
|
||||
new ResponseEntity<byte[]>(render('starter-build.gradle', request, model), ['Content-Type':'application/octet-stream'] as HttpHeaders, HttpStatus.OK)
|
||||
}
|
||||
|
||||
byte[] render(String path, PomRequest request, Map model) {
|
||||
|
||||
def style = request.style
|
||||
log.info("Styles requested: " + style)
|
||||
log.info('Styles requested: ' + style)
|
||||
|
||||
def type = request.type
|
||||
log.info("Type requested: " + type)
|
||||
log.info('Type requested: ' + type)
|
||||
|
||||
model.groupId = request.groupId
|
||||
model.artifactId = request.artifactId
|
||||
@ -168,15 +168,15 @@ class MainController {
|
||||
model.packageName = request.packageName
|
||||
|
||||
if (style==null || style.size()==0) {
|
||||
style = [""]
|
||||
style = ['']
|
||||
}
|
||||
if (!style.class.isArray() && !(style instanceof Collection)) {
|
||||
style = [style]
|
||||
}
|
||||
style = style.collect{ it=="jpa" ? "data-jpa" : it }
|
||||
model["styles"] = style.collect{ it=="" ? "" : "-" + it }
|
||||
style = style.collect{ it=='jpa' ? 'data-jpa' : it }
|
||||
model['styles'] = style.collect{ it=='' ? '' : '-' + it }
|
||||
|
||||
log.info("Model: " + model)
|
||||
log.info('Model: ' + model)
|
||||
|
||||
def body = template path, model
|
||||
body
|
||||
@ -184,17 +184,7 @@ class MainController {
|
||||
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@EnableReactor
|
||||
class ReactorConfiguration {
|
||||
|
||||
@Bean
|
||||
public Reactor rootReactor(reactor.core.Environment reactorEnvironment) {
|
||||
return reactorEnvironment.getRootReactor();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Consumer
|
||||
@Log
|
||||
class TemporaryFileCleaner {
|
||||
@ -204,7 +194,7 @@ class TemporaryFileCleaner {
|
||||
|
||||
@Selector('tempfiles')
|
||||
void clean(def tempFiles) {
|
||||
log.info "Tempfiles: " + tempFiles
|
||||
log.info 'Tempfiles: ' + tempFiles
|
||||
if (tempFiles) {
|
||||
tempFiles.each {
|
||||
File file = it as File
|
||||
@ -222,12 +212,12 @@ class TemporaryFileCleaner {
|
||||
class PomRequest {
|
||||
def style = []
|
||||
|
||||
String name = "demo"
|
||||
String type = "starter"
|
||||
String description = "Demo project for Spring Boot"
|
||||
String groupId = "org.test"
|
||||
String name = 'demo'
|
||||
String type = 'starter'
|
||||
String description = 'Demo project for Spring Boot'
|
||||
String groupId = 'org.test'
|
||||
String artifactId
|
||||
String version = "0.0.1-SNAPSHOT"
|
||||
String version = '0.0.1-SNAPSHOT'
|
||||
String packageName
|
||||
String getArtifactId() {
|
||||
artifactId == null ? name : artifactId
|
||||
@ -237,6 +227,7 @@ class PomRequest {
|
||||
}
|
||||
}
|
||||
|
||||
@Component
|
||||
@ConfigurationProperties(prefix='projects', ignoreUnknownFields=false)
|
||||
class Projects {
|
||||
List<Map<String,Object>> styles
|
||||
|
@ -1,6 +1,6 @@
|
||||
package test
|
||||
|
||||
@SpringApplicationConfiguration(classes=app.MainController)
|
||||
@SpringApplicationConfiguration(classes=TestConfiguration)
|
||||
@WebAppConfiguration
|
||||
@IntegrationTest('server.port:0')
|
||||
@DirtiesContext
|
||||
@ -10,7 +10,7 @@ class IntegrationTests {
|
||||
int port
|
||||
|
||||
@Test
|
||||
void homeIsZipForm() {
|
||||
void homeIsForm() {
|
||||
String body = new TestRestTemplate().getForObject('http://localhost:' + port, String)
|
||||
assertTrue('Wrong body:\n' + body, body.contains('action="/starter.zip"'))
|
||||
}
|
||||
@ -27,4 +27,18 @@ class IntegrationTests {
|
||||
assertTrue('Wrong body:\n' + body, body.contains('name="style" value="web"'))
|
||||
}
|
||||
|
||||
@Test
|
||||
void downloadStarter() {
|
||||
byte[] body = new TestRestTemplate().getForObject('http://localhost:' + port + 'starter.zip', byte[])
|
||||
assertNotNull(body)
|
||||
assertTrue(body.length>100)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// CLI compliled classes are not @ComponentScannable so we have to create
|
||||
// an explicit configuration for the test
|
||||
@Configuration
|
||||
@Import([app.MainController, app.Projects, app.TemporaryFileCleaner])
|
||||
class TestConfiguration {
|
||||
}
|
Loading…
Reference in New Issue
Block a user