mirror of
https://github.com/TracksApp/tracks.git
synced 2025-09-21 21:40:48 +02:00
add cucumber for integration testing and add a feature for statistics
refactor some stuff to support testing statistisc
This commit is contained in:
parent
058079a0a7
commit
43440eaf33
11 changed files with 286 additions and 5 deletions
|
@ -8,12 +8,11 @@ Of those <%= @contexts.count(:conditions => ["hide = ?", false])%> are visible c
|
|||
<%= @contexts.count(:conditions => ["hide = ?", true]) %> are hidden contexts
|
||||
|
||||
<% unless @actions.empty? -%>
|
||||
<p>You have <%= @actions.count(:conditions => "completed_at IS NULL") %> incomplete actions of which
|
||||
<%= @actions.count(:conditions => "completed_at IS NULL AND NOT show_from IS NULL") %> are
|
||||
deferred actions. </p>
|
||||
<p>You have <%= @actions.count(:conditions => "completed_at IS NULL") %> incomplete actions
|
||||
of which <%= @actions.count(:conditions => "completed_at IS NULL AND NOT show_from IS NULL") %> are deferred actions. </p>
|
||||
|
||||
<p>Since your first action on <%= format_date(@first_action.created_at) %> you have
|
||||
a total of <%= @actions.count %> actions.
|
||||
<p>Since your first action on <%= format_date(@first_action.created_at) %>
|
||||
you have a total of <%= @actions.count %> actions.
|
||||
<%= @actions.count(:conditions => "NOT completed_at IS NULL") %> of these are completed.
|
||||
|
||||
<p>You have <%= @tags_count-%> tags placed on actions. Of those tags,
|
||||
|
|
|
@ -65,6 +65,7 @@ ActionController::Routing::Routes.draw do |map|
|
|||
|
||||
map.preferences 'preferences', :controller => 'preferences', :action => 'index'
|
||||
map.integrations 'integrations', :controller => 'integrations', :action => 'index'
|
||||
map.stats 'stats', :controller => 'stats', :action => 'index'
|
||||
map.search_plugin '/integrations/search_plugin.xml', :controller => 'integrations', :action => 'search_plugin', :format => 'xml'
|
||||
|
||||
map.resources :recurring_todos,
|
||||
|
|
59
features/show_statistics.feature
Normal file
59
features/show_statistics.feature
Normal file
|
@ -0,0 +1,59 @@
|
|||
Feature Show statistics
|
||||
In order to see what I have got done
|
||||
As an user
|
||||
I want see my statistic
|
||||
|
||||
Scenario: Show statistics with no history
|
||||
Given I am logged in
|
||||
And I have no todos
|
||||
When I go to the statistics page
|
||||
Then I should see "Totals"
|
||||
And I should see " More statistics will appear here once you have added some actions."
|
||||
|
||||
Scenario: Show statistics with history
|
||||
Given I am logged in
|
||||
And I have 5 todos
|
||||
And I have 2 deferred todos
|
||||
And I have 2 completed todos
|
||||
When I go to the statistics page
|
||||
And I should see "You have 7 incomplete actions"
|
||||
And I should see "of which 2 are deferred actions"
|
||||
And I should see "you have a total of 9 actions"
|
||||
And I should see "2 of these are completed"
|
||||
Then I should see "Totals"
|
||||
And I should see "Actions"
|
||||
And I should see "Contexts"
|
||||
And I should see "Projects"
|
||||
And I should see "Tags"
|
||||
|
||||
Scenario: Click through to see chart of all actions per month
|
||||
Given I am logged in
|
||||
And I have 5 todos
|
||||
When I go to the statistics page
|
||||
And I click on the chart for actions done in the last 12 months
|
||||
Then I should see a chart
|
||||
And I should see "to return to the statistics page"
|
||||
|
||||
Scenario: Click through to see all incomplete actions of a week
|
||||
Given I am logged in
|
||||
And I have 5 todos
|
||||
And I have 2 deferred todos
|
||||
When I go to the statistics page
|
||||
And I click on the chart for running time of all incomplete actions
|
||||
Then I should see a chart
|
||||
And I should see "Actions selected from week"
|
||||
And I should see 7 todos
|
||||
And I should see "to return to the statistics page"
|
||||
And I should see "to show the actions from week 0 and further"
|
||||
|
||||
Scenario: Click through to see all incomplete visible actions of a week
|
||||
Given I am logged in
|
||||
And I have 5 todos
|
||||
And I have 3 deferred todos
|
||||
When I go to the statistics page
|
||||
And I click on the chart for running time of all incomplete actions
|
||||
Then I should see a chart
|
||||
And I should see "Actions selected from week"
|
||||
And I should see 5 todos
|
||||
And I should see "to return to the statistics page"
|
||||
And I should see "to show the actions from week 0 and further"
|
9
features/step_definitions/login_steps.rb
Normal file
9
features/step_definitions/login_steps.rb
Normal file
|
@ -0,0 +1,9 @@
|
|||
Given /^I am logged in$/ do
|
||||
@current_user = User.create!(:login => "testuser", :password => "secret", :password_confirmation => "secret")
|
||||
@current_user.create_preference
|
||||
visit login_path
|
||||
fill_in "login", :with => "testuser"
|
||||
fill_in "password", :with => "secret"
|
||||
click_button "Sign in"
|
||||
response.body.should =~ /Login successful/m
|
||||
end
|
13
features/step_definitions/stats_steps.rb
Normal file
13
features/step_definitions/stats_steps.rb
Normal file
|
@ -0,0 +1,13 @@
|
|||
When /^I click on the chart for actions done in the last 12 months$/ do
|
||||
# cannot really click the chart which is a swf
|
||||
visit stats_path + "/actions_done_last_years"
|
||||
end
|
||||
|
||||
Then /^I should see a chart$/ do
|
||||
response.body.should =~ /open-flash-chart/m
|
||||
end
|
||||
|
||||
When /^I click on the chart for running time of all incomplete actions$/ do
|
||||
# cannot really click the chart which is a swf
|
||||
visit stats_path + "/show_selected_actions_from_chart/art?index=0"
|
||||
end
|
31
features/step_definitions/todo_steps.rb
Normal file
31
features/step_definitions/todo_steps.rb
Normal file
|
@ -0,0 +1,31 @@
|
|||
Given /^I have no todos$/ do
|
||||
Todo.delete_all
|
||||
end
|
||||
|
||||
Given /^I have ([0-9]+) todos$/ do |count|
|
||||
context = @current_user.contexts.create!(:name => "context A")
|
||||
count.to_i.downto 1 do |i|
|
||||
@current_user.todos.create!(:context_id => context.id, :description => "todo #{i}")
|
||||
end
|
||||
end
|
||||
|
||||
Given /^I have ([0-9]+) deferred todos$/ do |count|
|
||||
context = @current_user.contexts.create!(:name => "context B")
|
||||
count.to_i.downto 1 do |i|
|
||||
@current_user.todos.create!(:context_id => context.id, :description => "todo #{i}", :show_from => @current_user.time + 1.week)
|
||||
end
|
||||
end
|
||||
|
||||
Given /^I have ([0-9]+) completed todos$/ do |count|
|
||||
context = @current_user.contexts.create!(:name => "context C")
|
||||
count.to_i.downto 1 do |i|
|
||||
todo = @current_user.todos.create!(:context_id => context.id, :description => "todo #{i}")
|
||||
todo.complete!
|
||||
end
|
||||
end
|
||||
|
||||
Then /^I should see ([0-9]+) todos$/ do |count|
|
||||
count.to_i.downto 1 do |i|
|
||||
match_xpath "div["
|
||||
end
|
||||
end
|
107
features/step_definitions/webrat_steps.rb
Normal file
107
features/step_definitions/webrat_steps.rb
Normal file
|
@ -0,0 +1,107 @@
|
|||
require File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "paths"))
|
||||
|
||||
# Commonly used webrat steps
|
||||
# http://github.com/brynary/webrat
|
||||
|
||||
Given /^I am on (.+)$/ do |page_name|
|
||||
visit path_to(page_name)
|
||||
end
|
||||
|
||||
When /^I go to (.+)$/ do |page_name|
|
||||
visit path_to(page_name)
|
||||
end
|
||||
|
||||
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 %><br />
|
||||
# <%= f.datetime_select :preferred %>
|
||||
# <%= f.label :alternative %><br />
|
||||
# <%= 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 conjunction 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 conjunction 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.should contain(text)
|
||||
end
|
||||
|
||||
Then /^I should not see "([^\"]*)"$/ do |text|
|
||||
response.should_not contain(text)
|
||||
end
|
||||
|
||||
Then /^the "([^\"]*)" checkbox should be checked$/ do |label|
|
||||
field_labeled(label).should be_checked
|
||||
end
|
||||
|
||||
Then /^I should be on (.+)$/ do |page_name|
|
||||
URI.parse(current_url).path.should == path_to(page_name)
|
||||
end
|
17
features/support/env.rb
Normal file
17
features/support/env.rb
Normal file
|
@ -0,0 +1,17 @@
|
|||
# Sets up the Rails environment for Cucumber
|
||||
ENV["RAILS_ENV"] ||= "test"
|
||||
require File.expand_path(File.dirname(__FILE__) + '/../../config/environment')
|
||||
require 'cucumber/rails/world'
|
||||
require 'cucumber/formatter/unicode' # Comment out this line if you don't want Cucumber Unicode support
|
||||
Cucumber::Rails.use_transactional_fixtures
|
||||
Cucumber::Rails.bypass_rescue # Comment out this line if you want Rails own error handling
|
||||
# (e.g. rescue_action_in_public / rescue_responses / rescue_from)
|
||||
|
||||
require 'webrat'
|
||||
|
||||
Webrat.configure do |config|
|
||||
config.mode = :rails
|
||||
end
|
||||
|
||||
require 'cucumber/rails/rspec'
|
||||
require 'webrat/core/matchers'
|
22
features/support/paths.rb
Normal file
22
features/support/paths.rb
Normal file
|
@ -0,0 +1,22 @@
|
|||
module NavigationHelpers
|
||||
def path_to(page_name)
|
||||
case page_name
|
||||
|
||||
when /the homepage/
|
||||
root_path
|
||||
when /the statistics page/
|
||||
stats_path
|
||||
|
||||
# Add more page name => path mappings here
|
||||
|
||||
else
|
||||
raise "Can't find mapping from \"#{page_name}\" to a path.\n" +
|
||||
"Now, go and add a mapping in features/support/paths.rb"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
World do |world|
|
||||
world.extend NavigationHelpers
|
||||
world
|
||||
end
|
15
lib/tasks/cucumber.rake
Normal file
15
lib/tasks/cucumber.rake
Normal file
|
@ -0,0 +1,15 @@
|
|||
$LOAD_PATH.unshift(RAILS_ROOT + '/vendor/plugins/cucumber/lib') if File.directory?(RAILS_ROOT + '/vendor/plugins/cucumber/lib')
|
||||
|
||||
begin
|
||||
require 'cucumber/rake/task'
|
||||
|
||||
Cucumber::Rake::Task.new(:features) do |t|
|
||||
t.cucumber_opts = "--format pretty"
|
||||
end
|
||||
task :features => 'db:test:prepare'
|
||||
rescue LoadError
|
||||
desc 'Cucumber rake task not available'
|
||||
task :features do
|
||||
abort 'Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin'
|
||||
end
|
||||
end
|
8
script/cucumber
Normal file
8
script/cucumber
Normal file
|
@ -0,0 +1,8 @@
|
|||
#!/usr/bin/env ruby
|
||||
begin
|
||||
load File.expand_path(File.dirname(__FILE__) + "/../vendor/plugins/cucumber/bin/cucumber")
|
||||
rescue LoadError => e
|
||||
raise unless e.to_s =~ /cucumber/
|
||||
require "rubygems"
|
||||
load File.join(Gem.bindir, "cucumber")
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue