diff --git a/features/step_definitions/webrat_steps.rb b/features/step_definitions/webrat_steps.rb
new file mode 100644
index 0000000..a32841c
--- /dev/null
+++ b/features/step_definitions/webrat_steps.rb
@@ -0,0 +1,93 @@
+# Commonly used webrat steps
+# http://github.com/brynary/webrat
+
+When /^I press "(.*)"$/ do |button|
+ click_button(button)
+end
+
+When /^I follow "(.*)"$/ do |link|
+ click_link(link)
+end
+
+When /^I fill in "(.*)" with "(.*)"$/ do |field, value|
+ fill_in(field, :with => value)
+end
+
+When /^I select "(.*)" from "(.*)"$/ do |value, field|
+ select(value, :from => field)
+end
+
+# Use this step in conjunction with Rail's datetime_select helper. For example:
+# When I select "December 25, 2008 10:00" as the date and time
+When /^I select "(.*)" as the date and time$/ do |time|
+ select_datetime(time)
+end
+
+# Use this step when using multiple datetime_select helpers on a page or
+# you want to specify which datetime to select. Given the following view:
+# <%= f.label :preferred %>
+# <%= f.datetime_select :preferred %>
+# <%= f.label :alternative %>
+# <%= f.datetime_select :alternative %>
+# The following steps would fill out the form:
+# When I select "November 23, 2004 11:20" as the "Preferred" data and time
+# And I select "November 25, 2004 10:30" as the "Alternative" data and time
+When /^I select "(.*)" as the "(.*)" date and time$/ do |datetime, datetime_label|
+ select_datetime(datetime, :from => datetime_label)
+end
+
+# Use this step in conjuction with Rail's time_select helper. For example:
+# When I select "2:20PM" as the time
+# Note: Rail's default time helper provides 24-hour time-- not 12 hour time. Webrat
+# will convert the 2:20PM to 14:20 and then select it.
+When /^I select "(.*)" as the time$/ do |time|
+ select_time(time)
+end
+
+# Use this step when using multiple time_select helpers on a page or you want to
+# specify the name of the time on the form. For example:
+# When I select "7:30AM" as the "Gym" time
+When /^I select "(.*)" as the "(.*)" time$/ do |time, time_label|
+ select_time(time, :from => time_label)
+end
+
+# Use this step in conjuction with Rail's date_select helper. For example:
+# When I select "February 20, 1981" as the date
+When /^I select "(.*)" as the date$/ do |date|
+ select_date(date)
+end
+
+# Use this step when using multiple date_select helpers on one page or
+# you want to specify the name of the date on the form. For example:
+# When I select "April 26, 1982" as the "Date of Birth" date
+When /^I select "(.*)" as the "(.*)" date$/ do |date, date_label|
+ select_date(date, :from => date_label)
+end
+
+When /^I check "(.*)"$/ do |field|
+ check(field)
+end
+
+When /^I uncheck "(.*)"$/ do |field|
+ uncheck(field)
+end
+
+When /^I choose "(.*)"$/ do |field|
+ choose(field)
+end
+
+When /^I attach the file at "(.*)" to "(.*)" $/ do |path, field|
+ attach_file(field, path)
+end
+
+Then /^I should see "(.*)"$/ do |text|
+ response.body.should =~ /#{text}/m
+end
+
+Then /^I should not see "(.*)"$/ do |text|
+ response.body.should_not =~ /#{text}/m
+end
+
+Then /^the "(.*)" checkbox should be checked$/ do |label|
+ field_labeled(label).should be_checked
+end
diff --git a/features/support/env.rb b/features/support/env.rb
new file mode 100644
index 0000000..f698c55
--- /dev/null
+++ b/features/support/env.rb
@@ -0,0 +1,22 @@
+# Sets up the Rails environment for Cucumber
+ENV["RAILS_ENV"] = "test"
+require File.expand_path(File.dirname(__FILE__) + '/../../../../../config/environment')
+require 'cucumber/rails/world'
+Cucumber::Rails.use_transactional_fixtures
+
+require 'webrat/rails'
+
+# Comment out the next two lines if you're not using RSpec's matchers (should / should_not) in your steps.
+require 'cucumber/rails/rspec'
+require 'webrat/rspec-rails'
+
+require 'ruby-debug'
+
+# require the entire app if we're running under coverage testing,
+# so we measure 0% covered files in the report
+#
+# http://www.pervasivecode.com/blog/2008/05/16/making-rcov-measure-your-whole-rails-app-even-if-tests-miss-entire-source-files/
+if defined?(Rcov)
+ all_app_files = Dir.glob('{app,lib}/**/*.rb')
+ all_app_files.each{|rb| require rb}
+end
diff --git a/spec/controllers/empty b/spec/controllers/empty
new file mode 100644
index 0000000..e69de29
diff --git a/spec/rcov.opts b/spec/rcov.opts
new file mode 100644
index 0000000..e69de29
diff --git a/spec/sanity_spec.rb b/spec/sanity_spec.rb
new file mode 100644
index 0000000..6de6672
--- /dev/null
+++ b/spec/sanity_spec.rb
@@ -0,0 +1,7 @@
+require File.dirname(__FILE__) + '/spec_helper'
+
+describe Class do
+ it "should be a class of Class" do
+ Class.class.should eql(Class)
+ end
+end
diff --git a/spec/spec.opts b/spec/spec.opts
new file mode 100644
index 0000000..2144705
--- /dev/null
+++ b/spec/spec.opts
@@ -0,0 +1,7 @@
+--colour
+--format
+progress
+--loadby
+mtime
+--reverse
+--backtrace
\ No newline at end of file
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
new file mode 100644
index 0000000..5ff55df
--- /dev/null
+++ b/spec/spec_helper.rb
@@ -0,0 +1,81 @@
+# This file is copied to ~/spec when you run 'ruby script/generate rspec'
+# from the project root directory.
+ENV["RAILS_ENV"] = "test"
+require File.expand_path(File.dirname(__FILE__) + "/../../../../config/environment")
+require 'spec'
+require 'spec/rails'
+require 'ruby-debug'
+
+Spec::Runner.configure do |config|
+ # If you're not using ActiveRecord you should remove these
+ # lines, delete config/database.yml and disable :active_record
+ # in your config/boot.rb
+ config.use_transactional_fixtures = true
+ config.use_instantiated_fixtures = false
+ config.fixture_path = RAILS_ROOT + '/spec/fixtures/'
+
+ # == Fixtures
+ #
+ # You can declare fixtures for each example_group like this:
+ # describe "...." do
+ # fixtures :table_a, :table_b
+ #
+ # Alternatively, if you prefer to declare them only once, you can
+ # do so right here. Just uncomment the next line and replace the fixture
+ # names with your fixtures.
+ #
+ # config.global_fixtures = :table_a, :table_b
+ #
+ # If you declare global fixtures, be aware that they will be declared
+ # for all of your examples, even those that don't use them.
+ #
+ # == Mock Framework
+ #
+ # RSpec uses it's own mocking framework by default. If you prefer to
+ # use mocha, flexmock or RR, uncomment the appropriate line:
+ #
+ # config.mock_with :mocha
+ # config.mock_with :flexmock
+ # config.mock_with :rr
+end
+
+# require the entire app if we're running under coverage testing,
+# so we measure 0% covered files in the report
+#
+# http://www.pervasivecode.com/blog/2008/05/16/making-rcov-measure-your-whole-rails-app-even-if-tests-miss-entire-source-files/
+if defined?(Rcov)
+ all_app_files = Dir.glob('{app,lib}/**/*.rb')
+ all_app_files.each{|rb| require rb}
+end
+
+
+module AssociationMatcher
+ class Association
+ def initialize(field, association_type)
+ @field = field
+ @association_type = association_type
+ end
+
+ def matches?(model)
+ @model=model
+ association = @model.reflect_on_association(@field)
+ return false if association.nil?
+
+ return association.name == @field && association.macro == @association_type
+ end
+
+ def failure_message
+ "expected <#{@model.name}> to have a #{@association_type} association for #{@field}"
+ end
+
+ def negative_failure_message
+ "expected <#{@model.name}> to not have a #{@association_type} association for #{@field} but one was found"
+ end
+ end
+
+ def have_association(field, association_type)
+ Association.new(field, association_type)
+ end
+end
+
+include AssociationMatcher
diff --git a/spec/views/empty b/spec/views/empty
new file mode 100644
index 0000000..e69de29