tennpipes-init 3.6.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +163 -0
- data/Rakefile +1 -0
- data/bin/tennpipes-init +16 -0
- data/lib/tennpipes-init.rb +73 -0
- data/lib/tennpipes-init/command.rb +18 -0
- data/lib/tennpipes-init/generators/actions.rb +630 -0
- data/lib/tennpipes-init/generators/app.rb +75 -0
- data/lib/tennpipes-init/generators/app/app.rb.tt +72 -0
- data/lib/tennpipes-init/generators/app/app.rb.tt~ +72 -0
- data/lib/tennpipes-init/generators/cli.rb +57 -0
- data/lib/tennpipes-init/generators/component.rb +73 -0
- data/lib/tennpipes-init/generators/components/actions.rb +208 -0
- data/lib/tennpipes-init/generators/components/mocks/mocha.rb +10 -0
- data/lib/tennpipes-init/generators/components/mocks/rr.rb +13 -0
- data/lib/tennpipes-init/generators/components/orms/activerecord.rb +201 -0
- data/lib/tennpipes-init/generators/components/orms/couchrest.rb +55 -0
- data/lib/tennpipes-init/generators/components/orms/datamapper.rb +140 -0
- data/lib/tennpipes-init/generators/components/orms/dynamoid.rb +67 -0
- data/lib/tennpipes-init/generators/components/orms/minirecord.rb +165 -0
- data/lib/tennpipes-init/generators/components/orms/mongoid.rb +113 -0
- data/lib/tennpipes-init/generators/components/orms/mongomapper.rb +43 -0
- data/lib/tennpipes-init/generators/components/orms/mongomatic.rb +84 -0
- data/lib/tennpipes-init/generators/components/orms/ohm.rb +65 -0
- data/lib/tennpipes-init/generators/components/orms/ripple.rb +75 -0
- data/lib/tennpipes-init/generators/components/orms/sequel.rb +99 -0
- data/lib/tennpipes-init/generators/components/renderers/erb.rb +3 -0
- data/lib/tennpipes-init/generators/components/renderers/haml.rb +3 -0
- data/lib/tennpipes-init/generators/components/renderers/liquid.rb +4 -0
- data/lib/tennpipes-init/generators/components/renderers/slim.rb +3 -0
- data/lib/tennpipes-init/generators/components/scripts/dojo.rb +10 -0
- data/lib/tennpipes-init/generators/components/scripts/extcore.rb +10 -0
- data/lib/tennpipes-init/generators/components/scripts/jquery.rb +10 -0
- data/lib/tennpipes-init/generators/components/scripts/mootools.rb +10 -0
- data/lib/tennpipes-init/generators/components/scripts/prototype.rb +12 -0
- data/lib/tennpipes-init/generators/components/scripts/rightjs.rb +10 -0
- data/lib/tennpipes-init/generators/components/stylesheets/compass.rb +39 -0
- data/lib/tennpipes-init/generators/components/stylesheets/compass/application.scss +43 -0
- data/lib/tennpipes-init/generators/components/stylesheets/compass/partials/_base.scss +12 -0
- data/lib/tennpipes-init/generators/components/stylesheets/less.rb +25 -0
- data/lib/tennpipes-init/generators/components/stylesheets/sass.rb +15 -0
- data/lib/tennpipes-init/generators/components/stylesheets/scss.rb +16 -0
- data/lib/tennpipes-init/generators/components/tests/bacon.rb +103 -0
- data/lib/tennpipes-init/generators/components/tests/cucumber.rb +86 -0
- data/lib/tennpipes-init/generators/components/tests/minitest.rb +110 -0
- data/lib/tennpipes-init/generators/components/tests/riot.rb +117 -0
- data/lib/tennpipes-init/generators/components/tests/rspec.rb +111 -0
- data/lib/tennpipes-init/generators/components/tests/shoulda.rb +114 -0
- data/lib/tennpipes-init/generators/components/tests/steak.rb +114 -0
- data/lib/tennpipes-init/generators/controller.rb +77 -0
- data/lib/tennpipes-init/generators/helper.rb +50 -0
- data/lib/tennpipes-init/generators/mailer.rb +52 -0
- data/lib/tennpipes-init/generators/migration.rb +43 -0
- data/lib/tennpipes-init/generators/model.rb +113 -0
- data/lib/tennpipes-init/generators/plugin.rb +67 -0
- data/lib/tennpipes-init/generators/project.rb +160 -0
- data/lib/tennpipes-init/generators/project/config.ru +9 -0
- data/lib/tennpipes-init/generators/project/config/apps.rb.tt +35 -0
- data/lib/tennpipes-init/generators/project/config/boot.rb +49 -0
- data/lib/tennpipes-init/generators/project/public/favicon.ico +0 -0
- data/lib/tennpipes-init/generators/project/public/images/booking.com.png +0 -0
- data/lib/tennpipes-init/generators/project/public/images/causes.png +0 -0
- data/lib/tennpipes-init/generators/project/public/images/ennkeypee_bg.jpg +0 -0
- data/lib/tennpipes-init/generators/project/public/images/ennkeypee_bluelogo.png +0 -0
- data/lib/tennpipes-init/generators/project/public/images/ennkeypee_bluelogo.svg +68 -0
- data/lib/tennpipes-init/generators/project/public/images/ennkeypee_whitelogo.png +0 -0
- data/lib/tennpipes-init/generators/project/public/images/ennkeypee_whitelogo.svg +65 -0
- data/lib/tennpipes-init/generators/project/public/images/forever21.png +0 -0
- data/lib/tennpipes-init/generators/project/public/images/icons/foundation-icons.eot +0 -0
- data/lib/tennpipes-init/generators/project/public/images/icons/foundation-icons.svg +970 -0
- data/lib/tennpipes-init/generators/project/public/images/icons/foundation-icons.ttf +0 -0
- data/lib/tennpipes-init/generators/project/public/images/icons/foundation-icons.woff +0 -0
- data/lib/tennpipes-init/generators/project/public/images/icons/tennpipes-icons.css +598 -0
- data/lib/tennpipes-init/generators/project/public/images/image1.jpg +0 -0
- data/lib/tennpipes-init/generators/project/public/images/image11.jpg +0 -0
- data/lib/tennpipes-init/generators/project/public/images/image2.jpg +0 -0
- data/lib/tennpipes-init/generators/project/public/images/image3.jpg +0 -0
- data/lib/tennpipes-init/generators/project/public/images/intuit.png +0 -0
- data/lib/tennpipes-init/generators/project/public/images/krispykreme.png +0 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/README.md +302 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/bower.json +4 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/composer.json +34 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/gulpfile.js +92 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/holder.js +1920 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/holder.min.js +12 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/package.json +46 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/src/holder.js +1411 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/src/lib/augment.js +27 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/src/lib/ondomready.js +155 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/src/lib/polyfills.js +177 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/src/scenegraph.js +101 -0
- data/lib/tennpipes-init/generators/project/public/images/placeholders/src/utils.js +129 -0
- data/lib/tennpipes-init/generators/project/public/images/priceline.com.png +0 -0
- data/lib/tennpipes-init/generators/project/public/images/stripe.png +0 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes.min.js +6081 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.abide.js +340 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.accordion.js +67 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.alert.js +43 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.clearing.js +556 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.dropdown.js +448 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.equalizer.js +77 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.interchange.js +354 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.joyride.js +932 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.js +703 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.magellan.js +203 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.offcanvas.js +152 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.orbit.js +476 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.reveal.js +471 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.slider.js +263 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.tab.js +237 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.tooltip.js +307 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/tennpipes/tennpipes.topbar.js +452 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/vendor/fastclick.js +8 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/vendor/jquery.cookie.js +8 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/vendor/jquery.js +26 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/vendor/modernizr.js +8 -0
- data/lib/tennpipes-init/generators/project/public/javascripts/vendor/placeholder.js +2 -0
- data/lib/tennpipes-init/generators/project/public/stylesheets/app.css~ +178 -0
- data/lib/tennpipes-init/generators/project/public/stylesheets/app1.css~ +177 -0
- data/lib/tennpipes-init/generators/project/public/stylesheets/ennkeypee.css +214 -0
- data/lib/tennpipes-init/generators/project/public/stylesheets/ennkeypee.css~ +214 -0
- data/lib/tennpipes-init/generators/project/public/stylesheets/normalize.css +427 -0
- data/lib/tennpipes-init/generators/project/public/stylesheets/tennpipes.css +6201 -0
- data/lib/tennpipes-init/generators/project/public/stylesheets/tennpipes.css~ +6201 -0
- data/lib/tennpipes-init/generators/project/public/stylesheets/tennpipes.min.css +1 -0
- data/lib/tennpipes-init/generators/runner.rb +139 -0
- data/lib/tennpipes-init/generators/task.rb +45 -0
- data/lib/tennpipes-init/generators/templates/Gemfile.tt +32 -0
- data/lib/tennpipes-init/generators/templates/Rakefile.tt +8 -0
- data/lib/tennpipes-init/generators/templates/controller.rb.tt +22 -0
- data/lib/tennpipes-init/generators/templates/gem/README.md.tt +29 -0
- data/lib/tennpipes-init/generators/templates/gem/gemspec.tt +19 -0
- data/lib/tennpipes-init/generators/templates/gem/lib/libname.tt +6 -0
- data/lib/tennpipes-init/generators/templates/gem/lib/libname/version.tt +3 -0
- data/lib/tennpipes-init/generators/templates/helper.rb.tt +13 -0
- data/lib/tennpipes-init/generators/templates/initializer.rb.tt +5 -0
- data/lib/tennpipes-init/generators/templates/mailer.rb.tt +54 -0
- data/lib/tennpipes-init/generators/templates/project_bin.tt +14 -0
- data/lib/tennpipes-init/generators/templates/task.rb.tt +7 -0
- data/lib/tennpipes-init/tennpipes-tasks/activerecord.rb +377 -0
- data/lib/tennpipes-init/tennpipes-tasks/database.rb +12 -0
- data/lib/tennpipes-init/tennpipes-tasks/datamapper.rb +94 -0
- data/lib/tennpipes-init/tennpipes-tasks/minirecord.rb +19 -0
- data/lib/tennpipes-init/tennpipes-tasks/mongoid.rb +215 -0
- data/lib/tennpipes-init/tennpipes-tasks/mongomapper.rb +55 -0
- data/lib/tennpipes-init/tennpipes-tasks/sequel.rb +85 -0
- data/lib/tennpipes-init/tennpipes-tasks/sql-helpers.rb +72 -0
- data/test/fixtures/admin_template.rb +7 -0
- data/test/fixtures/example_template.rb +15 -0
- data/test/fixtures/git_template.rb +4 -0
- data/test/fixtures/plugin_template.rb +13 -0
- data/test/fixtures/rake_template.rb +9 -0
- data/test/helper.rb +103 -0
- data/test/test_app_generator.rb +142 -0
- data/test/test_cli.rb +27 -0
- data/test/test_component_generator.rb +98 -0
- data/test/test_controller_generator.rb +272 -0
- data/test/test_generator.rb +13 -0
- data/test/test_helper_generator.rb +133 -0
- data/test/test_mailer_generator.rb +69 -0
- data/test/test_migration_generator.rb +222 -0
- data/test/test_model_generator.rb +553 -0
- data/test/test_plugin_generator.rb +152 -0
- data/test/test_project_generator.rb +757 -0
- data/test/test_task_generator.rb +53 -0
- metadata +285 -0
@@ -0,0 +1,222 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/helper')
|
2
|
+
|
3
|
+
describe "MigrationGenerator" do
|
4
|
+
def setup
|
5
|
+
@apptmp = "#{Dir.tmpdir}/tennpipes-tests/#{SecureRandom.hex}"
|
6
|
+
`mkdir -p #{@apptmp}`
|
7
|
+
end
|
8
|
+
|
9
|
+
def teardown
|
10
|
+
`rm -rf #{@apptmp}`
|
11
|
+
end
|
12
|
+
|
13
|
+
describe 'the migration generator' do
|
14
|
+
it 'should fail outside app root' do
|
15
|
+
out, err = capture_io { generate(:migration, 'add_email_to_users', '-r=/tmp') }
|
16
|
+
assert_match(/not at the root/, out)
|
17
|
+
assert_no_file_exists("#{@apptmp}/db/migrate")
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should fail if we do not use an adapter' do
|
21
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon') }
|
22
|
+
assert_raises(SystemExit) { capture_io { generate(:migration, 'AddEmailToUsers', "-r=#{@apptmp}/sample_project") } }
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should generate migration inside app root' do
|
26
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
|
27
|
+
response_success = capture_io { generate(:migration, 'AddEmailToUsers', "-r=#{@apptmp}/sample_project") }
|
28
|
+
migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_add_email_to_users.rb"
|
29
|
+
assert_match_in_file(/class AddEmailToUser/m, migration_file_path)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should generate migration inside app root with lowercase migration argument' do
|
33
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
|
34
|
+
response_success = capture_io { generate(:migration, 'add_email_to_users', "-r=#{@apptmp}/sample_project") }
|
35
|
+
migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_add_email_to_users.rb"
|
36
|
+
assert_match_in_file(/class AddEmailToUsers/m, migration_file_path)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'should generate migration inside app root with singular table' do
|
40
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
|
41
|
+
capture_io { generate(:migration, 'add_email_to_user', "email:string", "-r=#{@apptmp}/sample_project") }
|
42
|
+
migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_add_email_to_user.rb"
|
43
|
+
assert_match_in_file(/class AddEmailToUser/m, migration_file_path)
|
44
|
+
assert_match_in_file(/t.string :email/, migration_file_path)
|
45
|
+
assert_match_in_file(/t.remove :email/, migration_file_path)
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "the default migration numbering" do
|
49
|
+
it 'should properly calculate version number' do
|
50
|
+
capture_io { generate(:project, 'sample_project', "--migration_format=number", "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=sequel') }
|
51
|
+
capture_io { generate(:migration, 'add_email_to_person', "email:string", "-r=#{@apptmp}/sample_project") }
|
52
|
+
capture_io { generate(:migration, 'add_name_to_person', "email:string", "-r=#{@apptmp}/sample_project") }
|
53
|
+
capture_io { generate(:migration, 'add_age_to_user', "email:string", "-r=#{@apptmp}/sample_project") }
|
54
|
+
assert_match_in_file(/Sequel\.migration do/m, "#{@apptmp}/sample_project/db/migrate/001_add_email_to_person.rb")
|
55
|
+
assert_match_in_file(/Sequel\.migration do/m, "#{@apptmp}/sample_project/db/migrate/002_add_name_to_person.rb")
|
56
|
+
assert_match_in_file(/Sequel\.migration do/m, "#{@apptmp}/sample_project/db/migrate/003_add_age_to_user.rb")
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "the timestamped migration numbering" do
|
61
|
+
it 'should properly calculate version number' do
|
62
|
+
capture_io { generate(:project, 'sample_project', "--migration_format=timestamp", "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=sequel') }
|
63
|
+
|
64
|
+
time = stop_time_for_test.utc.strftime("%Y%m%d%H%M%S")
|
65
|
+
|
66
|
+
capture_io { generate(:migration, 'add_gender_to_person', "gender:string", "-r=#{@apptmp}/sample_project") }
|
67
|
+
assert_match_in_file(/Sequel\.migration do/m, "#{@apptmp}/sample_project/db/migrate/#{time}_add_gender_to_person.rb")
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe 'the migration argument' do
|
72
|
+
it 'should properly extract a table name from argument' do
|
73
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
|
74
|
+
capture_io { generate(:migration, 'AddAuthenticityTokenFieldsToUsers', 'authentity_token:string', "-r=#{@apptmp}/sample_project") }
|
75
|
+
capture_io { generate(:migration, 'AddEmailToTokyo', 'email:string', "-r=#{@apptmp}/sample_project") }
|
76
|
+
capture_io { generate(:migration, 'AddLocationTofoo', 'location:string', "-r=#{@apptmp}/sample_project") }
|
77
|
+
migration_file_path1 = "#{@apptmp}/sample_project/db/migrate/001_add_authenticity_token_fields_to_users.rb"
|
78
|
+
migration_file_path2 = "#{@apptmp}/sample_project/db/migrate/002_add_email_to_tokyo.rb"
|
79
|
+
migration_file_path3 = "#{@apptmp}/sample_project/db/migrate/003_add_location_tofoo.rb"
|
80
|
+
assert_match_in_file(/change_table :users/, migration_file_path1)
|
81
|
+
assert_match_in_file(/change_table :tokyo/, migration_file_path2)
|
82
|
+
assert_match_in_file(/change_table :foos/, migration_file_path3)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe 'the migration generator for activerecord' do
|
88
|
+
it 'should generate migration for generic needs' do
|
89
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
|
90
|
+
response_success = capture_io { generate(:migration, 'ModifyUserFields', "-r=#{@apptmp}/sample_project") }
|
91
|
+
migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_modify_user_fields.rb"
|
92
|
+
assert_match_in_file(/class ModifyUserFields/m, migration_file_path)
|
93
|
+
assert_match_in_file(/def self\.up\s+end/m, migration_file_path)
|
94
|
+
assert_match_in_file(/def self\.down\s+end/m, migration_file_path)
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'should generate migration for adding columns' do
|
98
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
|
99
|
+
migration_params = ['AddEmailToUsers', "email:string", "age:integer", "-r=#{@apptmp}/sample_project"]
|
100
|
+
response_success = capture_io { generate(:migration, *migration_params) }
|
101
|
+
migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_add_email_to_users.rb"
|
102
|
+
assert_match_in_file(/class AddEmailToUsers/m, migration_file_path)
|
103
|
+
assert_match_in_file(/change_table :users.*?t\.string :email/m, migration_file_path)
|
104
|
+
assert_match_in_file(/t\.integer :age/m, migration_file_path)
|
105
|
+
assert_match_in_file(/change_table :users.*?t\.remove :email/m, migration_file_path)
|
106
|
+
assert_match_in_file(/t\.remove :age/m, migration_file_path)
|
107
|
+
end
|
108
|
+
|
109
|
+
it 'should generate migration for removing columns' do
|
110
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
|
111
|
+
migration_params = ['RemoveEmailFromUsers', "email:string", "age:integer", "-r=#{@apptmp}/sample_project"]
|
112
|
+
response_success = capture_io { generate(:migration, *migration_params) }
|
113
|
+
migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_remove_email_from_users.rb"
|
114
|
+
assert_match_in_file(/class RemoveEmailFromUsers/m, migration_file_path)
|
115
|
+
assert_match_in_file(/change_table :users.*?t\.remove :email/m, migration_file_path)
|
116
|
+
assert_match_in_file(/t\.remove :age/m, migration_file_path)
|
117
|
+
assert_match_in_file(/change_table :users.*?t\.string :email/m, migration_file_path)
|
118
|
+
assert_match_in_file(/t\.integer :age/m, migration_file_path)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe 'the migration generator for datamapper' do
|
123
|
+
it 'should generate migration for generic needs' do
|
124
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=datamapper') }
|
125
|
+
response_success = capture_io { generate(:migration, 'ModifyUserFields', "-r=#{@apptmp}/sample_project") }
|
126
|
+
migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_modify_user_fields.rb"
|
127
|
+
assert_match_in_file(/migration\s1.*?:modify_user_fields/m, migration_file_path)
|
128
|
+
assert_match_in_file(/up\sdo\s+end/m, migration_file_path)
|
129
|
+
assert_match_in_file(/down\sdo\s+end/m, migration_file_path)
|
130
|
+
end
|
131
|
+
|
132
|
+
it 'should generate migration for adding columns' do
|
133
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=datamapper') }
|
134
|
+
migration_params = ['AddEmailToUsers', "email:string", "age:integer", "-r=#{@apptmp}/sample_project"]
|
135
|
+
response_success = capture_io { generate(:migration, *migration_params) }
|
136
|
+
migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_add_email_to_users.rb"
|
137
|
+
assert_match_in_file(/migration\s1.*?:add_email_to_users/m, migration_file_path)
|
138
|
+
assert_match_in_file(/modify_table :users.*?add_column :email, String/m, migration_file_path)
|
139
|
+
assert_match_in_file(/add_column :age, Integer/m, migration_file_path)
|
140
|
+
assert_match_in_file(/modify_table :users.*?drop_column :email/m, migration_file_path)
|
141
|
+
assert_match_in_file(/drop_column :age/m, migration_file_path)
|
142
|
+
end
|
143
|
+
|
144
|
+
it 'should generate migration for removing columns' do
|
145
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=datamapper') }
|
146
|
+
migration_params = ['RemoveEmailFromUsers', "email:string", "age:integer", "-r=#{@apptmp}/sample_project"]
|
147
|
+
response_success = capture_io { generate(:migration, *migration_params) }
|
148
|
+
migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_remove_email_from_users.rb"
|
149
|
+
assert_match_in_file(/migration\s1.*?:remove_email_from_users/m, migration_file_path)
|
150
|
+
assert_match_in_file(/modify_table :users.*?drop_column :email/m, migration_file_path)
|
151
|
+
assert_match_in_file(/drop_column :age/m, migration_file_path)
|
152
|
+
assert_match_in_file(/modify_table :users.*?add_column :email, String/m, migration_file_path)
|
153
|
+
assert_match_in_file(/add_column :age, Integer/m, migration_file_path)
|
154
|
+
end
|
155
|
+
|
156
|
+
it 'should properly version migration files' do
|
157
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=datamapper') }
|
158
|
+
response_success = capture_io { generate(:migration, 'ModifyUserFields', "-r=#{@apptmp}/sample_project") }
|
159
|
+
response_success = capture_io { generate(:migration, 'ModifyUserFields2', "-r=#{@apptmp}/sample_project") }
|
160
|
+
response_success = capture_io { generate(:migration, 'ModifyUserFields3', "-r=#{@apptmp}/sample_project") }
|
161
|
+
assert_match_in_file(/migration\s1.*?:modify_user_fields/m, "#{@apptmp}/sample_project/db/migrate/001_modify_user_fields.rb")
|
162
|
+
assert_match_in_file(/migration\s2.*?:modify_user_fields2/m, "#{@apptmp}/sample_project/db/migrate/002_modify_user_fields2.rb")
|
163
|
+
assert_match_in_file(/migration\s3.*?:modify_user_fields3/m, "#{@apptmp}/sample_project/db/migrate/003_modify_user_fields3.rb")
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
describe 'the migration generator for sequel' do
|
168
|
+
it 'should generate migration for generic needs' do
|
169
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=sequel') }
|
170
|
+
response_success = capture_io { generate(:migration, 'ModifyUserFields', "-r=#{@apptmp}/sample_project") }
|
171
|
+
migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_modify_user_fields.rb"
|
172
|
+
assert_match_in_file(/Sequel\.migration/m, migration_file_path)
|
173
|
+
assert_match_in_file(/up do\s+end/m, migration_file_path)
|
174
|
+
assert_match_in_file(/down do\s+end/m, migration_file_path)
|
175
|
+
end
|
176
|
+
|
177
|
+
it 'should generate migration for adding columns' do
|
178
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=sequel') }
|
179
|
+
migration_params = ['AddEmailToUsers', "email:string", "age:integer", "-r=#{@apptmp}/sample_project"]
|
180
|
+
response_success = capture_io { generate(:migration, *migration_params) }
|
181
|
+
migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_add_email_to_users.rb"
|
182
|
+
assert_match_in_file(/Sequel\.migration/m, migration_file_path)
|
183
|
+
assert_match_in_file(/alter_table :users.*?add_column :email, String/m, migration_file_path)
|
184
|
+
assert_match_in_file(/add_column :age, Integer/m, migration_file_path)
|
185
|
+
assert_match_in_file(/alter_table :users.*?drop_column :email/m, migration_file_path)
|
186
|
+
assert_match_in_file(/drop_column :age/m, migration_file_path)
|
187
|
+
end
|
188
|
+
|
189
|
+
it 'should generate migration for removing columns' do
|
190
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=sequel') }
|
191
|
+
migration_params = ['RemoveEmailFromUsers', "email:string", "age:integer", "-r=#{@apptmp}/sample_project"]
|
192
|
+
response_success = capture_io { generate(:migration, *migration_params) }
|
193
|
+
migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_remove_email_from_users.rb"
|
194
|
+
assert_match_in_file(/Sequel\.migration/m, migration_file_path)
|
195
|
+
assert_match_in_file(/alter_table :users.*?drop_column :email/m, migration_file_path)
|
196
|
+
assert_match_in_file(/drop_column :age/m, migration_file_path)
|
197
|
+
assert_match_in_file(/alter_table :users.*?add_column :email, String/m, migration_file_path)
|
198
|
+
assert_match_in_file(/add_column :age, Integer/m, migration_file_path)
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
describe "the migration destroy option" do
|
203
|
+
|
204
|
+
it 'should destroy the migration files' do
|
205
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=sequel') }
|
206
|
+
migration_params = ['RemoveEmailFromUsers', "email:string", "age:integer", "-r=#{@apptmp}/sample_project"]
|
207
|
+
capture_io { generate(:migration, *migration_params) }
|
208
|
+
capture_io { generate(:migration, 'RemoveEmailFromUsers', "-r=#{@apptmp}/sample_project",'-d') }
|
209
|
+
assert_no_file_exists("#{@apptmp}/sample_project/db/migrate/001_remove_email_from_users.rb")
|
210
|
+
end
|
211
|
+
|
212
|
+
it 'should destroy the migration file regardless of number' do
|
213
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=sequel') }
|
214
|
+
migration_params = ['RemoveEmailFromUsers', "email:string", "age:integer", "-r=#{@apptmp}/sample_project"]
|
215
|
+
migration_param2 = ['AddEmailFromUsers', "email:string", "age:integer", "-r=#{@apptmp}/sample_project"]
|
216
|
+
capture_io { generate(:migration, *migration_param2) }
|
217
|
+
capture_io { generate(:migration, *migration_params) }
|
218
|
+
capture_io { generate(:migration, 'RemoveEmailFromUsers', "-r=#{@apptmp}/sample_project",'-d') }
|
219
|
+
assert_no_file_exists("#{@apptmp}/sample_project/db/migrate/002_remove_email_from_users.rb")
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
@@ -0,0 +1,553 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/helper')
|
2
|
+
|
3
|
+
describe "ModelGenerator" do
|
4
|
+
def setup
|
5
|
+
@apptmp = "#{Dir.tmpdir}/tennpipes-tests/#{SecureRandom.hex}"
|
6
|
+
`mkdir -p #{@apptmp}`
|
7
|
+
end
|
8
|
+
|
9
|
+
def teardown
|
10
|
+
`rm -rf #{@apptmp}`
|
11
|
+
end
|
12
|
+
|
13
|
+
describe 'the model generator' do
|
14
|
+
it 'should fail outside app root' do
|
15
|
+
out, err = capture_io { generate(:model, 'user', "-r=#{@apptmp}") }
|
16
|
+
assert_match(/not at the root/, out)
|
17
|
+
assert_no_file_exists('/tmp/models/user.rb')
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should generate filename properly' do
|
21
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=couchrest') }
|
22
|
+
capture_io { generate(:model, 'DemoItem', "name:string", "age", "email:string", "-r=#{@apptmp}/sample_project") }
|
23
|
+
assert_file_exists("#{@apptmp}/sample_project/models/demo_item.rb")
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should fail if field name is not acceptable' do
|
27
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=couchrest') }
|
28
|
+
out, err = capture_io { generate(:model, 'DemoItem', "re@l$ly:string","display-name:string", "age&year:datetime", "email_two:string", "-r=#{@apptmp}/sample_project") }
|
29
|
+
assert_match(/Invalid field name:/, out)
|
30
|
+
assert_match(/display-name:string/, out)
|
31
|
+
assert_match(/age&year:datetime/, out)
|
32
|
+
assert_match(/re@l\$ly:string/, out)
|
33
|
+
refute_match(/email_two:string/, out)
|
34
|
+
refute_match(/apply/, out)
|
35
|
+
assert_no_file_exists("#{@apptmp}/sample_project/models/demo_item.rb")
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should fail if we do not use an adapter' do
|
39
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon') }
|
40
|
+
assert_raises(SystemExit) { capture_io { generate(:model, 'user', "-r=#{@apptmp}/sample_project") } }
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should not fail if we do not have test component' do
|
44
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--test=none', '-d=activerecord') }
|
45
|
+
response_success = capture_io { generate(:model, 'user', "-r=#{@apptmp}/sample_project") }
|
46
|
+
assert_match_in_file(/class User < ActiveRecord::Base/m, "#{@apptmp}/sample_project/models/user.rb")
|
47
|
+
assert_no_file_exists("#{@apptmp}/sample_project/test")
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'should generate model in specified app' do
|
51
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '-d=datamapper', '--script=none', '-t=bacon') }
|
52
|
+
capture_io { generate(:app, 'subby', "-r=#{@apptmp}/sample_project") }
|
53
|
+
capture_io { generate(:model, 'Post', "body:string", '-a=/subby', "-r=#{@apptmp}/sample_project") }
|
54
|
+
assert_match_in_file(/class Post\n\s+include DataMapper::Resource/m, "#{@apptmp}/sample_project/subby/models/post.rb")
|
55
|
+
assert_match_in_file(/property :body, String/m, "#{@apptmp}/sample_project/subby/models/post.rb")
|
56
|
+
assert_match_in_file(/migration 1, :create_posts do/m, "#{@apptmp}/sample_project/db/migrate/001_create_posts.rb")
|
57
|
+
assert_match_in_file(/DataMapper.finalize/m,"#{@apptmp}/sample_project/config/boot.rb")
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'should generate migration file versions properly' do
|
61
|
+
capture_io { generate(:project, 'sample_project', "--migration_format=number", "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
|
62
|
+
capture_io { generate(:model, 'user', "-r=#{@apptmp}/sample_project") }
|
63
|
+
capture_io { generate(:model, 'account', "-r=#{@apptmp}/sample_project") }
|
64
|
+
capture_io { generate(:model, 'bank', "-r=#{@apptmp}/sample_project") }
|
65
|
+
assert_file_exists("#{@apptmp}/sample_project/db/migrate/001_create_users.rb")
|
66
|
+
assert_file_exists("#{@apptmp}/sample_project/db/migrate/002_create_accounts.rb")
|
67
|
+
assert_file_exists("#{@apptmp}/sample_project/db/migrate/003_create_banks.rb")
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'should generate migration file versions properly when timestamped' do
|
71
|
+
capture_io { generate(:project, 'sample_project', "--migration_format=timestamp", "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
|
72
|
+
|
73
|
+
time = stop_time_for_test.utc.strftime("%Y%m%d%H%M%S")
|
74
|
+
|
75
|
+
capture_io { generate(:model, 'user', "-r=#{@apptmp}/sample_project") }
|
76
|
+
assert_file_exists("#{@apptmp}/sample_project/db/migrate/#{time}_create_users.rb")
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'should generate a default type value for fields' do
|
80
|
+
current_time = stop_time_for_test.strftime("%Y%m%d%H%M%S")
|
81
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
|
82
|
+
capture_io { generate(:model, 'person', "name", "age:integer", "email", "-r=#{@apptmp}/sample_project") }
|
83
|
+
migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_create_people.rb"
|
84
|
+
assert_match_in_file(/class CreatePeople < ActiveRecord::Migration/m, migration_file_path)
|
85
|
+
assert_match_in_file(/ create_table :people/m, migration_file_path)
|
86
|
+
assert_match_in_file(/ t.string :name/m, migration_file_path)
|
87
|
+
assert_match_in_file(/ t.integer :age/m, migration_file_path)
|
88
|
+
assert_match_in_file(/ t.string :email/m, migration_file_path)
|
89
|
+
assert_match_in_file(/ drop_table :people/m, migration_file_path)
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'should abort if model name already exists' do
|
93
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", "-d=activerecord") }
|
94
|
+
out, err = capture_io { generate(:model, 'kernel', "--root=#{@apptmp}/sample_project") }
|
95
|
+
assert_match(/Kernel already exists/, out)
|
96
|
+
assert_no_file_exists("#{@apptmp}/sample_project/db/migrate/001_create_kernel.rb")
|
97
|
+
assert_no_file_exists("#{@apptmp}/sample_project/models/kernel.rb")
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'should abort if model name already exists in root' do
|
101
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", "-d=activerecord") }
|
102
|
+
capture_io { generate(:app, 'user', "--root=#{@apptmp}/sample_project") }
|
103
|
+
out, err = capture_io { generate_with_parts(:model, 'user', "--root=#{@apptmp}/sample_project", :apps => "user") }
|
104
|
+
assert_file_exists("#{@apptmp}/sample_project/user/app.rb")
|
105
|
+
assert_no_file_exists("#{@apptmp}/sample_project/models/user.rb")
|
106
|
+
assert_match(/User already exists/, out)
|
107
|
+
end
|
108
|
+
|
109
|
+
it 'should generate model files if :force option is specified' do
|
110
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", "-d=activerecord") }
|
111
|
+
capture_io { generate(:app, 'user', "--root=#{@apptmp}/sample_project") }
|
112
|
+
out, err = capture_io { generate_with_parts(:model, 'user', "--root=#{@apptmp}/sample_project", "--force", :apps => "user") }
|
113
|
+
assert_file_exists("#{@apptmp}/sample_project/user/app.rb")
|
114
|
+
assert_file_exists("#{@apptmp}/sample_project/models/user.rb")
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
# ACTIVERECORD
|
119
|
+
describe "model generator using activerecord" do
|
120
|
+
it 'should add activerecord middleware' do
|
121
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=activerecord') }
|
122
|
+
assert_match_in_file(/ use ConnectionPoolManagement/m, "#{@apptmp}/sample_project/app/app.rb")
|
123
|
+
assert_file_exists("#{@apptmp}/sample_project/lib/connection_pool_management_middleware.rb")
|
124
|
+
end
|
125
|
+
|
126
|
+
it 'should generate model file' do
|
127
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
|
128
|
+
capture_io { generate(:model, 'user', "-r=#{@apptmp}/sample_project") }
|
129
|
+
assert_match_in_file(/class User < ActiveRecord::Base/m, "#{@apptmp}/sample_project/models/user.rb")
|
130
|
+
end
|
131
|
+
|
132
|
+
it 'should generate model file with camelized name' do
|
133
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
|
134
|
+
capture_io { generate(:model, 'ChunkyBacon', "-r=#{@apptmp}/sample_project") }
|
135
|
+
assert_match_in_file(/class ChunkyBacon < ActiveRecord::Base/m, "#{@apptmp}/sample_project/models/chunky_bacon.rb")
|
136
|
+
assert_match_in_file(/ChunkyBacon Model/, "#{@apptmp}/sample_project/test/models/chunky_bacon_test.rb")
|
137
|
+
end
|
138
|
+
|
139
|
+
it 'should generate migration file with no fields' do
|
140
|
+
current_time = stop_time_for_test.strftime("%Y%m%d%H%M%S")
|
141
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
|
142
|
+
capture_io { generate(:model, 'user', "-r=#{@apptmp}/sample_project") }
|
143
|
+
migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_create_users.rb"
|
144
|
+
assert_match_in_file(/class CreateUsers < ActiveRecord::Migration/m, migration_file_path)
|
145
|
+
assert_match_in_file(/ create_table :users/m, migration_file_path)
|
146
|
+
assert_match_in_file(/ drop_table :users/m, migration_file_path)
|
147
|
+
end
|
148
|
+
|
149
|
+
it 'should generate migration file with given fields' do
|
150
|
+
current_time = stop_time_for_test.strftime("%Y%m%d%H%M%S")
|
151
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
|
152
|
+
capture_io { generate(:model, 'person', "name:string", "age:integer", "email:string", "-r=#{@apptmp}/sample_project") }
|
153
|
+
migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_create_people.rb"
|
154
|
+
assert_match_in_file(/class CreatePeople < ActiveRecord::Migration/m, migration_file_path)
|
155
|
+
assert_match_in_file(/ create_table :people/m, migration_file_path)
|
156
|
+
assert_match_in_file(/ t.string :name/m, migration_file_path)
|
157
|
+
assert_match_in_file(/ t.integer :age/m, migration_file_path)
|
158
|
+
assert_match_in_file(/ t.string :email/m, migration_file_path)
|
159
|
+
assert_match_in_file(/ drop_table :people/m, migration_file_path)
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
# MINIRECORD
|
164
|
+
describe "model generator using minirecord" do
|
165
|
+
it 'should generate hooks for auto upgrade' do
|
166
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=minirecord') }
|
167
|
+
assert_match_in_file(
|
168
|
+
"Tennpipes.after_load do\n ActiveRecord::Base.auto_upgrade!",
|
169
|
+
"#{@apptmp}/sample_project/config/boot.rb"
|
170
|
+
)
|
171
|
+
end
|
172
|
+
|
173
|
+
it 'should add activerecord middleware' do
|
174
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=minirecord') }
|
175
|
+
assert_match_in_file(/ use ConnectionPoolManagement/m, "#{@apptmp}/sample_project/app/app.rb")
|
176
|
+
assert_file_exists("#{@apptmp}/sample_project/lib/connection_pool_management_middleware.rb")
|
177
|
+
end
|
178
|
+
|
179
|
+
it 'should generate model file' do
|
180
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=minirecord') }
|
181
|
+
capture_io { generate(:model, 'user', 'name:string', 'surname:string', 'age:integer', "-r=#{@apptmp}/sample_project") }
|
182
|
+
assert_match_in_file(/class User < ActiveRecord::Base/m, "#{@apptmp}/sample_project/models/user.rb")
|
183
|
+
assert_match_in_file(/field :name, :as => :string/m, "#{@apptmp}/sample_project/models/user.rb")
|
184
|
+
assert_match_in_file(/field :surname, :as => :string/m, "#{@apptmp}/sample_project/models/user.rb")
|
185
|
+
assert_match_in_file(/field :age, :as => :integer/m, "#{@apptmp}/sample_project/models/user.rb")
|
186
|
+
end
|
187
|
+
|
188
|
+
it 'should generate model file with camelized name' do
|
189
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=minirecord') }
|
190
|
+
capture_io { generate(:model, 'ChunkyBacon', "-r=#{@apptmp}/sample_project") }
|
191
|
+
assert_match_in_file(/class ChunkyBacon < ActiveRecord::Base/m, "#{@apptmp}/sample_project/models/chunky_bacon.rb")
|
192
|
+
assert_match_in_file(/ChunkyBacon Model/, "#{@apptmp}/sample_project/test/models/chunky_bacon_test.rb")
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
# COUCHREST
|
197
|
+
describe "model generator using couchrest" do
|
198
|
+
it 'should generate model file with no properties' do
|
199
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=couchrest') }
|
200
|
+
capture_io { generate(:model, 'user', "-r=#{@apptmp}/sample_project") }
|
201
|
+
assert_match_in_file(/class User < CouchRest::Model::Base/m, "#{@apptmp}/sample_project/models/user.rb")
|
202
|
+
assert_match_in_file(/# property <name>[\s\n]+?end/m, "#{@apptmp}/sample_project/models/user.rb")
|
203
|
+
end
|
204
|
+
|
205
|
+
it 'should generate model file with given fields' do
|
206
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=couchrest') }
|
207
|
+
capture_io { generate(:model, 'person', "name:string", "age", "email:string", "-r=#{@apptmp}/sample_project") }
|
208
|
+
assert_match_in_file(/class Person < CouchRest::Model::Base/m, "#{@apptmp}/sample_project/models/person.rb")
|
209
|
+
assert_match_in_file(/property :name/m, "#{@apptmp}/sample_project/models/person.rb")
|
210
|
+
assert_match_in_file(/property :age/m, "#{@apptmp}/sample_project/models/person.rb")
|
211
|
+
assert_match_in_file(/property :email/m, "#{@apptmp}/sample_project/models/person.rb")
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
# DATAMAPPER
|
216
|
+
describe "model generator using datamapper" do
|
217
|
+
it 'should generate model file with camelized name' do
|
218
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=datamapper') }
|
219
|
+
capture_io { generate(:model, 'ChunkyBacon', "-r=#{@apptmp}/sample_project") }
|
220
|
+
assert_match_in_file(/class ChunkyBacon\n\s+include DataMapper::Resource/m, "#{@apptmp}/sample_project/models/chunky_bacon.rb")
|
221
|
+
assert_match_in_file(/ChunkyBacon Model/, "#{@apptmp}/sample_project/test/models/chunky_bacon_test.rb")
|
222
|
+
end
|
223
|
+
|
224
|
+
it 'should generate model file with fields' do
|
225
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=datamapper') }
|
226
|
+
capture_io { generate(:model, 'user', "name:string", "age:integer", "created_at:datetime", "-r=#{@apptmp}/sample_project") }
|
227
|
+
assert_match_in_file(/class User\n\s+include DataMapper::Resource/m, "#{@apptmp}/sample_project/models/user.rb")
|
228
|
+
assert_match_in_file(/property :name, String/m, "#{@apptmp}/sample_project/models/user.rb")
|
229
|
+
assert_match_in_file(/property :age, Integer/m, "#{@apptmp}/sample_project/models/user.rb")
|
230
|
+
assert_match_in_file(/property :created_at, DateTime/m, "#{@apptmp}/sample_project/models/user.rb")
|
231
|
+
end
|
232
|
+
|
233
|
+
it 'should properly generate version numbers' do
|
234
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=datamapper') }
|
235
|
+
capture_io { generate(:model, 'user', "name:string", "age:integer", "created_at:datetime", "-r=#{@apptmp}/sample_project") }
|
236
|
+
capture_io { generate(:model, 'person', "name:string", "age:integer", "created_at:datetime", "-r=#{@apptmp}/sample_project") }
|
237
|
+
capture_io { generate(:model, 'account', "name:string", "age:integer", "created_at:datetime", "-r=#{@apptmp}/sample_project") }
|
238
|
+
assert_match_in_file(/class User\n\s+include DataMapper::Resource/m, "#{@apptmp}/sample_project/models/user.rb")
|
239
|
+
assert_match_in_file(/migration 1, :create_users do/m, "#{@apptmp}/sample_project/db/migrate/001_create_users.rb")
|
240
|
+
assert_match_in_file(/class Person\n\s+include DataMapper::Resource/m, "#{@apptmp}/sample_project/models/person.rb")
|
241
|
+
assert_match_in_file(/migration 2, :create_people do/m, "#{@apptmp}/sample_project/db/migrate/002_create_people.rb")
|
242
|
+
assert_match_in_file(/class Account\n\s+include DataMapper::Resource/m, "#{@apptmp}/sample_project/models/account.rb")
|
243
|
+
assert_match_in_file(/migration 3, :create_accounts do/m, "#{@apptmp}/sample_project/db/migrate/003_create_accounts.rb")
|
244
|
+
end
|
245
|
+
|
246
|
+
it 'should generate migration with given fields' do
|
247
|
+
current_time = stop_time_for_test.strftime("%Y%m%d%H%M%S")
|
248
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=datamapper') }
|
249
|
+
capture_io { generate(:model, 'person', "name:string", "created_at:date_time", "email:string", "-r=#{@apptmp}/sample_project") }
|
250
|
+
assert_match_in_file(/class Person\n\s+include DataMapper::Resource/m, "#{@apptmp}/sample_project/models/person.rb")
|
251
|
+
migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_create_people.rb"
|
252
|
+
assert_match_in_file(/migration 1, :create_people do/m, migration_file_path)
|
253
|
+
assert_match_in_file(/create_table :people do/m, migration_file_path)
|
254
|
+
assert_match_in_file(/column :name, DataMapper::Property::String/m, migration_file_path)
|
255
|
+
assert_match_in_file(/column :created_at, DataMapper::Property::DateTime/m, migration_file_path)
|
256
|
+
assert_match_in_file(/column :email, DataMapper::Property::String/m, migration_file_path)
|
257
|
+
assert_match_in_file(/drop_table :people/m, migration_file_path)
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
# SEQUEL
|
262
|
+
describe "model generator using sequel" do
|
263
|
+
it 'should generate model file with given properties' do
|
264
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=sequel') }
|
265
|
+
capture_io { generate(:model, 'user', "name:string", "age:integer", "created:datetime", "-r=#{@apptmp}/sample_project") }
|
266
|
+
assert_match_in_file(/class User < Sequel::Model/m, "#{@apptmp}/sample_project/models/user.rb")
|
267
|
+
end
|
268
|
+
|
269
|
+
it 'should generate model file with camelized name' do
|
270
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=sequel') }
|
271
|
+
capture_io { generate(:model, 'ChunkyBacon', "-r=#{@apptmp}/sample_project") }
|
272
|
+
assert_match_in_file(/class ChunkyBacon < Sequel::Model/m, "#{@apptmp}/sample_project/models/chunky_bacon.rb")
|
273
|
+
assert_match_in_file(/ChunkyBacon Model/, "#{@apptmp}/sample_project/test/models/chunky_bacon_test.rb")
|
274
|
+
end
|
275
|
+
|
276
|
+
it 'should generate migration file with given properties' do
|
277
|
+
current_time = stop_time_for_test.strftime("%Y%m%d%H%M%S")
|
278
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=sequel') }
|
279
|
+
capture_io { generate(:model, 'person', "name:string", "age:integer", "created:datetime", "-r=#{@apptmp}/sample_project") }
|
280
|
+
migration_file_path = "#{@apptmp}/sample_project/db/migrate/001_create_people.rb"
|
281
|
+
assert_match_in_file(/class Person < Sequel::Model/m, "#{@apptmp}/sample_project/models/person.rb")
|
282
|
+
assert_match_in_file(/Sequel\.migration do/m, migration_file_path)
|
283
|
+
assert_match_in_file(/create_table :people/m, migration_file_path)
|
284
|
+
assert_match_in_file(/String :name/m, migration_file_path)
|
285
|
+
assert_match_in_file(/Integer :age/m, migration_file_path)
|
286
|
+
assert_match_in_file(/DateTime :created/m, migration_file_path)
|
287
|
+
assert_match_in_file(/drop_table :people/m, migration_file_path)
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
|
+
# MONGODB
|
292
|
+
describe "model generator using mongomapper" do
|
293
|
+
it 'should generate model file with no properties' do
|
294
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=mongomapper') }
|
295
|
+
capture_io { generate(:model, 'person', "-r=#{@apptmp}/sample_project") }
|
296
|
+
assert_match_in_file(/class Person\n\s+include MongoMapper::Document/m, "#{@apptmp}/sample_project/models/person.rb")
|
297
|
+
assert_match_in_file(/# key <name>, <type>/m, "#{@apptmp}/sample_project/models/person.rb")
|
298
|
+
assert_match_in_file(/timestamps![\n\s]+end/m, "#{@apptmp}/sample_project/models/person.rb")
|
299
|
+
end
|
300
|
+
|
301
|
+
it 'should generate model file with given fields' do
|
302
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=mongomapper') }
|
303
|
+
capture_io { generate(:model, 'user', "name:string", "age:integer", "email:string", "-r=#{@apptmp}/sample_project") }
|
304
|
+
assert_match_in_file(/class User\n\s+include MongoMapper::Document/m, "#{@apptmp}/sample_project/models/user.rb")
|
305
|
+
assert_match_in_file(/key :name, String/m, "#{@apptmp}/sample_project/models/user.rb")
|
306
|
+
assert_match_in_file(/key :age, Integer/m, "#{@apptmp}/sample_project/models/user.rb")
|
307
|
+
assert_match_in_file(/key :email, String/m, "#{@apptmp}/sample_project/models/user.rb")
|
308
|
+
assert_match_in_file(/timestamps!/m, "#{@apptmp}/sample_project/models/user.rb")
|
309
|
+
end
|
310
|
+
end
|
311
|
+
|
312
|
+
describe "model generator using mongoid" do
|
313
|
+
it 'should generate model file with no properties' do
|
314
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=mongoid') }
|
315
|
+
capture_io { generate(:model, 'person', "-r=#{@apptmp}/sample_project") }
|
316
|
+
assert_match_in_file(/class Person\n\s+include Mongoid::Document/m, "#{@apptmp}/sample_project/models/person.rb")
|
317
|
+
assert_match_in_file(/# field <name>, :type => <type>, :default => <value>/m, "#{@apptmp}/sample_project/models/person.rb")
|
318
|
+
end
|
319
|
+
|
320
|
+
it 'should generate model file with given fields' do
|
321
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=mongoid') }
|
322
|
+
capture_io { generate(:model, 'user', "name:string", "age:integer", "email:string", "-r=#{@apptmp}/sample_project") }
|
323
|
+
assert_match_in_file(/class User\n\s+include Mongoid::Document/m, "#{@apptmp}/sample_project/models/user.rb")
|
324
|
+
assert_match_in_file(/field :name, :type => String/m, "#{@apptmp}/sample_project/models/user.rb")
|
325
|
+
assert_match_in_file(/field :age, :type => Integer/m, "#{@apptmp}/sample_project/models/user.rb")
|
326
|
+
assert_match_in_file(/field :email, :type => String/m, "#{@apptmp}/sample_project/models/user.rb")
|
327
|
+
end
|
328
|
+
end
|
329
|
+
|
330
|
+
# REDIS
|
331
|
+
describe "model generator using ohm" do
|
332
|
+
it 'should generate model file with no properties' do
|
333
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=ohm') }
|
334
|
+
capture_io { generate(:model, 'person', "-r=#{@apptmp}/sample_project") }
|
335
|
+
assert_match_in_file(/class Person < Ohm::Model/, "#{@apptmp}/sample_project/models/person.rb")
|
336
|
+
assert_match_in_file(/# attribute :name/m, "#{@apptmp}/sample_project/models/person.rb")
|
337
|
+
assert_match_in_file(/# reference :venue, Venue/m, "#{@apptmp}/sample_project/models/person.rb")
|
338
|
+
end
|
339
|
+
|
340
|
+
it 'should generate model file with given fields' do
|
341
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=ohm') }
|
342
|
+
capture_io { generate(:model, 'user', "name:string", "age:integer", "email:string", "-r=#{@apptmp}/sample_project") }
|
343
|
+
assert_match_in_file(/class User < Ohm::Model/, "#{@apptmp}/sample_project/models/user.rb")
|
344
|
+
assert_match_in_file(/attribute :name/m, "#{@apptmp}/sample_project/models/user.rb")
|
345
|
+
assert_match_in_file(/attribute :age/m, "#{@apptmp}/sample_project/models/user.rb")
|
346
|
+
assert_match_in_file(/attribute :email/m, "#{@apptmp}/sample_project/models/user.rb")
|
347
|
+
end
|
348
|
+
end
|
349
|
+
|
350
|
+
# MONGOMATIC
|
351
|
+
describe "model generator using mongomatic" do
|
352
|
+
it 'should generate model file with no properties' do
|
353
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=mongomatic') }
|
354
|
+
capture_io { generate(:model, 'person', "-r=#{@apptmp}/sample_project") }
|
355
|
+
assert_match_in_file(/class Person < Mongomatic::Base/, "#{@apptmp}/sample_project/models/person.rb")
|
356
|
+
assert_match_in_file(/include Mongomatic::Expectations::Helper/m, "#{@apptmp}/sample_project/models/person.rb")
|
357
|
+
end
|
358
|
+
|
359
|
+
it 'should generate model file with given fields' do
|
360
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=mongomatic') }
|
361
|
+
capture_io { generate(:model, 'user', "name:string", "age:integer", "email:string", "-r=#{@apptmp}/sample_project") }
|
362
|
+
assert_match_in_file(/class User < Mongomatic::Base/, "#{@apptmp}/sample_project/models/user.rb")
|
363
|
+
assert_match_in_file(/include Mongomatic::Expectations::Helper/, "#{@apptmp}/sample_project/models/user.rb")
|
364
|
+
assert_match_in_file(/be_present self\['name'\]/m, "#{@apptmp}/sample_project/models/user.rb")
|
365
|
+
assert_match_in_file(/be_present self\['age'\]/m, "#{@apptmp}/sample_project/models/user.rb")
|
366
|
+
assert_match_in_file(/be_present self\['email'\]/m, "#{@apptmp}/sample_project/models/user.rb")
|
367
|
+
assert_match_in_file(/be_a_number self\['age'\]/m, "#{@apptmp}/sample_project/models/user.rb")
|
368
|
+
end
|
369
|
+
end
|
370
|
+
|
371
|
+
# RIPPLE
|
372
|
+
describe "model generator using ripple" do
|
373
|
+
it 'should generate model file with no properties' do
|
374
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=ripple') }
|
375
|
+
capture_io { generate(:model, 'person', "name:string", "-r=#{@apptmp}/sample_project") }
|
376
|
+
assert_match_in_file(/class Person\n\s+include Ripple::Document/m, "#{@apptmp}/sample_project/models/person.rb")
|
377
|
+
assert_match_in_file(/# property :name, String/m, "#{@apptmp}/sample_project/models/person.rb")
|
378
|
+
assert_match_in_file(/# many :addresses/m, "#{@apptmp}/sample_project/models/person.rb")
|
379
|
+
assert_match_in_file(/# one :account/m, "#{@apptmp}/sample_project/models/person.rb")
|
380
|
+
end
|
381
|
+
|
382
|
+
it 'should generate model file with given fields' do
|
383
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=ripple') }
|
384
|
+
capture_io { generate(:model, 'user', "name:string", "age:integer", "email:string", "-r=#{@apptmp}/sample_project") }
|
385
|
+
assert_match_in_file(/class User\n\s+include Ripple::Document/m, "#{@apptmp}/sample_project/models/user.rb")
|
386
|
+
assert_match_in_file(/property :name, String/m, "#{@apptmp}/sample_project/models/user.rb")
|
387
|
+
assert_match_in_file(/property :age, Integer/m, "#{@apptmp}/sample_project/models/user.rb")
|
388
|
+
assert_match_in_file(/property :email, String/m, "#{@apptmp}/sample_project/models/user.rb")
|
389
|
+
end
|
390
|
+
end
|
391
|
+
|
392
|
+
# DYNAMOID
|
393
|
+
describe "model generator using dynamoid" do
|
394
|
+
it 'should generate model file with no properties' do
|
395
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=dynamoid') }
|
396
|
+
capture_io { generate(:model, 'person', "name:string", "-r=#{@apptmp}/sample_project") }
|
397
|
+
assert_match_in_file(/class Person\n\s+include Dynamoid::Document/m, "#{@apptmp}/sample_project/models/person.rb")
|
398
|
+
end
|
399
|
+
|
400
|
+
it 'should generate model file with given fields' do
|
401
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-d=dynamoid') }
|
402
|
+
capture_io { generate(:model, 'user', "name:string", "age:integer", "email:string", "-r=#{@apptmp}/sample_project") }
|
403
|
+
assert_match_in_file(/class User\n\s+include Dynamoid::Document/m, "#{@apptmp}/sample_project/models/user.rb")
|
404
|
+
assert_match_in_file(/field :name, :string/m, "#{@apptmp}/sample_project/models/user.rb")
|
405
|
+
assert_match_in_file(/field :age, :integer/m, "#{@apptmp}/sample_project/models/user.rb")
|
406
|
+
assert_match_in_file(/field :email, :string/m, "#{@apptmp}/sample_project/models/user.rb")
|
407
|
+
end
|
408
|
+
end
|
409
|
+
|
410
|
+
describe "model generator testing files" do
|
411
|
+
# BACON
|
412
|
+
it 'should generate test file for bacon' do
|
413
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
|
414
|
+
capture_io { generate(:app, 'subby', "-r=#{@apptmp}/sample_project") }
|
415
|
+
capture_io { generate(:model, 'SomeUser', "-r=#{@apptmp}/sample_project") }
|
416
|
+
assert_match_in_file(/describe "SomeUser Model"/m, "#{@apptmp}/sample_project/test/models/some_user_test.rb")
|
417
|
+
assert_match_in_file(/@some_user = SomeUser.new/m, "#{@apptmp}/sample_project/test/models/some_user_test.rb")
|
418
|
+
assert_match_in_file(/@some_user\.should\.not\.be\.nil/m, "#{@apptmp}/sample_project/test/models/some_user_test.rb")
|
419
|
+
assert_match_in_file(/'(\/\.\.){1}\/test/m, "#{@apptmp}/sample_project/test/models/some_user_test.rb")
|
420
|
+
end
|
421
|
+
|
422
|
+
it 'should generate test file for bacon in specified app' do
|
423
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
|
424
|
+
capture_io { generate(:app, 'subby', "-r=#{@apptmp}/sample_project") }
|
425
|
+
capture_io { generate(:model, 'SomeUser', "-a=/subby", "-r=#{@apptmp}/sample_project") }
|
426
|
+
assert_match_in_file(/describe "SomeUser Model"/m, "#{@apptmp}/sample_project/test/subby/models/some_user_test.rb")
|
427
|
+
assert_match_in_file(/@some_user = SomeUser.new/m, "#{@apptmp}/sample_project/test/subby/models/some_user_test.rb")
|
428
|
+
assert_match_in_file(/@some_user\.should\.not\.be\.nil/m, "#{@apptmp}/sample_project/test/subby/models/some_user_test.rb")
|
429
|
+
assert_match_in_file(/'(\/\.\.){2}\/test/m, "#{@apptmp}/sample_project/test/subby/models/some_user_test.rb")
|
430
|
+
end
|
431
|
+
|
432
|
+
# RIOT
|
433
|
+
it 'should generate test file for riot' do
|
434
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=riot', '-d=activerecord') }
|
435
|
+
capture_io { generate(:app, 'subby', "-r=#{@apptmp}/sample_project") }
|
436
|
+
capture_io { generate(:model, 'SomeUser', "-r=#{@apptmp}/sample_project") }
|
437
|
+
assert_match_in_file(/context "SomeUser Model" do/m, "#{@apptmp}/sample_project/test/models/some_user_test.rb")
|
438
|
+
assert_match_in_file(/SomeUser.new/m, "#{@apptmp}/sample_project/test/models/some_user_test.rb")
|
439
|
+
assert_match_in_file(/asserts\("that record is not nil"\) \{ \!topic.nil\? \}/m, "#{@apptmp}/sample_project/test/models/some_user_test.rb")
|
440
|
+
assert_match_in_file(/'(\/\.\.){1}\/test/m, "#{@apptmp}/sample_project/test/models/some_user_test.rb")
|
441
|
+
end
|
442
|
+
|
443
|
+
it 'should generate test file for riot in specified app' do
|
444
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=riot', '-d=activerecord') }
|
445
|
+
capture_io { generate(:app, 'subby', "-r=#{@apptmp}/sample_project") }
|
446
|
+
capture_io { generate(:model, 'SomeUser', "-a=/subby", "-r=#{@apptmp}/sample_project") }
|
447
|
+
assert_match_in_file(/context "SomeUser Model" do/m, "#{@apptmp}/sample_project/test/subby/models/some_user_test.rb")
|
448
|
+
assert_match_in_file(/SomeUser.new/m, "#{@apptmp}/sample_project/test/subby/models/some_user_test.rb")
|
449
|
+
assert_match_in_file(/asserts\("that record is not nil"\) \{ \!topic.nil\? \}/m, "#{@apptmp}/sample_project/test/subby/models/some_user_test.rb")
|
450
|
+
assert_match_in_file(/'(\/\.\.){2}\/test/m, "#{@apptmp}/sample_project/test/subby/models/some_user_test.rb")
|
451
|
+
end
|
452
|
+
|
453
|
+
# MINITEST
|
454
|
+
it 'should generate test file for minitest' do
|
455
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=minitest', '-d=activerecord') }
|
456
|
+
capture_io { generate(:app, 'subby', "-r=#{@apptmp}/sample_project") }
|
457
|
+
capture_io { generate(:model, 'SomeUser', "-r=#{@apptmp}/sample_project") }
|
458
|
+
assert_match_in_file(/describe "SomeUser Model"/m, "#{@apptmp}/sample_project/test/models/some_user_test.rb")
|
459
|
+
assert_match_in_file(/refute_nil @some_user/m, "#{@apptmp}/sample_project/test/models/some_user_test.rb")
|
460
|
+
end
|
461
|
+
|
462
|
+
it 'should generate test file for minitest in specified app' do
|
463
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=minitest', '-d=activerecord') }
|
464
|
+
capture_io { generate(:app, 'subby', "-r=#{@apptmp}/sample_project") }
|
465
|
+
capture_io { generate(:model, 'SomeUser', "-a=/subby", "-r=#{@apptmp}/sample_project") }
|
466
|
+
assert_match_in_file(/describe "SomeUser Model"/m, "#{@apptmp}/sample_project/test/subby/models/some_user_test.rb")
|
467
|
+
assert_match_in_file(/refute_nil @some_user/m, "#{@apptmp}/sample_project/test/subby/models/some_user_test.rb")
|
468
|
+
end
|
469
|
+
|
470
|
+
# RSPEC
|
471
|
+
it 'should generate test file for rspec' do
|
472
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=rspec', '-d=activerecord') }
|
473
|
+
capture_io { generate(:app, 'subby', "-r=#{@apptmp}/sample_project") }
|
474
|
+
capture_io { generate(:model, 'SomeUser', "-r=#{@apptmp}/sample_project") }
|
475
|
+
assert_match_in_file(/describe SomeUser do/m, "#{@apptmp}/sample_project/spec/models/some_user_spec.rb")
|
476
|
+
# assert_match_in_file(/let\(:some_user\) \{ SomeUser.new \}/m, "#{@apptmp}/sample_project/spec/models/some_user_spec.rb")
|
477
|
+
# assert_match_in_file(/some_user\.should_not be_nil/m, "#{@apptmp}/sample_project/spec/models/some_user_spec.rb")
|
478
|
+
end
|
479
|
+
|
480
|
+
it 'should generate test file for rspec in specified app' do
|
481
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=rspec', '-d=activerecord') }
|
482
|
+
capture_io { generate(:app, 'subby', "-r=#{@apptmp}/sample_project") }
|
483
|
+
capture_io { generate(:model, 'SomeUser', "-a=/subby", "-r=#{@apptmp}/sample_project") }
|
484
|
+
assert_match_in_file(/describe SomeUser do/m, "#{@apptmp}/sample_project/spec/subby/models/some_user_spec.rb")
|
485
|
+
# assert_match_in_file(/let\(:some_user\) \{ SomeUser.new \}/m, "#{@apptmp}/sample_project/spec/subby/models/some_user_spec.rb")
|
486
|
+
# assert_match_in_file(/some_user\.should_not be_nil/m, "#{@apptmp}/sample_project/spec/subby/models/some_user_spec.rb")
|
487
|
+
end
|
488
|
+
|
489
|
+
# SHOULDA
|
490
|
+
it 'should generate test file for shoulda' do
|
491
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=shoulda', '-d=activerecord') }
|
492
|
+
capture_io { generate(:app, 'subby', "-r=#{@apptmp}/sample_project") }
|
493
|
+
capture_io { generate(:model, 'SomePerson', "-r=#{@apptmp}/sample_project") }
|
494
|
+
assert_match_in_file(/class SomePersonTest < Test::Unit::TestCase/m, "#{@apptmp}/sample_project/test/models/some_person_test.rb")
|
495
|
+
assert_match_in_file(/context "SomePerson Model"/m, "#{@apptmp}/sample_project/test/models/some_person_test.rb")
|
496
|
+
assert_match_in_file(/@some_person = SomePerson.new/m, "#{@apptmp}/sample_project/test/models/some_person_test.rb")
|
497
|
+
assert_match_in_file(/assert_not_nil @some_person/m, "#{@apptmp}/sample_project/test/models/some_person_test.rb")
|
498
|
+
assert_match_in_file(/'(\/\.\.){1}\/test/m, "#{@apptmp}/sample_project/test/models/some_person_test.rb")
|
499
|
+
end
|
500
|
+
|
501
|
+
it 'should generate test file for shoulda in specified app' do
|
502
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=shoulda', '-d=activerecord') }
|
503
|
+
capture_io { generate(:app, 'subby', "-r=#{@apptmp}/sample_project") }
|
504
|
+
capture_io { generate(:model, 'SomePerson', "-a=/subby", "-r=#{@apptmp}/sample_project") }
|
505
|
+
assert_match_in_file(/class SomePersonTest < Test::Unit::TestCase/m, "#{@apptmp}/sample_project/test/subby/models/some_person_test.rb")
|
506
|
+
assert_match_in_file(/context "SomePerson Model"/m, "#{@apptmp}/sample_project/test/subby/models/some_person_test.rb")
|
507
|
+
assert_match_in_file(/@some_person = SomePerson.new/m, "#{@apptmp}/sample_project/test/subby/models/some_person_test.rb")
|
508
|
+
assert_match_in_file(/assert_not_nil @some_person/m, "#{@apptmp}/sample_project/test/subby/models/some_person_test.rb")
|
509
|
+
assert_match_in_file(/'(\/\.\.){2}\/test/m, "#{@apptmp}/sample_project/test/subby/models/some_person_test.rb")
|
510
|
+
end
|
511
|
+
end
|
512
|
+
|
513
|
+
describe "the model destroy option" do
|
514
|
+
module ActiveRecord
|
515
|
+
Base = Class.new
|
516
|
+
end
|
517
|
+
|
518
|
+
it 'should destroy the model file' do
|
519
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
|
520
|
+
capture_io { generate(:model, 'User', "-r=#{@apptmp}/sample_project") }
|
521
|
+
capture_io { generate_with_parts(:model, 'User', "-r=#{@apptmp}/sample_project", '-d') }
|
522
|
+
assert_no_file_exists("#{@apptmp}/sample_project/models/user.rb")
|
523
|
+
assert_no_file_exists("#{@apptmp}/sample_project/test/models/user_test.rb")
|
524
|
+
assert_no_file_exists("#{@apptmp}/sample_project/db/migrate/001_create_users.rb")
|
525
|
+
end
|
526
|
+
|
527
|
+
it 'should destroy the model test file with rspec' do
|
528
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=rspec', '-d=activerecord') }
|
529
|
+
capture_io { generate(:model, 'User', "-r=#{@apptmp}/sample_project") }
|
530
|
+
capture_io { generate_with_parts(:model, 'User', "-r=#{@apptmp}/sample_project", '-d') }
|
531
|
+
assert_no_file_exists("#{@apptmp}/sample_project/spec/models/user_spec.rb")
|
532
|
+
end
|
533
|
+
|
534
|
+
it 'should destroy the model test file in a sub app' do
|
535
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=bacon', '-d=activerecord') }
|
536
|
+
capture_io { generate(:app, 'subby', "-r=#{@apptmp}/sample_project") }
|
537
|
+
capture_io { generate(:model, 'User', "-a=/subby","-r=#{@apptmp}/sample_project") }
|
538
|
+
capture_io { generate_with_parts(:model, 'User', "-a=/subby","-r=#{@apptmp}/sample_project", '-d', :apps => "subby") }
|
539
|
+
assert_no_file_exists("#{@apptmp}/sample_project/subby/models/user.rb")
|
540
|
+
assert_no_file_exists("#{@apptmp}/sample_project/test/subby/models/user_test.rb")
|
541
|
+
assert_no_file_exists("#{@apptmp}/sample_project/db/migrate/001_create_users.rb")
|
542
|
+
end
|
543
|
+
|
544
|
+
it 'should destroy the right model migration' do
|
545
|
+
capture_io { generate(:project, 'sample_project', "--root=#{@apptmp}", '--script=none', '-t=rspec', '-d=activerecord') }
|
546
|
+
capture_io { generate(:model, 'bar_foo', "-r=#{@apptmp}/sample_project") }
|
547
|
+
capture_io { generate(:model, 'foo', "-r=#{@apptmp}/sample_project") }
|
548
|
+
capture_io { generate_with_parts(:model, 'foo', "-r=#{@apptmp}/sample_project", '-d') }
|
549
|
+
assert_no_file_exists("#{@apptmp}/sample_project/db/migrate/002_create_foos.rb")
|
550
|
+
assert_file_exists("#{@apptmp}/sample_project/db/migrate/001_create_bar_foos.rb")
|
551
|
+
end
|
552
|
+
end
|
553
|
+
end
|