diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/TestGenerator.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/TestGenerator.groovy index 78e414e929..339def4b8c 100755 --- a/accurest-core/src/main/groovy/io/codearte/accurest/TestGenerator.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/TestGenerator.groovy @@ -8,6 +8,9 @@ import java.nio.charset.StandardCharsets import java.util.concurrent.atomic.AtomicInteger import static io.codearte.accurest.util.NamesUtil.afterLast +import static io.codearte.accurest.util.NamesUtil.beforeLast +import static io.codearte.accurest.util.NamesUtil.directoryToPackage + /** * @author Jakub Kubrynski */ @@ -63,14 +66,20 @@ class TestGenerator { } if (filesToClass.size()) { def className = afterLast(includedDirectoryRelativePath, File.separator) + configProperties.targetFramework.classNameSuffix - def classBytes = generator.buildClass(filesToClass, className, packageNameForClass).getBytes(StandardCharsets.UTF_8) - saver.saveClassFile(className, packageNameForClass, classBytes) + def packageName = buildPackage(packageNameForClass, includedDirectoryRelativePath) + def classBytes = generator.buildClass(filesToClass, className, packageName).getBytes(StandardCharsets.UTF_8) + saver.saveClassFile(className, packageName, classBytes) counter.incrementAndGet() } } } - private String normalizePath(String path) { + private static String buildPackage(final String packageNameForClass, final String includedDirectoryRelativePath) { + String directory = beforeLast(includedDirectoryRelativePath, File.separator) + return !directory.empty ? "$packageNameForClass.${directoryToPackage(directory)}" : packageNameForClass + } + + private static String normalizePath(String path) { return FilenameUtils.separatorsToUnix(path) } } \ No newline at end of file diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/util/NamesUtil.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/util/NamesUtil.groovy index a15bd1b5dc..23e8c54479 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/util/NamesUtil.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/util/NamesUtil.groovy @@ -5,6 +5,13 @@ package io.codearte.accurest.util */ class NamesUtil { + static String beforeLast(String string, String separator) { + if (string?.indexOf(separator) > -1) { + return string.substring(0, string.lastIndexOf(separator)) + } + return '' + } + static String afterLast(String string, String separator) { if (string?.indexOf(separator) > -1) { return string.substring(string.lastIndexOf(separator) + 1) @@ -42,4 +49,8 @@ class NamesUtil { static String packageToDirectory(String packageName) { return packageName.replace('.' as char, File.separatorChar) } + + static String directoryToPackage(String directory) { + return directory.replace(File.separator, '.') + } } diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/GeneratorScannerSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/GeneratorScannerSpec.groovy index 6a478e3d92..f11187e3d2 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/GeneratorScannerSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/GeneratorScannerSpec.groovy @@ -7,7 +7,7 @@ class GeneratorScannerSpec extends Specification { private SingleTestGenerator classGenerator = Mock(SingleTestGenerator) - def "should find all .json files and generate 3 classes for them"() { + def "should find all .json files and generate 6 classes for them"() { given: File resource = new File(this.getClass().getResource("/directory/with/stubs/stubsRepositoryIndicator").toURI()) AccurestConfigProperties properties = new AccurestConfigProperties() @@ -16,7 +16,7 @@ class GeneratorScannerSpec extends Specification { when: testGenerator.generateTestClasses("com.ofg") then: - 3 * classGenerator.buildClass(_, _, _) >> "qwerty" + 6 * classGenerator.buildClass(_, _, _) >> "qwerty" } def "should filter other directory"() { @@ -30,6 +30,7 @@ class GeneratorScannerSpec extends Specification { testGenerator.generateTestClasses("com.ofg") then: 1 * classGenerator.buildClass(_, 'differentSpec', _) >> "qwerty" + 3 * classGenerator.buildClass(_, 'exceptionsSpec', _) >> "qwerty" } def "should ignore file"() { @@ -45,4 +46,18 @@ class GeneratorScannerSpec extends Specification { then: 1 * classGenerator.buildClass({ it.size() == 1 }, 'otherSpec', _) >> "sample.groovy" } + + def "should create class with full package"() { + given: + AccurestConfigProperties properties = new AccurestConfigProperties() + properties.contractsDslDir = new File(this.getClass().getResource("/directory/with/stubs/package").toURI()) + TestGenerator testGenerator = new TestGenerator(properties, classGenerator, Stub(FileSaver)) + when: + testGenerator.generateTestClasses("com.ofg") + then: + 1 * classGenerator.buildClass(_, 'exceptionsSpec', 'com.ofg') >> "spec" + 1 * classGenerator.buildClass(_, 'exceptionsSpec', 'com.ofg.v1') >> "spec1" + 1 * classGenerator.buildClass(_, 'exceptionsSpec', 'com.ofg.v2') >> "spec2" + } + } diff --git a/accurest-core/src/test/resources/directory/with/stubs/package/exceptions/test.groovy b/accurest-core/src/test/resources/directory/with/stubs/package/exceptions/test.groovy new file mode 100644 index 0000000000..e69de29bb2 diff --git a/accurest-core/src/test/resources/directory/with/stubs/package/v1/exceptions/testv1.groovy b/accurest-core/src/test/resources/directory/with/stubs/package/v1/exceptions/testv1.groovy new file mode 100644 index 0000000000..e69de29bb2 diff --git a/accurest-core/src/test/resources/directory/with/stubs/package/v2/exceptions/testv2.groovy b/accurest-core/src/test/resources/directory/with/stubs/package/v2/exceptions/testv2.groovy new file mode 100644 index 0000000000..e69de29bb2