Feature: generated Rakefile In order to start a new gem A user should be able to generate a Rakefile

Background:
Given a working directory
And I have configured git sanely

Scenario: shared
When I generate a project named 'the-perfect-gem' that is 'zomg, so good' and described as 'Descriptive'

Then 'Rakefile' requires 'bundler'
And 'Rakefile' sets up bundler using the default and development groups
And 'Rakefile' requires 'rubygems'
And 'Rakefile' requires 'rake'
And 'Rakefile' requires 'rdoc/task'
And Rakefile has 'the-perfect-gem' for the Jeweler::Tasks name
And Rakefile has '[email protected]' for the Jeweler::Tasks email
And Rakefile has 'zomg, so good' for the Jeweler::Tasks summary
And Rakefile has 'Descriptive' for the Jeweler::Tasks description
And Rakefile has 'http://github.com/technicalpickles/the-perfect-gem' for the Jeweler::Tasks homepage
And Rakefile has 'MIT' for the Jeweler::Tasks license
And Rakefile instantiates a Jeweler::RubygemsDotOrgTasks
And Rakefile has a magic comment for UTF-8

Scenario: bacon
When I generate a bacon project named 'the-perfect-gem' that is 'zomg, so good'
Then 'Rakefile' requires 'rcov/rcovtask'
And Rakefile has 'spec/**/*_spec.rb' for the Rake::TestTask pattern
And Rakefile has 'spec/**/*_spec.rb' for the Rcov::RcovTask pattern
And Rakefile has 'spec' in the Rcov::RcovTask libs
And Rakefile has "spec" as the default task

Scenario: minitest
When I generate a minitest project named 'the-perfect-gem' that is 'zomg, so good'

Then 'Rakefile' requires 'rcov/rcovtask'
And Rakefile has 'test/**/test_*.rb' for the Rake::TestTask pattern
And Rakefile has 'test/**/test_*.rb' for the Rcov::RcovTask pattern
And Rakefile has 'test' in the Rcov::RcovTask libs
And Rakefile has "test" as the default task

@rspec
Scenario: rspec
When I generate a rspec project named 'the-perfect-gem' that is 'zomg, so good'

Then 'Rakefile' requires 'rspec/core'
And 'Rakefile' requires 'rspec/core/rake_task'
And Rakefile has 'spec/**/*_spec.rb' for the RSpec::Core::RakeTask pattern
And Rakefile has "spec" as the default task

Scenario: shoulda
When I generate a shoulda project named 'the-perfect-gem' that is 'zomg, so good'

Then 'Rakefile' requires 'rcov/rcovtask'
And Rakefile has 'test/**/test_*.rb' for the Rake::TestTask pattern
And Rakefile has 'test/**/test_*.rb' for the Rcov::RcovTask pattern
And Rakefile has 'test' in the Rcov::RcovTask libs
And Rakefile has "test" as the default task

Scenario: micronaut
When I generate a micronaut project named 'the-perfect-gem' that is 'zomg, so good'

Then 'Rakefile' requires 'micronaut/rake_task'
And Rakefile has 'examples/**/*_example.rb' for the Micronaut::RakeTask pattern
And Rakefile has "examples" as the default task

Scenario: testunit
When I generate a testunit project named 'the-perfect-gem' that is 'zomg, so good'

Then 'Rakefile' requires 'rcov/rcovtask'
Then Rakefile has 'test/**/test_*.rb' for the Rake::TestTask pattern
And Rakefile has 'test/**/test_*.rb' for the Rcov::RcovTask pattern
And Rakefile has 'test' in the Rcov::RcovTask libs
And Rakefile has '--exclude "gems/*"' in the Rcov::RcovTask rcov_opts
And Rakefile has "test" as the default task

Scenario: no cucumber
Given I do not want cucumber stories
When I generate a testunit project named 'the-perfect-gem' that is 'zomg, so good'
Then Rakefile does not require 'cucumber/rake/task'
And Rakefile does not instantiate a Cucumber::Rake::Task

Scenario: cucumber
Given I want cucumber stories
When I generate a testunit project named 'the-perfect-gem' that is 'zomg, so good'
Then Rakefile requires 'cucumber/rake/task'
And Rakefile instantiates a Cucumber::Rake::Task

Scenario: no reek
Given I do not want reek
When I generate a testunit project named 'the-perfect-gem' that is 'zomg, so good'
Then Rakefile does not require 'reek/rake/task'
And Rakefile does not instantiate a Reek::Rake::Task

Scenario: reek
Given I want reek
When I generate a testunit project named 'the-perfect-gem' that is 'zomg, so good'
Then Rakefile requires 'reek/rake/task'
And Rakefile instantiates a Reek::Rake::Task

Scenario: no roodi
Given I do not want roodi
When I generate a testunit project named 'the-perfect-gem' that is 'zomg, so good'
Then Rakefile does not require 'roodi'
And Rakefile does not require 'roodi_task'
And Rakefile does not instantiate a RoodiTask

Scenario: roodi
Given I want roodi
When I generate a testunit project named 'the-perfect-gem' that is 'zomg, so good'
Then Rakefile requires 'roodi'
And Rakefile requires 'roodi_task'
And Rakefile instantiates a RoodiTask

Scenario: no rubyforge
Given I do not want rubyforge setup
When I generate a testunit project named 'the-perfect-gem' that is 'zomg, so good'
Then Rakefile does not instantiate a Jeweler::RubyforgeTasks

Scenario: yard
Given I want to use yard instead of rdoc
When I generate a testunit project named 'the-perfect-gem' that is 'zomg, so good'

Then 'Rakefile' does not require 'rdoc/task'
And 'Rakefile' requires 'yard'
And Rakefile instantiates a YARD::Rake::YardocTask

Scenario: rdoc
Given I want to use rdoc instead of yard
When I generate a testunit project named 'the-perfect-gem' that is 'zomg, so good'

Then 'Rakefile' does not require 'yard'
And 'Rakefile' requires 'rdoc/task'
And Rakefile does not instantiate a YARD::Rake::YardocTask
And Rakefile instantiates a Rake::RDocTask.new

Scenario: shindo
When I generate a shindo project named 'the-perfect-gem' that is 'zomg, so good'
And 'Rakefile' requires 'shindo/rake'
And Rakefile instantiates a Shindo::Rake.new
And Rakefile has "tests" as the default task


Scenario: bundler
Given I want bundler
When I generate a project named 'the-perfect-gem' that is 'zomg, so good' and described as 'Descriptive'
Then 'Rakefile' requires 'bundler'
And 'Rakefile' sets up bundler using the default and development groups
And Rakefile does not add 'jeweler' as a development dependency to Jeweler::Tasks

Scenario: no bundler
Given I do not want bundler
When I generate a project named 'the-perfect-gem' that is 'zomg, so good' and described as 'Descriptive'
Then 'Rakefile' does not require 'bundler'
And 'Rakefile' does not setup bundler
And Rakefile adds 'jeweler' as a development dependency to Jeweler::Tasks