1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/railties/test/generators/generator_test.rb
Matthew Draper 46d1cc90be Allow normal version updates within a release series
We originally chose to apply very strict versioning on the `rails` entry
in the Gemfile, because our future versioning policy was not strongly
defined.

Now it is, and our policy is very much designed on the expectation that
people will regularly update to the latest patch level in their release
series... so we should encourage that.

Of course, Gemfile.lock will do its job and prevent unplanned updates,
just as it does for every other gem in the bundle... but if you run
`bundle update`, we want to get you the latest bug/security fixes
without requiring a manual edit of the Gemfile entry.

Our current version could be a few different shapes, so it takes a bit
of work to find the right specifier, but in principle, we match anything
of the form x.y.*, where x.y matches our current release series.
2015-12-18 18:02:21 +10:30

100 lines
3.4 KiB
Ruby

require 'active_support/test_case'
require 'active_support/testing/autorun'
require 'rails/generators/app_base'
module Rails
module Generators
class GeneratorTest < ActiveSupport::TestCase
def make_builder_class
Class.new(AppBase) do
add_shared_options_for "application"
# include a module to get around thor's method_added hook
include(Module.new {
def gemfile_entries; super; end
def invoke_all; super; self; end
def add_gem_entry_filter; super; end
def gemfile_entry(*args); super; end
})
end
end
def test_construction
klass = make_builder_class
assert klass.start(['new', 'blah'])
end
def test_add_gem
klass = make_builder_class
generator = klass.start(['new', 'blah'])
generator.gemfile_entry 'tenderlove'
assert_includes generator.gemfile_entries.map(&:name), 'tenderlove'
end
def test_add_gem_with_version
klass = make_builder_class
generator = klass.start(['new', 'blah'])
generator.gemfile_entry 'tenderlove', '2.0.0'
assert generator.gemfile_entries.find { |gfe|
gfe.name == 'tenderlove' && gfe.version == '2.0.0'
}
end
def test_add_github_gem
klass = make_builder_class
generator = klass.start(['new', 'blah'])
generator.gemfile_entry 'tenderlove', github: 'hello world'
assert generator.gemfile_entries.find { |gfe|
gfe.name == 'tenderlove' && gfe.options[:github] == 'hello world'
}
end
def test_add_path_gem
klass = make_builder_class
generator = klass.start(['new', 'blah'])
generator.gemfile_entry 'tenderlove', path: 'hello world'
assert generator.gemfile_entries.find { |gfe|
gfe.name == 'tenderlove' && gfe.options[:path] == 'hello world'
}
end
def test_filter
klass = make_builder_class
generator = klass.start(['new', 'blah'])
gems = generator.gemfile_entries
generator.add_gem_entry_filter { |gem|
gem.name != gems.first.name
}
assert_equal gems.drop(1), generator.gemfile_entries
end
def test_two_filters
klass = make_builder_class
generator = klass.start(['new', 'blah'])
gems = generator.gemfile_entries
generator.add_gem_entry_filter { |gem|
gem.name != gems.first.name
}
generator.add_gem_entry_filter { |gem|
gem.name != gems[1].name
}
assert_equal gems.drop(2), generator.gemfile_entries
end
def test_recommended_rails_versions
klass = make_builder_class
generator = klass.start(['new', 'blah'])
specifier_for = -> v { generator.send(:rails_version_specifier, Gem::Version.new(v)) }
assert_equal '~> 4.1.13', specifier_for['4.1.13']
assert_equal ['>= 4.1.6.rc1', '< 4.2'], specifier_for['4.1.6.rc1']
assert_equal ['~> 4.1.7', '>= 4.1.7.1'], specifier_for['4.1.7.1']
assert_equal ['~> 4.1.7', '>= 4.1.7.1.2'], specifier_for['4.1.7.1.2']
assert_equal ['>= 4.1.7.1.rc2', '< 4.2'], specifier_for['4.1.7.1.rc2']
assert_equal ['>= 4.2.0.beta1', '< 4.3'], specifier_for['4.2.0.beta1']
assert_equal ['>= 5.0.0.beta1', '< 5.1'], specifier_for['5.0.0.beta1']
end
end
end
end