springmvc-scaffold 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.travis.yml +7 -0
  4. data/Gemfile +4 -0
  5. data/Gemfile.lock +45 -0
  6. data/README.markdown +31 -0
  7. data/Rakefile +9 -0
  8. data/bin/springmvc +7 -0
  9. data/lib/springmvc-scaffold.rb +14 -0
  10. data/lib/springmvc-scaffold/configuration.rb +50 -0
  11. data/lib/springmvc-scaffold/execution.rb +20 -0
  12. data/lib/springmvc-scaffold/generators/app/app_generator.rb +123 -0
  13. data/lib/springmvc-scaffold/generators/app/dependencies.rb +26 -0
  14. data/lib/springmvc-scaffold/generators/app/dependency.rb +15 -0
  15. data/lib/springmvc-scaffold/generators/app/templates/build.gradle.erb +56 -0
  16. data/lib/springmvc-scaffold/generators/app/templates/models/Entity.erb +46 -0
  17. data/lib/springmvc-scaffold/generators/app/templates/orm/Repository-hibernate.java.tt +51 -0
  18. data/lib/springmvc-scaffold/generators/app/templates/orm/Repository-jpa.java.tt +49 -0
  19. data/lib/springmvc-scaffold/generators/app/templates/pom.erb +95 -0
  20. data/lib/springmvc-scaffold/generators/app/templates/resources/hibernate.properties +16 -0
  21. data/lib/springmvc-scaffold/generators/app/templates/resources/log4j.properties +4 -0
  22. data/lib/springmvc-scaffold/generators/app/templates/resources/messages.properties +0 -0
  23. data/lib/springmvc-scaffold/generators/app/templates/springmvc-scaffold.erb +6 -0
  24. data/lib/springmvc-scaffold/generators/app/templates/webapp/.bowerrc +3 -0
  25. data/lib/springmvc-scaffold/generators/app/templates/webapp/WEB-INF/jsp/decorators/main.jsp +15 -0
  26. data/lib/springmvc-scaffold/generators/app/templates/webapp/WEB-INF/jsp/prelude.jspf +4 -0
  27. data/lib/springmvc-scaffold/generators/app/templates/webapp/WEB-INF/sitemesh3.xml +3 -0
  28. data/lib/springmvc-scaffold/generators/app/templates/webapp/WEB-INF/spring-servlet.xml.tt +42 -0
  29. data/lib/springmvc-scaffold/generators/app/templates/webapp/WEB-INF/web.xml.tt +52 -0
  30. data/lib/springmvc-scaffold/generators/app/templates/webapp/bower.json.tt +7 -0
  31. data/lib/springmvc-scaffold/generators/app/templates/webapp/stylesheets/application.css +38 -0
  32. data/lib/springmvc-scaffold/generators/base.rb +17 -0
  33. data/lib/springmvc-scaffold/generators/scaffold/attribute.rb +68 -0
  34. data/lib/springmvc-scaffold/generators/scaffold/base_scaffold.rb +54 -0
  35. data/lib/springmvc-scaffold/generators/scaffold/controller/controller_generator.rb +20 -0
  36. data/lib/springmvc-scaffold/generators/scaffold/controller/templates/controller.erb +126 -0
  37. data/lib/springmvc-scaffold/generators/scaffold/controller/templates/controller_test.erb +13 -0
  38. data/lib/springmvc-scaffold/generators/scaffold/imports.rb +18 -0
  39. data/lib/springmvc-scaffold/generators/scaffold/jsp/jsp_generator.rb +40 -0
  40. data/lib/springmvc-scaffold/generators/scaffold/jsp/templates/edit.erb +15 -0
  41. data/lib/springmvc-scaffold/generators/scaffold/jsp/templates/form.erb +14 -0
  42. data/lib/springmvc-scaffold/generators/scaffold/jsp/templates/index.erb +38 -0
  43. data/lib/springmvc-scaffold/generators/scaffold/jsp/templates/new.erb +14 -0
  44. data/lib/springmvc-scaffold/generators/scaffold/jsp/templates/show.erb +16 -0
  45. data/lib/springmvc-scaffold/generators/scaffold/model/model_generator.rb +16 -0
  46. data/lib/springmvc-scaffold/generators/scaffold/model/templates/model.erb +22 -0
  47. data/lib/springmvc-scaffold/generators/scaffold/model/templates/model_test.erb +13 -0
  48. data/lib/springmvc-scaffold/generators/scaffold/repository/repository_generator.rb +30 -0
  49. data/lib/springmvc-scaffold/generators/scaffold/repository/templates/repository.erb +18 -0
  50. data/lib/springmvc-scaffold/generators/scaffold/repository/templates/repository_test.erb +13 -0
  51. data/lib/springmvc-scaffold/generators/scaffold/scaffold_generator.rb +31 -0
  52. data/lib/springmvc-scaffold/runner.rb +7 -0
  53. data/lib/springmvc-scaffold/runner/commands_help.rb +11 -0
  54. data/lib/springmvc-scaffold/runner/generator.rb +14 -0
  55. data/lib/springmvc-scaffold/runner/help.rb +10 -0
  56. data/lib/springmvc-scaffold/runner/scaffold.rb +15 -0
  57. data/lib/springmvc-scaffold/version.rb +3 -0
  58. data/spec/spec_helper.rb +23 -0
  59. data/spec/springmvc-scaffold/configuration_spec.rb +124 -0
  60. data/spec/springmvc-scaffold/execution_spec.rb +40 -0
  61. data/spec/springmvc-scaffold/generators/app/app_generator_spec.rb +226 -0
  62. data/spec/springmvc-scaffold/generators/app/dependency_spec.rb +14 -0
  63. data/spec/springmvc-scaffold/generators/app/templates/Entity.java +46 -0
  64. data/spec/springmvc-scaffold/generators/app/templates/RepositoryJPA.java +49 -0
  65. data/spec/springmvc-scaffold/generators/app/templates/build.gradle +59 -0
  66. data/spec/springmvc-scaffold/generators/app/templates/pom.xml +146 -0
  67. data/spec/springmvc-scaffold/generators/app/templates/springmvc-scaffold.properties +6 -0
  68. data/spec/springmvc-scaffold/generators/scaffold/attribute_spec.rb +215 -0
  69. data/spec/springmvc-scaffold/generators/scaffold/base_scaffold_spec.rb +70 -0
  70. data/spec/springmvc-scaffold/generators/scaffold/controller/controller_generator_spec.rb +53 -0
  71. data/spec/springmvc-scaffold/generators/scaffold/controller/templates/ProductsController.java +97 -0
  72. data/spec/springmvc-scaffold/generators/scaffold/imports_spec.rb +9 -0
  73. data/spec/springmvc-scaffold/generators/scaffold/jsp/jsp_generator_spec.rb +46 -0
  74. data/spec/springmvc-scaffold/generators/scaffold/jsp/templates/form.jsp +25 -0
  75. data/spec/springmvc-scaffold/generators/scaffold/model/model_generator_spec.rb +28 -0
  76. data/spec/springmvc-scaffold/generators/scaffold/model/templates/Product.java +43 -0
  77. data/spec/springmvc-scaffold/generators/scaffold/repository/repository_generator_spec.rb +49 -0
  78. data/spec/springmvc-scaffold/generators/scaffold/repository/templates/Clients.java +16 -0
  79. data/spec/springmvc-scaffold/generators/scaffold/repository/templates/Products.java +10 -0
  80. data/spec/springmvc-scaffold/generators/scaffold/scaffold_generator_spec.rb +60 -0
  81. data/spec/springmvc-scaffold/runner/commands_help_spec.rb +13 -0
  82. data/spec/springmvc-scaffold/runner/generator_spec.rb +21 -0
  83. data/spec/springmvc-scaffold/runner/help_spec.rb +22 -0
  84. data/spec/springmvc-scaffold/runner/scaffold_spec.rb +36 -0
  85. data/spec/springmvc-scaffold_spec.rb +4 -0
  86. data/springmvc-scaffold.gemspec +27 -0
  87. metadata +185 -0
@@ -0,0 +1,18 @@
1
+ package <%= Configuration.package %>.<%= Configuration.repositories_package %>;
2
+
3
+ <% if Configuration.hibernate? -%>
4
+ import <%= orm_import %>;
5
+ import org.springframework.beans.factory.annotation.Autowired;
6
+ <% end -%>
7
+ import org.springframework.stereotype.Repository;
8
+
9
+ import <%= Configuration.full_models_package %>.<%= class_name %>;
10
+
11
+ @Repository
12
+ public class <%= repository_class_name %> extends GenericRepository<<%= class_name %>> {
13
+ <%- if Configuration.hibernate? %>
14
+ @Autowired
15
+ public <%= repository_class_name %>(<%= orm_class %> <%= orm_parameter_name %>) {
16
+ super(<%= orm_parameter_name %>);
17
+ }<% end %>
18
+ }
@@ -0,0 +1,13 @@
1
+ package <%= Configuration.package %>.<%= Configuration.repositories_package %>;
2
+
3
+ import static org.junit.Assert.assertNotNull;
4
+
5
+ import org.junit.Test;
6
+
7
+ public class <%= repository_test_class_name %> {
8
+
9
+ @Test
10
+ public void fakeTest() {
11
+ assertNotNull("test something real");
12
+ }
13
+ }
@@ -0,0 +1,31 @@
1
+ class ScaffoldGenerator < SpringMvcScaffold::Base
2
+
3
+ attr_accessor :generated_attributes
4
+ argument :model
5
+ argument :attributes, type: :hash, default: {}, banner: "field:type field:type"
6
+
7
+ def self.banner
8
+ "springmvc scaffold #{self.arguments.map(&:usage).join(' ')}"
9
+ end
10
+
11
+ def initialize(args)
12
+ super(args)
13
+ @generated_attributes = attributes.map {|field, type| Attribute.new(field, type) }
14
+ end
15
+
16
+ def controller_generator
17
+ ControllerGenerator.new(model, generated_attributes).build
18
+ end
19
+
20
+ def model_generator
21
+ ModelGenerator.new(model, generated_attributes).build
22
+ end
23
+
24
+ def template_generator
25
+ JspGenerator.new(model, generated_attributes).build
26
+ end
27
+
28
+ def repository_generator
29
+ RepositoryGenerator.new(model, generated_attributes).build
30
+ end
31
+ end
@@ -0,0 +1,7 @@
1
+ module SpringMvcScaffold::Runner
2
+ end
3
+
4
+ require 'springmvc-scaffold/runner/help'
5
+ require 'springmvc-scaffold/runner/generator'
6
+ require 'springmvc-scaffold/runner/scaffold'
7
+ require 'springmvc-scaffold/runner/commands_help'
@@ -0,0 +1,11 @@
1
+ module SpringMvcScaffold::Runner
2
+
3
+ class CommandsHelp
4
+ def run(args)
5
+ Kernel.puts "Available runners for springmvc are: #{SpringMvcScaffold::COMMANDS.keys.join(', ')}"
6
+ Kernel.puts "Usage:"
7
+ Kernel.puts " springmvc runner"
8
+ end
9
+ end
10
+
11
+ end
@@ -0,0 +1,14 @@
1
+ module SpringMvcScaffold::Runner
2
+
3
+ class Generator
4
+ def run(args)
5
+ project_path = args.shift
6
+ if SpringMvcScaffold::Runner::Help.help?(project_path)
7
+ AppGenerator.start(["-h"])
8
+ else
9
+ AppGenerator.new(project_path, args).invoke_all
10
+ end
11
+ end
12
+ end
13
+
14
+ end
@@ -0,0 +1,10 @@
1
+ module SpringMvcScaffold::Runner
2
+
3
+ class Help
4
+ def self.help?(arg)
5
+ [nil, "-h", "--help"].include?(arg)
6
+ end
7
+ end
8
+
9
+ end
10
+
@@ -0,0 +1,15 @@
1
+ module SpringMvcScaffold::Runner
2
+
3
+ class Scaffold
4
+ def run(args)
5
+ if SpringMvcScaffold::Runner::Help.help?(args.first)
6
+ ScaffoldGenerator.start(["-h"])
7
+ elsif File.exists?("src")
8
+ ScaffoldGenerator.new(args).invoke_all
9
+ else
10
+ Kernel.puts "To run springmvc scaffold please go to the project root folder."
11
+ end
12
+ end
13
+ end
14
+
15
+ end
@@ -0,0 +1,3 @@
1
+ module SpringMvcScaffold
2
+ VERSION = "1.0.1"
3
+ end
@@ -0,0 +1,23 @@
1
+ require File.dirname(__FILE__) + '/../lib/springmvc-scaffold'
2
+
3
+ def exists_and_identical?(source, created)
4
+ c = File.open(created).read.gsub( /\r/m, "" )
5
+ c2 = File.open(source).read.gsub( /\r/m, "" )
6
+ expect(c).to eq c2
7
+ end
8
+
9
+ def build_attributes
10
+ [Attribute.new("name", "string"), Attribute.new("active", "boolean"),
11
+ Attribute.new("price", "double"), Attribute.new("category", "references")]
12
+ end
13
+
14
+ def mock_config_file
15
+ file = YAML.load_file(File.join(File.dirname(__FILE__), "springmvc-scaffold/generators/app/templates/springmvc-scaffold.properties"))
16
+ allow(Configuration).to receive(:config).and_return(file)
17
+ end
18
+
19
+ def double_generator(generator_class)
20
+ generator = double(generator_class)
21
+ allow(generator_class).to receive(:new).with(model, attributes).and_return(generator)
22
+ generator
23
+ end
@@ -0,0 +1,124 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
+
3
+ describe Configuration do
4
+
5
+ it "configures main source" do
6
+ expect(Configuration::MAIN_SRC).to eq "src/main/java"
7
+ end
8
+
9
+ it "configures main resources" do
10
+ expect(Configuration::MAIN_RESOURCES).to eq "src/main/resources"
11
+ end
12
+
13
+ it "configures webapp" do
14
+ expect(Configuration::WEB_APP).to eq "src/main/webapp"
15
+ end
16
+
17
+ it "configures web-inf" do
18
+ expect(Configuration::WEB_INF).to eq "#{Configuration::WEB_APP}/WEB-INF"
19
+ end
20
+
21
+ it "configures meta-inf" do
22
+ expect(Configuration::META_INF).to eq "#{Configuration::WEB_APP}/META-INF"
23
+ end
24
+
25
+ it "configures test source" do
26
+ expect(Configuration::TEST_SRC).to eq "src/test/java"
27
+ end
28
+
29
+ it "configures test resources" do
30
+ expect(Configuration::TEST_RESOURCES).to eq "src/test/resources"
31
+ end
32
+
33
+ it "configures scaffold properties" do
34
+ expect(Configuration::FILENAME).to eq "#{Configuration::META_INF}/springmvc-scaffold.properties"
35
+ end
36
+
37
+ context "load config file" do
38
+ let(:config) { {"template_engine" => "jsp", "package" => "br.com.juliano", "orm" => "jpa", "models_package" => "models", "controllers_package" => "controllers", "repositories_package" => "repositories"} }
39
+ before do
40
+ allow(YAML).to receive(:load_file).with(Configuration::FILENAME).and_return(config)
41
+ end
42
+
43
+ it "knows models package" do
44
+ expect(Configuration.models_package).to eq "models"
45
+ end
46
+
47
+ it "knows full models package" do
48
+ expect(Configuration.full_models_package).to eq "br.com.juliano.models"
49
+ end
50
+
51
+ it "builds main class path with base package" do
52
+ expect(Configuration.main_class_path("models", "Product.java")).to eq "src/main/java/br/com/juliano/models/Product.java"
53
+ end
54
+
55
+ it "builds test class path with base package" do
56
+ expect(Configuration.test_class_path("models", "Product.java")).to eq "src/test/java/br/com/juliano/models/Product.java"
57
+ end
58
+
59
+ it "knows orm" do
60
+ expect(Configuration.orm).to eq "jpa"
61
+ end
62
+
63
+ it "orm is not hibernate" do
64
+ expect(Configuration.hibernate?).to be false
65
+ end
66
+ end
67
+
68
+ context "hibernate" do
69
+ let(:config) { {"package" => "br.com.juliano", "orm" => "hibernate"} }
70
+ before do
71
+ allow(YAML).to receive(:load_file).with(Configuration::FILENAME).and_return(config)
72
+ end
73
+
74
+ it "knows orm" do
75
+ expect(Configuration.orm).to eq "hibernate"
76
+ end
77
+
78
+ it "orm is hibernate" do
79
+ expect(Configuration.hibernate?).to be true
80
+ end
81
+ end
82
+
83
+ context "properties without default configs" do
84
+ before do
85
+ allow(YAML).to receive(:load_file).with(Configuration::FILENAME).and_return({})
86
+ end
87
+
88
+ it "knows models package" do
89
+ expect(Configuration.models_package).to eq "models"
90
+ end
91
+
92
+ it "knows controllers package" do
93
+ expect(Configuration.controllers_package).to eq "controllers"
94
+ end
95
+
96
+ it "knows repositories package" do
97
+ expect(Configuration.repositories_package).to eq "repositories"
98
+ end
99
+
100
+ it "knows full models package" do
101
+ expect(Configuration.full_models_package).to eq "app.models"
102
+ end
103
+
104
+ it "knows base package" do
105
+ expect(Configuration.package).to eq "app"
106
+ end
107
+
108
+ it "knows orm" do
109
+ expect(Configuration.orm).to eq "jpa"
110
+ end
111
+
112
+ it "orm is not hibernate" do
113
+ expect(Configuration.hibernate?).to be false
114
+ end
115
+
116
+ it "builds main class path with base package" do
117
+ expect(Configuration.main_class_path("models", "Product.java")).to eq "src/main/java/app/models/Product.java"
118
+ end
119
+
120
+ it "builds test class path with base package" do
121
+ expect(Configuration.test_class_path("models", "Product.java")).to eq "src/test/java/app/models/Product.java"
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,40 @@
1
+ require "spec_helper"
2
+
3
+ describe SpringMvcScaffold::Execution do
4
+
5
+ context "discover runner for action" do
6
+ it "should be commands help when no action" do
7
+ expect(subject.runner_for(nil)).to be SpringMvcScaffold::Runner::CommandsHelp
8
+ end
9
+
10
+ it "should be app generator when -h action" do
11
+ expect(subject.runner_for("-h")).to be SpringMvcScaffold::Runner::Generator
12
+ end
13
+
14
+ it "should be app generator when --help action" do
15
+ expect(subject.runner_for("--help")).to be SpringMvcScaffold::Runner::Generator
16
+ end
17
+
18
+ it "should be app generator when new action" do
19
+ expect(subject.runner_for("new")).to be SpringMvcScaffold::Runner::Generator
20
+ end
21
+
22
+ it "should be app generator when scaffold action" do
23
+ expect(subject.runner_for("scaffold")).to be SpringMvcScaffold::Runner::Scaffold
24
+ end
25
+
26
+ it "should be commands help when scaffold when unknown action" do
27
+ expect(subject.runner_for("xpto")).to be SpringMvcScaffold::Runner::CommandsHelp
28
+ end
29
+ end
30
+
31
+ it "should discover runner and run" do
32
+ runner = double(SpringMvcScaffold::Runner::Generator)
33
+ allow(runner).to receive(:new).and_return(runner)
34
+ expect(runner).to receive(:run).with(['app'])
35
+
36
+ allow(subject).to receive(:runner_for).with('new').and_return(runner)
37
+ subject.run(['new', 'app'])
38
+ end
39
+
40
+ end
@@ -0,0 +1,226 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../../spec_helper")
2
+
3
+ describe AppGenerator do
4
+
5
+ context "build new application" do
6
+ let(:project_path) { "src/springmvc-scaffold" }
7
+
8
+ before { described_class.new(project_path).invoke_all }
9
+
10
+ after { FileUtils.remove_dir("src") }
11
+
12
+ it "creates directory with project name" do
13
+ expect(File.exist?(project_path)).to be true
14
+ end
15
+
16
+ it "is invalid when project name already exist" do
17
+ expect(Kernel).to receive(:exit)
18
+ described_class.new(project_path)
19
+ end
20
+
21
+ it "creates pom.xml" do
22
+ source = File.join(File.dirname(__FILE__), "templates", "pom.xml")
23
+ destination = "#{project_path}/pom.xml"
24
+ exists_and_identical?(source, destination)
25
+ end
26
+
27
+ it "cannot create build.gradle" do
28
+ expect(File.exist?("#{project_path}/build.gradle")).to be false
29
+ end
30
+
31
+ it "configures springmvc-scaffold.properties" do
32
+ source = File.join(File.dirname(__FILE__), "templates", "springmvc-scaffold.properties")
33
+ destination = "#{project_path}/#{Configuration::FILENAME}"
34
+ exists_and_identical?(source, destination)
35
+ end
36
+
37
+ context "creating main java" do
38
+ let(:main_java) { "#{project_path}/#{Configuration::MAIN_SRC}" }
39
+ let(:app) { "#{main_java}/app" }
40
+
41
+ it "creates source folder" do
42
+ expect(File.exist?(main_java)).to be true
43
+ end
44
+
45
+ it "creates app folder" do
46
+ expect(File.exist?(app)).to be true
47
+ end
48
+
49
+ it "creates controllers folder" do
50
+ expect(File.exist?("#{app}/controllers")).to be true
51
+ end
52
+
53
+ it "creates models folder" do
54
+ expect(File.exist?("#{app}/models")).to be true
55
+ end
56
+
57
+ it "creates generic entity" do
58
+ source = File.join(File.dirname(__FILE__), "templates", "Entity.java")
59
+ destination = "#{app}/models/Entity.java"
60
+ exists_and_identical?(source, destination)
61
+ end
62
+
63
+ it "creates repositories folder" do
64
+ expect(File.exist?("#{app}/repositories")).to be true
65
+ end
66
+
67
+ it "creates generic repository" do
68
+ source = File.join(File.dirname(__FILE__), "templates", "RepositoryJPA.java")
69
+ destination = "#{app}/repositories/GenericRepository.java"
70
+ exists_and_identical?(source, destination)
71
+ end
72
+ end
73
+
74
+ context "creating main resources" do
75
+ let(:main_resources) { "#{project_path}/#{Configuration::MAIN_RESOURCES}" }
76
+
77
+ it "creates resources folder" do
78
+ expect(File.exist?(main_resources)).to be true
79
+ end
80
+
81
+ it "creates hibernate.properties" do
82
+ source = "#{AppGenerator.source_root}/resources/hibernate.properties"
83
+ destination = "#{main_resources}/hibernate.properties"
84
+ exists_and_identical?(source, destination)
85
+ end
86
+
87
+ it "creates log4j" do
88
+ source = "#{AppGenerator.source_root}/resources/log4j.properties"
89
+ destination = "#{main_resources}/log4j.properties"
90
+ exists_and_identical?(source, destination)
91
+ end
92
+
93
+ it "creates messages.properties" do
94
+ source = "#{AppGenerator.source_root}/resources/messages.properties"
95
+ destination = "#{main_resources}/messages.properties"
96
+ exists_and_identical?(source, destination)
97
+ end
98
+ end
99
+
100
+ context "creating main webapp" do
101
+ let(:webapp) { "#{project_path}/#{Configuration::WEB_APP}" }
102
+ let(:web_inf) { "#{project_path}/#{Configuration::WEB_INF}" }
103
+
104
+ it "creates webapp folder" do
105
+ expect(File.exist?(webapp)).to be true
106
+ end
107
+
108
+ it "creates WEB-INF folder" do
109
+ expect(File.exist?(web_inf)).to be true
110
+ end
111
+
112
+ it "creates application.js" do
113
+ appjs = "#{webapp}/javascripts/application.js"
114
+ expect(File.exist?(appjs)).to be true
115
+ end
116
+
117
+ it "creates application.css" do
118
+ source = "#{AppGenerator.source_root}/webapp/stylesheets/application.css"
119
+ destination = "#{webapp}/stylesheets/application.css"
120
+ exists_and_identical?(source, destination)
121
+ end
122
+ end
123
+
124
+ context "creating test" do
125
+ let(:test_java) { "#{project_path}/#{Configuration::TEST_SRC}" }
126
+ let(:test_resources) { "#{project_path}/#{Configuration::TEST_RESOURCES}" }
127
+ let(:app) { "#{test_java}/app" }
128
+
129
+ it "creates test source folder" do
130
+ expect(File.exist?(test_java)).to be true
131
+ end
132
+
133
+ it "creates test resources folder" do
134
+ expect(File.exist?(test_resources)).to be true
135
+ end
136
+
137
+ it "creates controllers folder" do
138
+ expect(File.exist?("#{app}/controllers")).to be true
139
+ end
140
+
141
+ it "creates models folder" do
142
+ expect(File.exist?("#{app}/models")).to be true
143
+ end
144
+
145
+ it "creates repositories folder" do
146
+ expect(File.exist?("#{app}/repositories")).to be true
147
+ end
148
+ end
149
+ end
150
+
151
+ context "build app with complex package" do
152
+ let(:project_path) { "src/springmvc-scaffold" }
153
+ let(:main_java) { "#{project_path}/#{Configuration::MAIN_SRC}/br/com/juliano" }
154
+ let(:test_java) { "#{project_path}/#{Configuration::TEST_SRC}/br/com/juliano" }
155
+
156
+ before do
157
+ described_class.new(project_path, ["-p=br.com.juliano"]).invoke_all
158
+ end
159
+
160
+ after { FileUtils.remove_dir("src") }
161
+
162
+ it "creates main path" do
163
+ expect(File.exist?(main_java)).to be true
164
+ end
165
+
166
+ it "creates test path" do
167
+ expect(File.exist?(test_java)).to be true
168
+ end
169
+ end
170
+
171
+ context "creating gradle application" do
172
+ let(:project_path) { "springmvc-scaffold" }
173
+
174
+ before { described_class.new(project_path, ["-b=gradle"]).invoke_all }
175
+
176
+ after { FileUtils.remove_dir(project_path) }
177
+
178
+ it "creates build.gradle" do
179
+ source = File.join(File.dirname(__FILE__), "templates", "build.gradle")
180
+ destination = "#{project_path}/build.gradle"
181
+ exists_and_identical?(source, destination)
182
+ end
183
+
184
+ it "cannot create pom.xml" do
185
+ expect(File.exist?("#{project_path}/pom.xml")).to be false
186
+ end
187
+ end
188
+
189
+ context "valid build tools" do
190
+ it "maven is valid" do
191
+ expect(AppGenerator::BUILD_TOOLS.include?("mvn")).to be true
192
+ end
193
+
194
+ it "gradle is valid" do
195
+ expect(AppGenerator::BUILD_TOOLS.include?("gradle")).to be true
196
+ end
197
+ end
198
+
199
+ context "valid orm" do
200
+ it "jpa is valid" do
201
+ expect(AppGenerator::ORMS.include?("jpa")).to be true
202
+ end
203
+
204
+ it "hibernate is valid" do
205
+ expect(AppGenerator::ORMS.include?("hibernate")).to be true
206
+ end
207
+ end
208
+
209
+ context "validate options" do
210
+ let(:project_path) { "springmvc-scaffold" }
211
+
212
+ it "is invalid when build tool is not supported" do
213
+ expect(Kernel).to receive(:exit)
214
+ AppGenerator.new(project_path, ["-b=maven"])
215
+ end
216
+
217
+ it "is invalid when orm is not supported" do
218
+ expect(Kernel).to receive(:exit)
219
+ AppGenerator.new(project_path, ["-o=toplink"])
220
+ end
221
+ end
222
+
223
+ it "configures banner" do
224
+ expect(AppGenerator.banner).to eq "springmvc new PROJECT_PATH [options]"
225
+ end
226
+ end