padrino-gen 0.7.9 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/README.rdoc +42 -13
  2. data/Rakefile +7 -6
  3. data/VERSION +1 -1
  4. data/lib/padrino-gen/generators/actions.rb +25 -3
  5. data/lib/padrino-gen/generators/app/{app/app.rb.tt → app.rb.tt} +0 -0
  6. data/lib/padrino-gen/generators/app/{app → controllers}/.empty_directory +0 -0
  7. data/lib/padrino-gen/generators/app/{app/controllers → helpers}/.empty_directory +0 -0
  8. data/lib/padrino-gen/generators/app/{app/helpers → views}/.empty_directory +0 -0
  9. data/lib/padrino-gen/generators/app.rb +28 -36
  10. data/lib/padrino-gen/generators/components/actions.rb +4 -22
  11. data/lib/padrino-gen/generators/components/mocks/rr_gen.rb +8 -4
  12. data/lib/padrino-gen/generators/controller.rb +7 -4
  13. data/lib/padrino-gen/generators/mailer.rb +5 -2
  14. data/lib/padrino-gen/generators/model.rb +1 -1
  15. data/lib/padrino-gen/generators/{app → project}/.gitignore +0 -0
  16. data/lib/padrino-gen/generators/{app/app/views → project/app}/.empty_directory +0 -0
  17. data/lib/padrino-gen/generators/project/app/app.rb.tt +37 -0
  18. data/lib/padrino-gen/generators/{app/config/initializers → project/app/controllers}/.empty_directory +0 -0
  19. data/lib/padrino-gen/generators/{app/public/images → project/app/helpers}/.empty_directory +0 -0
  20. data/lib/padrino-gen/generators/{app/public/javascripts → project/app/views}/.empty_directory +0 -0
  21. data/lib/padrino-gen/generators/{app → project}/config/apps.rb.tt +0 -0
  22. data/lib/padrino-gen/generators/{app → project}/config/boot.rb +1 -1
  23. data/lib/padrino-gen/generators/{app/public/stylesheets → project/config/initializers}/.empty_directory +0 -0
  24. data/lib/padrino-gen/generators/{app → project}/config/initializers/example.rb +0 -0
  25. data/lib/padrino-gen/generators/{app → project}/config.ru +0 -0
  26. data/lib/padrino-gen/generators/{app/tmp → project/public/images}/.empty_directory +0 -0
  27. data/lib/padrino-gen/generators/project/public/javascripts/.empty_directory +0 -0
  28. data/lib/padrino-gen/generators/project/public/stylesheets/.empty_directory +0 -0
  29. data/lib/padrino-gen/generators/project/tmp/.empty_directory +0 -0
  30. data/lib/padrino-gen/generators/project.rb +64 -0
  31. data/lib/padrino-gen/generators/templates/Gemfile.tt +0 -1
  32. data/lib/padrino-gen/generators.rb +7 -3
  33. data/lib/padrino-gen/padrino-tasks/activerecord.rb +1 -1
  34. data/padrino-gen.gemspec +31 -24
  35. data/test/helper.rb +7 -7
  36. data/test/test_app_generator.rb +35 -199
  37. data/test/test_cli.rb +25 -0
  38. data/test/test_controller_generator.rb +45 -45
  39. data/test/test_generator.rb +0 -3
  40. data/test/test_mailer_generator.rb +25 -26
  41. data/test/test_migration_generator.rb +61 -62
  42. data/test/test_model_generator.rb +119 -114
  43. data/test/test_project_generator.rb +222 -0
  44. metadata +26 -19
@@ -3,10 +3,9 @@ require 'thor/group'
3
3
 
4
4
  class TestModelGenerator < Test::Unit::TestCase
5
5
  def setup
6
- Padrino::Generators.lockup!
7
- @app = Padrino::Generators::App.dup
6
+ @project = Padrino::Generators::Project.dup
8
7
  @model_gen = Padrino::Generators::Model.dup
9
- `rm -rf /tmp/sample_app`
8
+ `rm -rf /tmp/sample_project`
10
9
  end
11
10
 
12
11
  context 'the model generator' do
@@ -16,40 +15,46 @@ class TestModelGenerator < Test::Unit::TestCase
16
15
  assert_no_file_exists('/tmp/app/models/user.rb')
17
16
  end
18
17
 
18
+ should 'not fail if we don\'t have test component' do
19
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--test=none', '-d=activerecord']) }
20
+ response_success = silence_logger { @model_gen.start(['user', '-r=/tmp/sample_project']) }
21
+ assert_match_in_file(/class User < ActiveRecord::Base/m, '/tmp/sample_project/app/models/user.rb')
22
+ assert_no_file_exists('/tmp/sample_project/test')
23
+ end
24
+
19
25
  should "generate only generate model once" do
20
- silence_logger { @app.start(['sample_app', '--root=/tmp', '--script=none', '-t=bacon', '-d=activerecord']) }
21
- response_success = silence_logger { @model_gen.start(['user', '-r=/tmp/sample_app']) }
22
- response_duplicate = silence_logger { @model_gen.start(['user', '-r=/tmp/sample_app']) }
23
- assert_match_in_file(/class User < ActiveRecord::Base/m, '/tmp/sample_app/app/models/user.rb')
24
- # assert_match /'user' model has already been generated!/, response_duplicate
26
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none', '-t=bacon', '-d=activerecord']) }
27
+ response_success = silence_logger { @model_gen.start(['user', '-r=/tmp/sample_project']) }
28
+ response_duplicate = silence_logger { @model_gen.start(['user', '-r=/tmp/sample_project']) }
29
+ assert_match_in_file(/class User < ActiveRecord::Base/m, '/tmp/sample_project/app/models/user.rb')
25
30
  assert_match "identical\e[0m app/models/user.rb", response_duplicate
26
31
  assert_match "identical\e[0m test/models/user_test.rb", response_duplicate
27
32
  end
28
33
 
29
34
  should "generate migration file versions properly" do
30
- silence_logger { @app.start(['sample_app', '--root=/tmp', '--script=none', '-t=bacon', '-d=activerecord']) }
31
- silence_logger { @model_gen.start(['user', '-r=/tmp/sample_app']) }
32
- silence_logger { @model_gen.start(['account', '-r=/tmp/sample_app']) }
33
- silence_logger { @model_gen.start(['bank', '-r=/tmp/sample_app']) }
34
- assert_file_exists('/tmp/sample_app/db/migrate/001_create_users.rb')
35
- assert_file_exists('/tmp/sample_app/db/migrate/002_create_accounts.rb')
36
- assert_file_exists('/tmp/sample_app/db/migrate/003_create_banks.rb')
35
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none', '-t=bacon', '-d=activerecord']) }
36
+ silence_logger { @model_gen.start(['user', '-r=/tmp/sample_project']) }
37
+ silence_logger { @model_gen.start(['account', '-r=/tmp/sample_project']) }
38
+ silence_logger { @model_gen.start(['bank', '-r=/tmp/sample_project']) }
39
+ assert_file_exists('/tmp/sample_project/db/migrate/001_create_users.rb')
40
+ assert_file_exists('/tmp/sample_project/db/migrate/002_create_accounts.rb')
41
+ assert_file_exists('/tmp/sample_project/db/migrate/003_create_banks.rb')
37
42
  end
38
43
  end
39
44
 
40
45
  # ACTIVERECORD
41
46
  context "model generator using activerecord" do
42
47
  should "generate model file" do
43
- silence_logger { @app.start(['sample_app', '--root=/tmp', '--script=none', '-t=bacon', '-d=activerecord']) }
44
- silence_logger { @model_gen.start(['user', '-r=/tmp/sample_app']) }
45
- assert_match_in_file(/class User < ActiveRecord::Base/m, '/tmp/sample_app/app/models/user.rb')
48
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none', '-t=bacon', '-d=activerecord']) }
49
+ silence_logger { @model_gen.start(['user', '-r=/tmp/sample_project']) }
50
+ assert_match_in_file(/class User < ActiveRecord::Base/m, '/tmp/sample_project/app/models/user.rb')
46
51
  end
47
52
 
48
53
  should "generate migration file with no fields" do
49
54
  current_time = stop_time_for_test.strftime("%Y%m%d%H%M%S")
50
- silence_logger { @app.start(['sample_app', '--root=/tmp', '--script=none', '-t=bacon', '-d=activerecord']) }
51
- silence_logger { @model_gen.start(['user', '-r=/tmp/sample_app']) }
52
- migration_file_path = "/tmp/sample_app/db/migrate/001_create_users.rb"
55
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none', '-t=bacon', '-d=activerecord']) }
56
+ silence_logger { @model_gen.start(['user', '-r=/tmp/sample_project']) }
57
+ migration_file_path = "/tmp/sample_project/db/migrate/001_create_users.rb"
53
58
  assert_match_in_file(/class CreateUsers < ActiveRecord::Migration/m, migration_file_path)
54
59
  assert_match_in_file(/create_table :users/m, migration_file_path)
55
60
  assert_match_in_file(/drop_table :users/m, migration_file_path)
@@ -57,9 +62,9 @@ class TestModelGenerator < Test::Unit::TestCase
57
62
 
58
63
  should "generate migration file with given fields" do
59
64
  current_time = stop_time_for_test.strftime("%Y%m%d%H%M%S")
60
- silence_logger { @app.start(['sample_app', '--root=/tmp', '--script=none', '-t=bacon', '-d=activerecord']) }
61
- silence_logger { @model_gen.start(['person', "name:string", "age:integer", "email:string", '-r=/tmp/sample_app']) }
62
- migration_file_path = "/tmp/sample_app/db/migrate/001_create_people.rb"
65
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none', '-t=bacon', '-d=activerecord']) }
66
+ silence_logger { @model_gen.start(['person', "name:string", "age:integer", "email:string", '-r=/tmp/sample_project']) }
67
+ migration_file_path = "/tmp/sample_project/db/migrate/001_create_people.rb"
63
68
  assert_match_in_file(/class CreatePeople < ActiveRecord::Migration/m, migration_file_path)
64
69
  assert_match_in_file(/create_table :people/m, migration_file_path)
65
70
  assert_match_in_file(/t.string :name/m, migration_file_path)
@@ -72,54 +77,54 @@ class TestModelGenerator < Test::Unit::TestCase
72
77
  # COUCHREST
73
78
  context "model generator using couchrest" do
74
79
  should "generate model file with no properties" do
75
- silence_logger { @app.start(['sample_app', '--root=/tmp', '--script=none', '-t=bacon', '-d=couchrest']) }
76
- silence_logger { @model_gen.start(['user', '-r=/tmp/sample_app']) }
77
- assert_match_in_file(/class User < CouchRest::ExtendedDocument/m, '/tmp/sample_app/app/models/user.rb')
78
- assert_match_in_file(/use_database COUCHDB/m, '/tmp/sample_app/app/models/user.rb')
79
- assert_match_in_file(/# property <name>[\s\n]+?end/m, '/tmp/sample_app/app/models/user.rb')
80
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none', '-t=bacon', '-d=couchrest']) }
81
+ silence_logger { @model_gen.start(['user', '-r=/tmp/sample_project']) }
82
+ assert_match_in_file(/class User < CouchRest::ExtendedDocument/m, '/tmp/sample_project/app/models/user.rb')
83
+ assert_match_in_file(/use_database COUCHDB/m, '/tmp/sample_project/app/models/user.rb')
84
+ assert_match_in_file(/# property <name>[\s\n]+?end/m, '/tmp/sample_project/app/models/user.rb')
80
85
  end
81
86
 
82
87
  should "generate model file with given fields" do
83
- silence_logger { @app.start(['sample_app', '--root=/tmp', '--script=none', '-t=bacon', '-d=couchrest']) }
84
- silence_logger { @model_gen.start(['person', "name:string", "age", "email:string", '-r=/tmp/sample_app']) }
85
- assert_match_in_file(/class Person < CouchRest::ExtendedDocument/m, '/tmp/sample_app/app/models/person.rb')
86
- assert_match_in_file(/use_database COUCHDB/m, '/tmp/sample_app/app/models/person.rb')
87
- assert_match_in_file(/property :name/m, '/tmp/sample_app/app/models/person.rb')
88
- assert_match_in_file(/property :age/m, '/tmp/sample_app/app/models/person.rb')
89
- assert_match_in_file(/property :email/m, '/tmp/sample_app/app/models/person.rb')
88
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none', '-t=bacon', '-d=couchrest']) }
89
+ silence_logger { @model_gen.start(['person', "name:string", "age", "email:string", '-r=/tmp/sample_project']) }
90
+ assert_match_in_file(/class Person < CouchRest::ExtendedDocument/m, '/tmp/sample_project/app/models/person.rb')
91
+ assert_match_in_file(/use_database COUCHDB/m, '/tmp/sample_project/app/models/person.rb')
92
+ assert_match_in_file(/property :name/m, '/tmp/sample_project/app/models/person.rb')
93
+ assert_match_in_file(/property :age/m, '/tmp/sample_project/app/models/person.rb')
94
+ assert_match_in_file(/property :email/m, '/tmp/sample_project/app/models/person.rb')
90
95
  end
91
96
  end
92
97
 
93
98
  # DATAMAPPER
94
99
  context "model generator using datamapper" do
95
100
  should "generate model file with fields" do
96
- silence_logger { @app.start(['sample_app', '--root=/tmp', '--script=none', '-d=datamapper']) }
97
- silence_logger { @model_gen.start(['user', "name:string", "age:integer", "created_at:datetime", '-r=/tmp/sample_app']) }
98
- assert_match_in_file(/class User\n\s+include DataMapper::Resource/m, '/tmp/sample_app/app/models/user.rb')
99
- assert_match_in_file(/property :name, String/m, '/tmp/sample_app/app/models/user.rb')
100
- assert_match_in_file(/property :age, Integer/m, '/tmp/sample_app/app/models/user.rb')
101
- assert_match_in_file(/property :created_at, DateTime/m, '/tmp/sample_app/app/models/user.rb')
101
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none', '-d=datamapper']) }
102
+ silence_logger { @model_gen.start(['user', "name:string", "age:integer", "created_at:datetime", '-r=/tmp/sample_project']) }
103
+ assert_match_in_file(/class User\n\s+include DataMapper::Resource/m, '/tmp/sample_project/app/models/user.rb')
104
+ assert_match_in_file(/property :name, String/m, '/tmp/sample_project/app/models/user.rb')
105
+ assert_match_in_file(/property :age, Integer/m, '/tmp/sample_project/app/models/user.rb')
106
+ assert_match_in_file(/property :created_at, DateTime/m, '/tmp/sample_project/app/models/user.rb')
102
107
  end
103
108
 
104
109
  should "properly generate version numbers" do
105
- silence_logger { @app.start(['sample_app', '--root=/tmp', '--script=none', '-d=datamapper']) }
106
- silence_logger { @model_gen.start(['user', "name:string", "age:integer", "created_at:datetime", '-r=/tmp/sample_app']) }
107
- silence_logger { @model_gen.start(['person', "name:string", "age:integer", "created_at:datetime", '-r=/tmp/sample_app']) }
108
- silence_logger { @model_gen.start(['account', "name:string", "age:integer", "created_at:datetime", '-r=/tmp/sample_app']) }
109
- assert_match_in_file(/class User\n\s+include DataMapper::Resource/m, '/tmp/sample_app/app/models/user.rb')
110
- assert_match_in_file(/migration 1, :create_users do/m, "/tmp/sample_app/db/migrate/001_create_users.rb")
111
- assert_match_in_file(/class Person\n\s+include DataMapper::Resource/m, '/tmp/sample_app/app/models/person.rb')
112
- assert_match_in_file(/migration 2, :create_people do/m, "/tmp/sample_app/db/migrate/002_create_people.rb")
113
- assert_match_in_file(/class Account\n\s+include DataMapper::Resource/m, '/tmp/sample_app/app/models/account.rb')
114
- assert_match_in_file(/migration 3, :create_accounts do/m, "/tmp/sample_app/db/migrate/003_create_accounts.rb")
110
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none', '-d=datamapper']) }
111
+ silence_logger { @model_gen.start(['user', "name:string", "age:integer", "created_at:datetime", '-r=/tmp/sample_project']) }
112
+ silence_logger { @model_gen.start(['person', "name:string", "age:integer", "created_at:datetime", '-r=/tmp/sample_project']) }
113
+ silence_logger { @model_gen.start(['account', "name:string", "age:integer", "created_at:datetime", '-r=/tmp/sample_project']) }
114
+ assert_match_in_file(/class User\n\s+include DataMapper::Resource/m, '/tmp/sample_project/app/models/user.rb')
115
+ assert_match_in_file(/migration 1, :create_users do/m, "/tmp/sample_project/db/migrate/001_create_users.rb")
116
+ assert_match_in_file(/class Person\n\s+include DataMapper::Resource/m, '/tmp/sample_project/app/models/person.rb')
117
+ assert_match_in_file(/migration 2, :create_people do/m, "/tmp/sample_project/db/migrate/002_create_people.rb")
118
+ assert_match_in_file(/class Account\n\s+include DataMapper::Resource/m, '/tmp/sample_project/app/models/account.rb')
119
+ assert_match_in_file(/migration 3, :create_accounts do/m, "/tmp/sample_project/db/migrate/003_create_accounts.rb")
115
120
  end
116
121
 
117
122
  should "generate migration with given fields" do
118
123
  current_time = stop_time_for_test.strftime("%Y%m%d%H%M%S")
119
- silence_logger { @app.start(['sample_app', '--root=/tmp', '--script=none', '-d=datamapper']) }
120
- silence_logger { @model_gen.start(['person', "name:string", "created_at:datetime", "email:string", '-r=/tmp/sample_app']) }
121
- assert_match_in_file(/class Person\n\s+include DataMapper::Resource/m, '/tmp/sample_app/app/models/person.rb')
122
- migration_file_path = "/tmp/sample_app/db/migrate/001_create_people.rb"
124
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none', '-d=datamapper']) }
125
+ silence_logger { @model_gen.start(['person', "name:string", "created_at:datetime", "email:string", '-r=/tmp/sample_project']) }
126
+ assert_match_in_file(/class Person\n\s+include DataMapper::Resource/m, '/tmp/sample_project/app/models/person.rb')
127
+ migration_file_path = "/tmp/sample_project/db/migrate/001_create_people.rb"
123
128
  assert_match_in_file(/migration 1, :create_people do/m, migration_file_path)
124
129
  assert_match_in_file(/create_table :people do/m, migration_file_path)
125
130
  assert_match_in_file(/column :name, String/m, migration_file_path)
@@ -132,36 +137,36 @@ class TestModelGenerator < Test::Unit::TestCase
132
137
  # MONGOMAPPER
133
138
  context "model generator using mongomapper" do
134
139
  should "generate model file with no properties" do
135
- silence_logger { @app.start(['sample_app', '--root=/tmp', '--script=none', '-d=mongomapper']) }
136
- silence_logger { @model_gen.start(['person', '-r=/tmp/sample_app']) }
137
- assert_match_in_file(/class Person\n\s+include MongoMapper::Document/m, '/tmp/sample_app/app/models/person.rb')
138
- assert_match_in_file(/# key <name>, <type>[\n\s]+end/m, '/tmp/sample_app/app/models/person.rb')
140
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none', '-d=mongomapper']) }
141
+ silence_logger { @model_gen.start(['person', '-r=/tmp/sample_project']) }
142
+ assert_match_in_file(/class Person\n\s+include MongoMapper::Document/m, '/tmp/sample_project/app/models/person.rb')
143
+ assert_match_in_file(/# key <name>, <type>[\n\s]+end/m, '/tmp/sample_project/app/models/person.rb')
139
144
  end
140
145
 
141
146
  should "generate model file with given fields" do
142
- silence_logger { @app.start(['sample_app', '--root=/tmp', '--script=none', '-d=mongomapper']) }
143
- silence_logger { @model_gen.start(['user', "name:string", "age:integer", "email:string", '-r=/tmp/sample_app']) }
144
- assert_match_in_file(/class User\n\s+include MongoMapper::Document/m, '/tmp/sample_app/app/models/user.rb')
145
- assert_match_in_file(/key :name, String/m, '/tmp/sample_app/app/models/user.rb')
146
- assert_match_in_file(/key :age, Integer/m, '/tmp/sample_app/app/models/user.rb')
147
- assert_match_in_file(/key :email, String/m, '/tmp/sample_app/app/models/user.rb')
147
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none', '-d=mongomapper']) }
148
+ silence_logger { @model_gen.start(['user', "name:string", "age:integer", "email:string", '-r=/tmp/sample_project']) }
149
+ assert_match_in_file(/class User\n\s+include MongoMapper::Document/m, '/tmp/sample_project/app/models/user.rb')
150
+ assert_match_in_file(/key :name, String/m, '/tmp/sample_project/app/models/user.rb')
151
+ assert_match_in_file(/key :age, Integer/m, '/tmp/sample_project/app/models/user.rb')
152
+ assert_match_in_file(/key :email, String/m, '/tmp/sample_project/app/models/user.rb')
148
153
  end
149
154
  end
150
155
 
151
156
  # SEQUEL
152
157
  context "model generator using sequel" do
153
158
  should "generate model file with given properties" do
154
- silence_logger { @app.start(['sample_app', '--root=/tmp', '--script=none', '-d=sequel']) }
155
- silence_logger { @model_gen.start(['user', "name:string", "age:integer", "created:datetime", '-r=/tmp/sample_app']) }
156
- assert_match_in_file(/class User < Sequel::Model/m, '/tmp/sample_app/app/models/user.rb')
159
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none', '-d=sequel']) }
160
+ silence_logger { @model_gen.start(['user', "name:string", "age:integer", "created:datetime", '-r=/tmp/sample_project']) }
161
+ assert_match_in_file(/class User < Sequel::Model/m, '/tmp/sample_project/app/models/user.rb')
157
162
  end
158
163
 
159
164
  should "generate migration file with given properties" do
160
165
  current_time = stop_time_for_test.strftime("%Y%m%d%H%M%S")
161
- silence_logger { @app.start(['sample_app', '--root=/tmp', '--script=none', '-d=sequel']) }
162
- silence_logger { @model_gen.start(['person', "name:string", "age:integer", "created:datetime", '-r=/tmp/sample_app']) }
163
- migration_file_path = "/tmp/sample_app/db/migrate/001_create_people.rb"
164
- assert_match_in_file(/class Person < Sequel::Model/m, '/tmp/sample_app/app/models/person.rb')
166
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none', '-d=sequel']) }
167
+ silence_logger { @model_gen.start(['person', "name:string", "age:integer", "created:datetime", '-r=/tmp/sample_project']) }
168
+ migration_file_path = "/tmp/sample_project/db/migrate/001_create_people.rb"
169
+ assert_match_in_file(/class Person < Sequel::Model/m, '/tmp/sample_project/app/models/person.rb')
165
170
  assert_match_in_file(/class CreatePeople < Sequel::Migration/m, migration_file_path)
166
171
  assert_match_in_file(/create_table :people/m, migration_file_path)
167
172
  assert_match_in_file(/String :name/m, migration_file_path)
@@ -174,75 +179,75 @@ class TestModelGenerator < Test::Unit::TestCase
174
179
  context "model generator testing files" do
175
180
  # BACON
176
181
  should "generate test file for bacon" do
177
- silence_logger { @app.start(['sample_app', '--root=/tmp', '--script=none', '-t=bacon', '-d=activerecord']) }
178
- silence_logger { @model_gen.start(['User', '-r=/tmp/sample_app']) }
179
- assert_match_in_file(/describe "User Model"/m, '/tmp/sample_app/test/models/user_test.rb')
180
- assert_match_in_file(/@user = User.new/m, '/tmp/sample_app/test/models/user_test.rb')
181
- assert_match_in_file(/@user\.should\.not\.be\.nil/m, '/tmp/sample_app/test/models/user_test.rb')
182
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none', '-t=bacon', '-d=activerecord']) }
183
+ silence_logger { @model_gen.start(['User', '-r=/tmp/sample_project']) }
184
+ assert_match_in_file(/describe "User Model"/m, '/tmp/sample_project/test/models/user_test.rb')
185
+ assert_match_in_file(/@user = User.new/m, '/tmp/sample_project/test/models/user_test.rb')
186
+ assert_match_in_file(/@user\.should\.not\.be\.nil/m, '/tmp/sample_project/test/models/user_test.rb')
182
187
  end
183
188
 
184
189
  # RIOT
185
190
  should "generate test file for riot" do
186
- silence_logger { @app.start(['sample_app', '--root=/tmp', '--script=none', '-t=riot', '-d=activerecord']) }
187
- silence_logger { @model_gen.start(['User', '-r=/tmp/sample_app']) }
188
- assert_match_in_file(/context "User Model" do/m, '/tmp/sample_app/test/models/user_test.rb')
189
- assert_match_in_file(/@user = User.new/m, '/tmp/sample_app/test/models/user_test.rb')
190
- assert_match_in_file(/asserts\("that record is not nil"\) \{ \!@user.nil\? \}/m, '/tmp/sample_app/test/models/user_test.rb')
191
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none', '-t=riot', '-d=activerecord']) }
192
+ silence_logger { @model_gen.start(['User', '-r=/tmp/sample_project']) }
193
+ assert_match_in_file(/context "User Model" do/m, '/tmp/sample_project/test/models/user_test.rb')
194
+ assert_match_in_file(/@user = User.new/m, '/tmp/sample_project/test/models/user_test.rb')
195
+ assert_match_in_file(/asserts\("that record is not nil"\) \{ \!@user.nil\? \}/m, '/tmp/sample_project/test/models/user_test.rb')
191
196
  end
192
197
 
193
198
  # RSPEC
194
199
  should "generate test file for rspec" do
195
- silence_logger { @app.start(['sample_app', '--root=/tmp', '--script=none', '-t=rspec', '-d=activerecord']) }
196
- silence_logger { @model_gen.start(['User', '-r=/tmp/sample_app']) }
197
- assert_match_in_file(/describe "User Model"/m, '/tmp/sample_app/test/models/user_spec.rb')
198
- assert_match_in_file(/@user = User.new/m, '/tmp/sample_app/test/models/user_spec.rb')
199
- assert_match_in_file(/@user\.should\.not\.be\snil/m, '/tmp/sample_app/test/models/user_spec.rb')
200
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none', '-t=rspec', '-d=activerecord']) }
201
+ silence_logger { @model_gen.start(['User', '-r=/tmp/sample_project']) }
202
+ assert_match_in_file(/describe "User Model"/m, '/tmp/sample_project/test/models/user_spec.rb')
203
+ assert_match_in_file(/@user = User.new/m, '/tmp/sample_project/test/models/user_spec.rb')
204
+ assert_match_in_file(/@user\.should\.not\.be\snil/m, '/tmp/sample_project/test/models/user_spec.rb')
200
205
  end
201
206
 
202
207
  # SHOULDA
203
208
  should "generate test file for shoulda" do
204
- silence_logger { @app.start(['sample_app', '--root=/tmp', '--script=none', '-t=shoulda', '-d=activerecord']) }
205
- silence_logger { @model_gen.start(['Person', '-r=/tmp/sample_app']) }
206
- assert_match_in_file(/class PersonControllerTest < Test::Unit::TestCase/m, '/tmp/sample_app/test/models/person_test.rb')
207
- assert_match_in_file(/context "Person Model"/m, '/tmp/sample_app/test/models/person_test.rb')
208
- assert_match_in_file(/@person = Person.new/m, '/tmp/sample_app/test/models/person_test.rb')
209
- assert_match_in_file(/assert_not_nil @person/m, '/tmp/sample_app/test/models/person_test.rb')
209
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none', '-t=shoulda', '-d=activerecord']) }
210
+ silence_logger { @model_gen.start(['Person', '-r=/tmp/sample_project']) }
211
+ assert_match_in_file(/class PersonControllerTest < Test::Unit::TestCase/m, '/tmp/sample_project/test/models/person_test.rb')
212
+ assert_match_in_file(/context "Person Model"/m, '/tmp/sample_project/test/models/person_test.rb')
213
+ assert_match_in_file(/@person = Person.new/m, '/tmp/sample_project/test/models/person_test.rb')
214
+ assert_match_in_file(/assert_not_nil @person/m, '/tmp/sample_project/test/models/person_test.rb')
210
215
  end
211
216
 
212
217
  # TESTSPEC
213
218
  should "generate test file for testspec" do
214
- silence_logger { @app.start(['sample_app', '--root=/tmp', '--script=none', '-t=testspec', '-d=activerecord']) }
215
- silence_logger { @model_gen.start(['User', '-r=/tmp/sample_app']) }
216
- assert_match_in_file(/context "User Model"/m, '/tmp/sample_app/test/models/user_test.rb')
217
- assert_match_in_file(/@user = User.new/m, '/tmp/sample_app/test/models/user_test.rb')
218
- assert_match_in_file(/@user\.should\.not\.be\.nil/m, '/tmp/sample_app/test/models/user_test.rb')
219
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none', '-t=testspec', '-d=activerecord']) }
220
+ silence_logger { @model_gen.start(['User', '-r=/tmp/sample_project']) }
221
+ assert_match_in_file(/context "User Model"/m, '/tmp/sample_project/test/models/user_test.rb')
222
+ assert_match_in_file(/@user = User.new/m, '/tmp/sample_project/test/models/user_test.rb')
223
+ assert_match_in_file(/@user\.should\.not\.be\.nil/m, '/tmp/sample_project/test/models/user_test.rb')
219
224
  end
220
225
  end
221
226
 
222
227
  context "the model destroy option" do
223
228
 
224
229
  should "destroy the model file" do
225
- silence_logger { @app.start(['sample_app', '--root=/tmp', '--script=none', '-t=bacon', '-d=activerecord']) }
226
- silence_logger { @model_gen.start(['User', '-r=/tmp/sample_app']) }
227
- silence_logger { @model_gen.start(['User', '-r=/tmp/sample_app', '-d']) }
228
- assert_no_file_exists('/tmp/sample_app/app/models/user.rb')
229
- assert_no_file_exists('/tmp/sample_app/test/models/user_test.rb')
230
- assert_no_file_exists('/tmp/sample_app/db/migrate/001_create_users.rb')
230
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none', '-t=bacon', '-d=activerecord']) }
231
+ silence_logger { @model_gen.start(['User', '-r=/tmp/sample_project']) }
232
+ silence_logger { @model_gen.start(['User', '-r=/tmp/sample_project', '-d']) }
233
+ assert_no_file_exists('/tmp/sample_project/app/models/user.rb')
234
+ assert_no_file_exists('/tmp/sample_project/test/models/user_test.rb')
235
+ assert_no_file_exists('/tmp/sample_project/db/migrate/001_create_users.rb')
231
236
  end
232
237
 
233
238
  should "destroy the model test file with rspec" do
234
- silence_logger { @app.start(['sample_app', '--root=/tmp', '--script=none', '-t=rspec', '-d=activerecord']) }
235
- silence_logger { @model_gen.start(['User', '-r=/tmp/sample_app']) }
236
- silence_logger { @model_gen.start(['User', '-r=/tmp/sample_app', '-d']) }
237
- assert_no_file_exists('/tmp/sample_app/test/models/user_spec.rb')
239
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none', '-t=rspec', '-d=activerecord']) }
240
+ silence_logger { @model_gen.start(['User', '-r=/tmp/sample_project']) }
241
+ silence_logger { @model_gen.start(['User', '-r=/tmp/sample_project', '-d']) }
242
+ assert_no_file_exists('/tmp/sample_project/test/models/user_spec.rb')
238
243
  end
239
244
 
240
245
  should "destroy the model migration" do
241
- silence_logger { @app.start(['sample_app', '--root=/tmp', '--script=none', '-t=rspec', '-d=activerecord']) }
242
- silence_logger { @model_gen.start(['Person', '-r=/tmp/sample_app']) }
243
- silence_logger { @model_gen.start(['User', '-r=/tmp/sample_app']) }
244
- silence_logger { @model_gen.start(['User', '-r=/tmp/sample_app', '-d']) }
245
- assert_no_file_exists('/tmp/sample_app/db/migrate/002_create_users.rb')
246
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none', '-t=rspec', '-d=activerecord']) }
247
+ silence_logger { @model_gen.start(['Person', '-r=/tmp/sample_project']) }
248
+ silence_logger { @model_gen.start(['User', '-r=/tmp/sample_project']) }
249
+ silence_logger { @model_gen.start(['User', '-r=/tmp/sample_project', '-d']) }
250
+ assert_no_file_exists('/tmp/sample_project/db/migrate/002_create_users.rb')
246
251
  end
247
252
 
248
253
  end
@@ -0,0 +1,222 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+ require 'thor/group'
3
+ require 'fakeweb'
4
+
5
+ class TestProjectGenerator < Test::Unit::TestCase
6
+ def setup
7
+ FakeWeb.allow_net_connect = false
8
+ `rm -rf /tmp/sample_project`
9
+ @project = Padrino::Generators::Project.dup
10
+ end
11
+
12
+ context 'the project generator' do
13
+ should "allow simple generator to run and create base_app with no options" do
14
+ assert_nothing_raised { silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none']) } }
15
+ assert_file_exists('/tmp/sample_project')
16
+ assert_file_exists('/tmp/sample_project/app')
17
+ assert_file_exists('/tmp/sample_project/config/boot.rb')
18
+ assert_file_exists('/tmp/sample_project/test/test_config.rb')
19
+ end
20
+
21
+ should "not create models folder if no orm is chosen" do
22
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none', '--orm=none']) }
23
+ assert_no_dir_exists('/tmp/sample_project/app/models')
24
+ end
25
+
26
+ should "not create tests folder if no test framework is chosen" do
27
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none', '--test=none']) }
28
+ assert_no_dir_exists('/tmp/sample_project/test')
29
+ end
30
+
31
+ should "place app specific names into correct files" do
32
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none']) }
33
+ assert_match_in_file(/class SampleProject < Padrino::Application/m, '/tmp/sample_project/app/app.rb')
34
+ assert_match_in_file(/Padrino.mount_core\("SampleProject"\)/m, '/tmp/sample_project/config/apps.rb')
35
+ end
36
+
37
+ should "create components file containing options chosen with defaults" do
38
+ silence_logger { @project.start(['sample_project', '--root=/tmp']) }
39
+ components_chosen = YAML.load_file('/tmp/sample_project/.components')
40
+ assert_equal 'none', components_chosen[:orm]
41
+ assert_equal 'bacon', components_chosen[:test]
42
+ assert_equal 'mocha', components_chosen[:mock]
43
+ assert_equal 'none', components_chosen[:script]
44
+ assert_equal 'haml', components_chosen[:renderer]
45
+ end
46
+
47
+ should "create components file containing options chosen" do
48
+ component_options = ['--orm=datamapper', '--test=riot', '--mock=mocha', '--script=prototype', '--renderer=erb']
49
+ silence_logger { @project.start(['sample_project', '--root=/tmp', *component_options]) }
50
+ components_chosen = YAML.load_file('/tmp/sample_project/.components')
51
+ assert_equal 'datamapper', components_chosen[:orm]
52
+ assert_equal 'riot', components_chosen[:test]
53
+ assert_equal 'mocha', components_chosen[:mock]
54
+ assert_equal 'prototype', components_chosen[:script]
55
+ assert_equal 'erb', components_chosen[:renderer]
56
+ end
57
+
58
+ should "output to log components being applied" do
59
+ component_options = ['--orm=datamapper', '--test=riot', '--mock=mocha', '--script=prototype', '--renderer=erb']
60
+ buffer = silence_logger { @project.start(['sample_project', '--root=/tmp', *component_options]) }
61
+ assert_match /Applying.*?datamapper.*?orm/, buffer
62
+ assert_match /Applying.*?riot.*?test/, buffer
63
+ assert_match /Applying.*?mocha.*?mock/, buffer
64
+ assert_match /Applying.*?prototype.*?script/, buffer
65
+ assert_match /Applying.*?erb.*?renderer/, buffer
66
+ end
67
+
68
+ should "output gem files for base app" do
69
+ silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=none']) }
70
+ assert_match_in_file(/gem 'padrino'/, '/tmp/sample_project/Gemfile')
71
+ assert_match_in_file(/gem 'rack-flash'/, '/tmp/sample_project/Gemfile')
72
+ assert_match_in_file(/gem 'rack-test'/, '/tmp/sample_project/Gemfile')
73
+ end
74
+ end
75
+
76
+ context "a generator for mock component" do
77
+ should "properly generate for rr" do
78
+ buffer = silence_logger { @project.start(['sample_project', '--root=/tmp', '--mock=rr', '--test=riot', '--script=none']) }
79
+ assert_match /Applying.*?rr.*?mock/, buffer
80
+ assert_match_in_file(/gem 'rr'/, '/tmp/sample_project/Gemfile')
81
+ assert_match_in_file(/Riot.rr/m, '/tmp/sample_project/test/test_config.rb')
82
+ end
83
+
84
+ should "properly generater for rr and bacon" do
85
+ buffer = silence_logger { @project.start(['sample_project', '--root=/tmp', '--mock=rr', '--test=bacon', '--script=none']) }
86
+ assert_match /Applying.*?rr.*?mock/, buffer
87
+ assert_match_in_file(/gem 'rr'/, '/tmp/sample_project/Gemfile')
88
+ assert_match_in_file(/RR::Adapters::RRMethods/m, '/tmp/sample_project/test/test_config.rb')
89
+ end
90
+
91
+ should "properly generate default for mocha" do
92
+ buffer = silence_logger { @project.start(['sample_project', '--root=/tmp', '--mock=mocha', '--script=none']) }
93
+ assert_match /Applying.*?mocha.*?mock/, buffer
94
+ assert_match_in_file(/gem 'mocha'/, '/tmp/sample_project/Gemfile')
95
+ assert_match_in_file(/include Mocha::API/m, '/tmp/sample_project/test/test_config.rb')
96
+ end
97
+ end
98
+
99
+ context "the generator for orm components" do
100
+ should "properly generate for sequel" do
101
+ @app.instance_eval("undef setup_orm if respond_to?('setup_orm')")
102
+ buffer = silence_logger { @project.start(['sample_project', '--root=/tmp', '--orm=sequel', '--script=none']) }
103
+ assert_match /Applying.*?sequel.*?orm/, buffer
104
+ assert_match_in_file(/gem 'sequel'/, '/tmp/sample_project/Gemfile')
105
+ assert_match_in_file(/Sequel.connect/, '/tmp/sample_project/config/database.rb')
106
+ assert_dir_exists('/tmp/sample_project/app/models')
107
+ end
108
+
109
+ should "properly generate for activerecord" do
110
+ buffer = silence_logger { @project.start(['sample_project', '--root=/tmp', '--orm=activerecord', '--script=none']) }
111
+ assert_match /Applying.*?activerecord.*?orm/, buffer
112
+ assert_match_in_file(/gem 'activerecord', :require => "active_record"/, '/tmp/sample_project/Gemfile')
113
+ assert_match_in_file(/ActiveRecord::Base.establish_connection/, '/tmp/sample_project/config/database.rb')
114
+ assert_dir_exists('/tmp/sample_project/app/models')
115
+ end
116
+
117
+ should "properly generate default for datamapper" do
118
+ buffer = silence_logger { @project.start(['sample_project', '--root=/tmp', '--orm=datamapper', '--script=none']) }
119
+ assert_match /Applying.*?datamapper.*?orm/, buffer
120
+ assert_match_in_file(/gem 'dm-core'/, '/tmp/sample_project/Gemfile')
121
+ assert_match_in_file(/DataMapper.setup/, '/tmp/sample_project/config/database.rb')
122
+ assert_dir_exists('/tmp/sample_project/app/models')
123
+ end
124
+
125
+ should "properly generate for mongomapper" do
126
+ buffer = silence_logger { @project.start(['sample_project', '--root=/tmp', '--orm=mongomapper', '--script=none']) }
127
+ assert_match /Applying.*?mongomapper.*?orm/, buffer
128
+ assert_match_in_file(/gem 'mongo_mapper'/, '/tmp/sample_project/Gemfile')
129
+ assert_match_in_file(/MongoMapper.database/, '/tmp/sample_project/config/database.rb')
130
+ assert_dir_exists('/tmp/sample_project/app/models')
131
+ end
132
+
133
+ should "properly generate for couchrest" do
134
+ buffer = silence_logger { @project.start(['sample_project', '--root=/tmp', '--orm=couchrest', '--script=none']) }
135
+ assert_match /Applying.*?couchrest.*?orm/, buffer
136
+ assert_match_in_file(/gem 'couchrest'/, '/tmp/sample_project/Gemfile')
137
+ assert_match_in_file(/CouchRest.database!/, '/tmp/sample_project/config/database.rb')
138
+ assert_dir_exists('/tmp/sample_project/app/models')
139
+ end
140
+ end
141
+
142
+ context "the generator for renderer component" do
143
+ should "properly generate default for erb" do
144
+ buffer = silence_logger { @project.start(['sample_project', '--root=/tmp', '--renderer=erb', '--script=none']) }
145
+ assert_match /Applying.*?erb.*?renderer/, buffer
146
+ assert_match_in_file(/gem 'erubis'/, '/tmp/sample_project/Gemfile')
147
+ end
148
+
149
+ should "properly generate for haml" do
150
+ buffer = silence_logger { @project.start(['sample_project', '--root=/tmp', '--renderer=haml','--script=none']) }
151
+ assert_match /Applying.*?haml.*?renderer/, buffer
152
+ assert_match_in_file(/gem 'haml'/, '/tmp/sample_project/Gemfile')
153
+ assert_match_in_file(/module SassInitializer.*Sass::Plugin::Rack/m, '/tmp/sample_project/config/initializers/sass.rb')
154
+ end
155
+ end
156
+
157
+ context "the generator for script component" do
158
+ should "properly generate for jquery" do
159
+ buffer = silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=jquery']) }
160
+ assert_match /Applying.*?jquery.*?script/, buffer
161
+ assert_file_exists('/tmp/sample_project/public/javascripts/jquery.js')
162
+ assert_file_exists('/tmp/sample_project/public/javascripts/application.js')
163
+ end
164
+
165
+ should "properly generate for prototype" do
166
+ buffer = silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=prototype']) }
167
+ assert_match /Applying.*?prototype.*?script/, buffer
168
+ assert_file_exists('/tmp/sample_project/public/javascripts/protopak.js')
169
+ assert_file_exists('/tmp/sample_project/public/javascripts/lowpro.js')
170
+ assert_file_exists('/tmp/sample_project/public/javascripts/application.js')
171
+ end
172
+
173
+ should "properly generate for rightjs" do
174
+ buffer = silence_logger { @project.start(['sample_project', '--root=/tmp', '--script=rightjs']) }
175
+ assert_match /Applying.*?rightjs.*?script/, buffer
176
+ assert_file_exists('/tmp/sample_project/public/javascripts/right.js')
177
+ assert_file_exists('/tmp/sample_project/public/javascripts/application.js')
178
+ end
179
+ end
180
+
181
+ context "the generator for test component" do
182
+ should "properly default generate for bacon" do
183
+ buffer = silence_logger { @project.start(['sample_project', '--root=/tmp', '--test=bacon', '--script=none']) }
184
+ assert_match /Applying.*?bacon.*?test/, buffer
185
+ assert_match_in_file(/gem 'bacon'/, '/tmp/sample_project/Gemfile')
186
+ assert_match_in_file(/PADRINO_ENV = 'test' unless defined\?\(PADRINO_ENV\)/, '/tmp/sample_project/test/test_config.rb')
187
+ assert_match_in_file(/Bacon::Context/, '/tmp/sample_project/test/test_config.rb')
188
+ end
189
+
190
+ should "properly generate for riot" do
191
+ buffer = silence_logger { @project.start(['sample_project', '--root=/tmp', '--test=riot', '--script=none']) }
192
+ assert_match /Applying.*?riot.*?test/, buffer
193
+ assert_match_in_file(/gem 'riot'/, '/tmp/sample_project/Gemfile')
194
+ assert_match_in_file(/PADRINO_ENV = 'test' unless defined\?\(PADRINO_ENV\)/, '/tmp/sample_project/test/test_config.rb')
195
+ assert_match_in_file(/Riot::Situation/, '/tmp/sample_project/test/test_config.rb')
196
+ end
197
+
198
+ should "properly generate for rspec" do
199
+ buffer = silence_logger { @project.start(['sample_project', '--root=/tmp', '--test=rspec', '--script=none']) }
200
+ assert_match /Applying.*?rspec.*?test/, buffer
201
+ assert_match_in_file(/gem 'rspec'.*?:require => "spec"/, '/tmp/sample_project/Gemfile')
202
+ assert_match_in_file(/PADRINO_ENV = 'test' unless defined\?\(PADRINO_ENV\)/, '/tmp/sample_project/test/test_config.rb')
203
+ assert_match_in_file(/Spec::Runner/, '/tmp/sample_project/test/test_config.rb')
204
+ end
205
+
206
+ should "properly generate for shoulda" do
207
+ buffer = silence_logger { @project.start(['sample_project', '--root=/tmp', '--test=shoulda', '--script=none']) }
208
+ assert_match /Applying.*?shoulda.*?test/, buffer
209
+ assert_match_in_file(/gem 'shoulda'/, '/tmp/sample_project/Gemfile')
210
+ assert_match_in_file(/PADRINO_ENV = 'test' unless defined\?\(PADRINO_ENV\)/, '/tmp/sample_project/test/test_config.rb')
211
+ assert_match_in_file(/Test::Unit::TestCase/, '/tmp/sample_project/test/test_config.rb')
212
+ end
213
+
214
+ should "properly generate for testspec" do
215
+ buffer = silence_logger { @project.start(['sample_project', '--root=/tmp', '--test=testspec', '--script=none']) }
216
+ assert_match /Applying.*?testspec.*?test/, buffer
217
+ assert_match_in_file(/gem 'test\/spec'/, '/tmp/sample_project/Gemfile')
218
+ assert_match_in_file(/PADRINO_ENV = 'test' unless defined\?\(PADRINO_ENV\)/, '/tmp/sample_project/test/test_config.rb')
219
+ assert_match_in_file(/Test::Unit::TestCase/, '/tmp/sample_project/test/test_config.rb')
220
+ end
221
+ end
222
+ end