mirror of
https://github.com/TracksApp/tracks.git
synced 2025-12-16 15:20:13 +01:00
fix #1230 by adding a scenario that uses the command line script to add todos to Tracks like a template
This commit is contained in:
parent
b90e34bd53
commit
50741162af
7 changed files with 116 additions and 53 deletions
1
Gemfile
1
Gemfile
|
|
@ -54,6 +54,7 @@ group :test do
|
|||
gem "selenium-webdriver" # Note that > 2.14 has problems: https://code.google.com/p/selenium/issues/detail?id=3075
|
||||
gem "database_cleaner", ">=0.5.0"
|
||||
gem "cucumber-rails", "~>0.3.2"
|
||||
gem "aruba"
|
||||
|
||||
# uncomment to use the webkit option. This depends on Qt to be installed
|
||||
#gem "capybara-webkit"
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ GEM
|
|||
activesupport (= 2.3.14)
|
||||
activesupport (2.3.14)
|
||||
acts_as_list (0.1.4)
|
||||
aruba (0.2.2)
|
||||
bcrypt-ruby (2.1.4)
|
||||
builder (3.0.0)
|
||||
capybara (1.1.2)
|
||||
|
|
@ -132,6 +133,7 @@ DEPENDENCIES
|
|||
ZenTest (>= 4.0.0)
|
||||
aasm (~> 2.2.0)
|
||||
acts_as_list (~> 0.1.4)
|
||||
aruba
|
||||
bcrypt-ruby (~> 2.1.4)
|
||||
capybara (>= 0.3.5)
|
||||
cucumber-rails (~> 0.3.2)
|
||||
|
|
|
|||
37
features/make_project_from_template.feature
Normal file
37
features/make_project_from_template.feature
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
Feature: Create project from template
|
||||
In order to be able to create a project from a template
|
||||
As a user this installed Tracks with console access
|
||||
I want to run the script to add projects and actions from a template
|
||||
|
||||
These scenario's need selenium so that there is a Tracks server running
|
||||
to use from the command line script
|
||||
|
||||
Background:
|
||||
Given the following user records
|
||||
| login | password | is_admin |
|
||||
| testuser | secret | false |
|
||||
| admin | secret | true |
|
||||
And I have logged in as "testuser" with password "secret"
|
||||
And I have a context called "Context A"
|
||||
|
||||
@javascript
|
||||
Scenario: Create a project with one task
|
||||
Given a template that looks like
|
||||
"""
|
||||
My first project
|
||||
.My first task in this project
|
||||
"""
|
||||
When I execute the script
|
||||
Then I should have a project called "My first project"
|
||||
And I should have 1 todo in project "My first project"
|
||||
|
||||
@javascript
|
||||
Scenario: Create a project with dependent tasks
|
||||
Given a template that looks like
|
||||
"""
|
||||
My first project
|
||||
.Todo
|
||||
^Dependent
|
||||
"""
|
||||
When I execute the script
|
||||
Then the successors of "Todo" should include "Dependent"
|
||||
|
|
@ -130,29 +130,6 @@ When /^I edit the default context to "([^"]*)"$/ do |default_context|
|
|||
end
|
||||
end
|
||||
|
||||
Then /^I should (see|not see) empty message for (todos|deferred todos|completed todos) of project/ do |visible, state|
|
||||
case state
|
||||
when "todos"
|
||||
css = "div#p#{@project.id}empty-nd"
|
||||
when "deferred todos"
|
||||
css = "div#tickler-empty-nd"
|
||||
when "completed todos"
|
||||
css = "div#empty-d"
|
||||
else
|
||||
css = "wrong state"
|
||||
end
|
||||
|
||||
elem = find(css)
|
||||
elem.should_not be_nil
|
||||
elem.send(visible=="see" ? "should" : "should_not", be_visible)
|
||||
end
|
||||
|
||||
Then /^I edit the default tags to "([^"]*)"$/ do |default_tags|
|
||||
edit_project(@project) do
|
||||
fill_in "project[default_tags]", :with => default_tags
|
||||
end
|
||||
end
|
||||
|
||||
When /^I edit the project name of "([^"]*)" to "([^"]*)"$/ do |project_current_name, project_new_name|
|
||||
@project = @current_user.projects.find_by_name(project_current_name)
|
||||
@project.should_not be_nil
|
||||
|
|
@ -175,12 +152,6 @@ When /^I click to edit the project name in place$/ do
|
|||
page.find("div#project_name").click
|
||||
end
|
||||
|
||||
Then /^I should be able to change the project name in place$/ do
|
||||
#Note that this is not changing the project name
|
||||
page.should have_css("div#project_name>form>input")
|
||||
page.find("div#project_name > form > button[type=cancel]").click
|
||||
end
|
||||
|
||||
When /^I edit the project settings$/ do
|
||||
@project.should_not be_nil
|
||||
|
||||
|
|
@ -188,10 +159,6 @@ When /^I edit the project settings$/ do
|
|||
page.should have_xpath("//div[@id='edit_project_#{@project.id}']/form//button[@id='submit_project_#{@project.id}']")
|
||||
end
|
||||
|
||||
Then /^I should not be able to change the project name in place$/ do
|
||||
step "I click to edit the project name in place"
|
||||
page.should_not have_xpath("//div[@id='project_name']/form/input")
|
||||
end
|
||||
|
||||
When /^I close the project settings$/ do
|
||||
@project.should_not be_nil
|
||||
|
|
@ -229,6 +196,40 @@ When /^I cancel adding a note to the project$/ do
|
|||
click_link "neg_edit_form_note"
|
||||
end
|
||||
|
||||
Then /^I should (see|not see) empty message for (todos|deferred todos|completed todos) of project/ do |visible, state|
|
||||
case state
|
||||
when "todos"
|
||||
css = "div#p#{@project.id}empty-nd"
|
||||
when "deferred todos"
|
||||
css = "div#tickler-empty-nd"
|
||||
when "completed todos"
|
||||
css = "div#empty-d"
|
||||
else
|
||||
css = "wrong state"
|
||||
end
|
||||
|
||||
elem = find(css)
|
||||
elem.should_not be_nil
|
||||
elem.send(visible=="see" ? "should" : "should_not", be_visible)
|
||||
end
|
||||
|
||||
Then /^I edit the default tags to "([^"]*)"$/ do |default_tags|
|
||||
edit_project(@project) do
|
||||
fill_in "project[default_tags]", :with => default_tags
|
||||
end
|
||||
end
|
||||
|
||||
Then /^I should be able to change the project name in place$/ do
|
||||
#Note that this is not changing the project name
|
||||
page.should have_css("div#project_name>form>input")
|
||||
page.find("div#project_name > form > button[type=cancel]").click
|
||||
end
|
||||
|
||||
Then /^I should not be able to change the project name in place$/ do
|
||||
step "I click to edit the project name in place"
|
||||
page.should_not have_xpath("//div[@id='project_name']/form/input")
|
||||
end
|
||||
|
||||
Then /^the form for adding a note should not be visible$/ do
|
||||
page.should_not have_css("edit_form_note")
|
||||
end
|
||||
|
|
@ -279,4 +280,15 @@ Then /^I should (see|not see) the default project settings$/ do |visible|
|
|||
else
|
||||
elem.should_not be_visible
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Then /^I should have a project called "([^"]*)"$/ do |project_name|
|
||||
project = @current_user.projects.find_by_name(project_name)
|
||||
project.should_not be_nil
|
||||
end
|
||||
|
||||
Then /^I should have (\d+) todo in project "([^"]*)"$/ do |todo_count, project_name|
|
||||
project = @current_user.projects.find_by_name(project_name)
|
||||
project.should_not be_nil
|
||||
project.todos.count.should == todo_count.to_i
|
||||
end
|
||||
|
|
|
|||
29
features/step_definitions/template_steps.rb
Normal file
29
features/step_definitions/template_steps.rb
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
Given /^a template that looks like$/ do |template|
|
||||
steps %{
|
||||
Given a file named "template.txt" with:
|
||||
"""
|
||||
#{template}
|
||||
"""
|
||||
}
|
||||
end
|
||||
|
||||
When /^I execute the script$/ do
|
||||
step "I cd to \"../..\""
|
||||
|
||||
context_id = @current_user.contexts.first.id
|
||||
|
||||
# assumes there is a context with id=1
|
||||
cli = "ruby doc/tracks_template_cli.rb -c #{context_id} -f tmp/aruba/template.txt"
|
||||
login = "GTD_LOGIN=testuser"
|
||||
pass = "GTD_PASSWORD=secret"
|
||||
port = Capybara.current_session.driver.rack_server.port
|
||||
gtd_todos_url = "GTD_TODOS_URL=http://localhost:#{port}/todos.xml"
|
||||
gtd_projects_url = "GTD_PROJECTS_URL=http://localhost:#{port}/projects.xml"
|
||||
gtd_context_url_prefix = "GTD_CONTEXT_URL_PREFIX=http://localhost:#{port}/contexts/"
|
||||
gtd_context_url = "GTD_CONTEXT_URL=http://localhost:#{port}/contexts.xml"
|
||||
|
||||
command = "#{gtd_todos_url} #{gtd_projects_url} #{gtd_context_url_prefix} #{gtd_context_url} #{login} #{pass} #{cli}"
|
||||
|
||||
step "I run \"#{command}\""
|
||||
# puts "output = #{combined_output}"
|
||||
end
|
||||
|
|
@ -12,6 +12,7 @@ require 'cucumber/rails/rspec'
|
|||
require 'cucumber/rails/world'
|
||||
require 'cucumber/rails/active_record'
|
||||
require 'cucumber/web/tableish'
|
||||
require 'aruba/cucumber'
|
||||
|
||||
require 'capybara/rails'
|
||||
require 'capybara/cucumber'
|
||||
|
|
|
|||
|
|
@ -1,19 +0,0 @@
|
|||
if ENV["RAILS_ENV"] == "selenium"
|
||||
puts "Configuring to use Selenium with Webrat for Cucumber stories"
|
||||
Webrat.configure do |config|
|
||||
config.mode = :selenium
|
||||
|
||||
config.application_environment = :selenium
|
||||
# use only if you run a separate rails test server instance and do not
|
||||
# want webrat to start one for you
|
||||
# config.application_port = 3001
|
||||
|
||||
config.selenium_browser_startup_timeout = 30
|
||||
# use only if you run a separate selenium server instance and do not
|
||||
# want webrat to start one for you
|
||||
# config.selenium_server_address = "localhost"
|
||||
# config.selenium_server_port = "4444"
|
||||
end
|
||||
|
||||
Cucumber::Rails::World.use_transactional_fixtures = false
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue