surveyor 1.3.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/CHANGELOG.md +22 -0
  2. data/Gemfile +1 -1
  3. data/README.md +1 -1
  4. data/Rakefile +4 -1
  5. data/app/views/partials/_answer.html.haml +1 -1
  6. data/app/views/partials/_section_menu.html.haml +8 -1
  7. data/app/views/surveyor/edit.html.haml +1 -1
  8. data/app/views/surveyor/new.html.haml +1 -1
  9. data/app/views/surveyor/show.html.haml +17 -20
  10. data/ci-exec.sh +1 -1
  11. data/config/routes.rb +7 -7
  12. data/features/internationalization.feature +68 -2
  13. data/features/show_survey.feature +29 -0
  14. data/features/step_definitions/parser_steps.rb +15 -0
  15. data/features/step_definitions/surveyor_steps.rb +11 -9
  16. data/features/support/paths.rb +5 -2
  17. data/features/z_redcap_parser.feature +4 -1
  18. data/lib/assets/javascripts/surveyor/jquery.surveyor.js +5 -1
  19. data/lib/assets/stylesheets/surveyor.sass +2 -0
  20. data/lib/generators/surveyor/install_generator.rb +4 -0
  21. data/lib/generators/surveyor/templates/app/controllers/surveyor_controller.rb +2 -2
  22. data/lib/generators/surveyor/templates/config/locales/surveyor_en.yml +1 -0
  23. data/lib/generators/surveyor/templates/config/locales/surveyor_es.yml +1 -0
  24. data/lib/generators/surveyor/templates/config/locales/surveyor_he.yml +1 -0
  25. data/lib/generators/surveyor/templates/config/locales/surveyor_ko.yml +2 -1
  26. data/lib/generators/surveyor/templates/surveys/languages.rb +9 -5
  27. data/lib/generators/surveyor/templates/surveys/translations/languages.es.yml +4 -0
  28. data/lib/generators/surveyor/templates/surveys/translations/languages.he.yml +4 -0
  29. data/lib/generators/surveyor/templates/surveys/translations/languages.ko.yml +4 -0
  30. data/lib/surveyor/helpers/surveyor_helper_methods.rb +1 -1
  31. data/lib/surveyor/models/answer_methods.rb +2 -2
  32. data/lib/surveyor/models/question_methods.rb +3 -3
  33. data/lib/surveyor/models/response_methods.rb +18 -5
  34. data/lib/surveyor/models/response_set_methods.rb +1 -1
  35. data/lib/surveyor/models/survey_methods.rb +2 -2
  36. data/lib/surveyor/models/survey_section_methods.rb +2 -2
  37. data/lib/surveyor/parser.rb +25 -4
  38. data/lib/surveyor/redcap_parser.rb +13 -13
  39. data/lib/surveyor/surveyor_controller_methods.rb +22 -19
  40. data/lib/surveyor/version.rb +1 -1
  41. data/lib/tasks/surveyor_tasks.rake +1 -1
  42. data/spec/controllers/surveyor_controller_spec.rb +155 -269
  43. data/spec/lib/parser_spec.rb +189 -21
  44. data/spec/models/response_set_spec.rb +7 -5
  45. data/spec/spec_helper.rb +3 -1
  46. data/stacktests.sh +1 -1
  47. data/surveyor.gemspec +3 -1
  48. metadata +271 -275
@@ -1,6 +1,28 @@
1
1
  History for Surveyor
2
2
  ====================
3
3
 
4
+ 1.4.0
5
+ -----
6
+ ### Features
7
+
8
+ - Routes are namespaced (e.g. `surveyor.available_surveys_path`) and may be mounted at a different root (e.g. `mount Surveyor::Engine, :at => '/instruments'`) (#398, #421)
9
+ - Surveyor::Parser.parse_file takes an options[:filename] parameter, used to locate translations (#429)
10
+ - Surveyor::Parser allows translations to be specified inline using a hash (#429)
11
+ - require locale of survey when translations are present (#426)
12
+ - locale selection in survey UI (#427)
13
+
14
+ ### Fixes
15
+
16
+ - Remove default order on Response. (#423)
17
+ - Bug fix for RedCap Parser for DependencyConditions. thanks @ariel-perez-birchbox
18
+ - Make Surveyor::Parser accept Answer#reference_identifier via underscore or hash syntax (#439)
19
+ - Fix show action and have it use new translation view methods (#438, #442) thanks @alanjcfs
20
+ - Fix times showing in UTC when time zone is specified in Rails (#435)
21
+
22
+ ### Dependencies
23
+
24
+ - Removing support for Rails 3.0. Applications requiring Rails 3.0 should use Surveyor v1.3.0
25
+
4
26
  1.3.0
5
27
  -----
6
28
 
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source :rubygems
1
+ source 'https://www.rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
data/README.md CHANGED
@@ -20,7 +20,7 @@ without maintaining a fork.
20
20
  Surveyor works with:
21
21
 
22
22
  * Ruby 1.8.7, 1.9.2, and 1.9.3
23
- * Rails 3.0-3.2
23
+ * Rails 3.1-3.2
24
24
 
25
25
  Some key dependencies are:
26
26
 
data/Rakefile CHANGED
@@ -40,7 +40,10 @@ task :testbed => 'testbed:rebuild'
40
40
  namespace :testbed do
41
41
  desc 'Generate a minimal surveyor-using rails app'
42
42
  task :generate do
43
- sh 'bundle exec rails new testbed --skip-bundle' # don't run bundle install until the Gemfile modifications
43
+ Tempfile.open('surveyor_Rakefile') do |f|
44
+ f.write("application \"config.time_zone='Rome'\"");f.flush
45
+ sh "bundle exec rails new testbed --skip-bundle -m #{f.path}" # don't run bundle install until the Gemfile modifications
46
+ end
44
47
  chdir('testbed') do
45
48
  gem_file_contents = File.read('Gemfile')
46
49
  gem_file_contents.sub!(/^(gem 'rails'.*)$/, %Q{# \\1\nplugin_root = File.expand_path('../..', __FILE__)\neval(File.read File.join(plugin_root, 'Gemfile.rails_version'))\ngem 'surveyor', :path => plugin_root})
@@ -19,7 +19,7 @@
19
19
  :as => rc_to_as(a.response_class),
20
20
  :label => a.text_for(:pre, @render_context, I18n.locale).blank? ? false : a.text_for(:pre, @render_context, I18n.locale),
21
21
  :hint => a.text_for(:post, @render_context, I18n.locale),
22
- :input_html => generate_pick_none_input_html(r.as(a.response_class), a.default_value_for(@render_context, I18n.locale), a.css_class, a.response_class, disabled, a.input_mask, a.input_mask_placeholder)
22
+ :input_html => generate_pick_none_input_html(r.to_formatted_s, a.default_value_for(@render_context, I18n.locale), a.css_class, a.response_class, disabled, a.input_mask, a.input_mask_placeholder)
23
23
  - else
24
24
  = a.text_for(nil, @render_context, I18n.locale)
25
25
  %span.help= a.help_text_for(@render_context, I18n.locale) unless g && g.display_type == "grid"
@@ -1,5 +1,12 @@
1
1
  .surveyor_menu
2
+ - if !@survey.translations.empty?
3
+ = hidden_field_tag "current_section", @section.id
4
+ .surveyor_language_selection
5
+ = label_tag "locale", t('surveyor.language')
6
+ %select{:id=>"locale", :name=>"new_locale"}
7
+ = options_for_select(@survey.translations.map(&:locale),I18n.locale)
8
+
2
9
  = t('surveyor.sections')
3
10
  %ul
4
11
  - @sections.each do |s|
5
- %li{:class => ("active" if s == @section)}= menu_button_for(s)
12
+ %li{:class => ("active" if s == @section)}= menu_button_for(s)
@@ -3,7 +3,7 @@
3
3
  .surveyor_flash
4
4
  = flash_messages(types)
5
5
  .close
6
- = semantic_form_for(@response_set, :as => :r, :url => update_my_survey_path, :html => {:method => :put, :id => "survey_form", :class => @survey.custom_class}) do |f|
6
+ = semantic_form_for(@response_set, :as => :r, :url => surveyor.update_my_survey_path, :html => {:method => :put, :id => "survey_form", :class => @survey.custom_class}) do |f|
7
7
 
8
8
  = hidden_field_tag :surveyor_javascript_enabled, false
9
9
 
@@ -9,7 +9,7 @@
9
9
  %ul
10
10
  - @surveys_by_access_code.each do |access_code, surveys|
11
11
  %li
12
- = form_tag take_survey_path(:survey_code => access_code) do
12
+ = form_tag surveyor.take_survey_path(:survey_code => access_code) do
13
13
  = hidden_field_tag :surveyor_javascript_enabled, false
14
14
  = surveys.first.translation(I18n.locale)[:title]
15
15
   
@@ -3,7 +3,7 @@
3
3
  .surveyor_flash
4
4
  = flash_messages(types)
5
5
  .close
6
- = semantic_form_for(@response_set, :as => :r, :url => update_my_survey_path, :html => {:id => "survey_form", :class => @survey.custom_class}) do |f|
6
+ = semantic_form_for(@response_set, :as => :r, :url => surveyor.update_my_survey_path, :html => {:id => "survey_form", :class => @survey.custom_class}) do |f|
7
7
  .survey_title= @survey.title
8
8
  - @survey.sections.each do |section|
9
9
  = div_for section do
@@ -22,18 +22,18 @@
22
22
  - if answered_questions.length > 0 # there are answered questions in this section or group
23
23
  - g = q.question_group
24
24
  - renderer = g.renderer
25
-
25
+
26
26
  - unless label.blank?
27
27
  = render q.custom_renderer || "/partials/question", :q => label, :f => f, :disableFlag => true
28
28
  - label = nil
29
- = f.inputs q_text(g), :id => "g_#{g.id}", :class => "g_#{renderer} #{g.css_class(@response_set)}" do
29
+ = f.inputs g.text_for(@render_context, I18n.locale), :id => "g_#{g.id}", :class => "g_#{renderer} #{g.css_class(@response_set)}" do
30
30
  %li.help= g.help_text
31
31
  - case renderer
32
32
  - when :grid
33
33
  %li
34
34
  %table
35
35
  %col.pre
36
- - group_questions.first.answers.each do |a|
36
+ - group_questions.first.answers.each do |a|
37
37
  %col{:class => cycle("odd", "even")}
38
38
  %col.post
39
39
  %tbody
@@ -41,17 +41,18 @@
41
41
  %tr
42
42
  %th  
43
43
  - ten_questions.first.answers.each do |a|
44
- %th= a_text(a)
44
+ %th
45
+ = a.text_for(nil, @render_context, I18n.locale)
46
+ %span.help= a.help_text_for(@render_context, I18n.locale)
45
47
  %th  
46
48
  - ten_questions.each_with_index do |q, j|
47
49
  %tr{:id => "q_#{q.id}", :class => "q_#{renderer} #{q.css_class(@response_set)}"}
48
- - if q.pick == "one"
49
- - r = response_for(@response_set, q, nil, g)
50
- - j = response_idx # increment the response index since the answer partial skips for q.pick == one
51
- %th= q.split(q.text, :pre)
50
+ %th
51
+ = q.text_for(:pre, @render_context, I18n.locale)
52
+ = q.help_text_for(@render_context, I18n.locale)
52
53
  - q.answers.each do |a|
53
- %td= render a.custom_renderer || '/partials/answer', :g => g, :q => q, :a => a, :f => f, :disableFlag => true
54
- %th= q.split(q.text, :post)
54
+ %td= render(a.custom_renderer || '/partials/answer', :g => g, :q => q, :a => a, :f => f, :disableFlag => true) unless q.display_type == "label"
55
+ %th= q.text_for(:post, @render_context, I18n.locale)
55
56
  - when :repeater
56
57
  - (@response_set.count_group_responses(group_questions) + 1).times do |rg|
57
58
  %li
@@ -59,19 +60,15 @@
59
60
  = render q.custom_renderer || "/partials/question", :g => g, :rg => rg, :q => q, :f => f, :disableFlag => true
60
61
  - else # :inline
61
62
  - answered_questions.each do |q|
62
- = render q.custom_renderer || "/partials/question", :g => g, :q => q, :f => f, :disableFlag => true
63
-
63
+ = render q.custom_renderer || "/partials/question", :g => g, :q => q, :f => f, :disableFlag => true
64
64
  - group_questions = []
65
65
  - answered_questions = []
66
- - else
66
+ - else
67
67
  - if q.display_type == 'label'
68
- - label = q
69
- - unless @response_set.responses.where( :question_id => q.id).empty?
70
- - unless label.blank?
71
- = render q.custom_renderer || "/partials/question", :q => label, :f => f, :disableFlag => true
72
- - label = nil
68
+ = render q.custom_renderer || "/partials/question", :q => q, :f => f, :disableFlag => true
69
+ - elsif !(@response_set.responses.where(:question_id => q.id).empty?)
73
70
  = render q.custom_renderer || "/partials/question", :q => q, :f => f, :disableFlag => true
74
71
  - answered_count = answered_count + 1
75
72
  - if (i+1 >= questions.size) and (answered_count == 0)
76
73
  #{"--- No data ---"}
77
-
74
+
data/ci-exec.sh CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/bin/bash -xe
2
2
 
3
- BUNDLER_VERSION=1.1.5
3
+ BUNDLER_VERSION=1.3.1
4
4
  GEMSET=surveyor
5
5
 
6
6
  if [ -z $CI_RUBY ]; then
@@ -1,8 +1,8 @@
1
- Rails.application.routes.draw do
2
- match 'surveys', :to => 'surveyor#new', :as => 'available_surveys', :via => :get
3
- match 'surveys/:survey_code', :to => 'surveyor#create', :as => 'take_survey', :via => :post
4
- match 'surveys/:survey_code', :to => 'surveyor#export', :as => 'export_survey', :via => :get
5
- match 'surveys/:survey_code/:response_set_code', :to => 'surveyor#show', :as => 'view_my_survey', :via => :get
6
- match 'surveys/:survey_code/:response_set_code/take', :to => 'surveyor#edit', :as => 'edit_my_survey', :via => :get
7
- match 'surveys/:survey_code/:response_set_code', :to => 'surveyor#update', :as => 'update_my_survey', :via => :put
1
+ Surveyor::Engine.routes.draw do
2
+ match '/', :to => 'surveyor#new', :as => 'available_surveys', :via => :get
3
+ match '/:survey_code', :to => 'surveyor#create', :as => 'take_survey', :via => :post
4
+ match '/:survey_code', :to => 'surveyor#export', :as => 'export_survey', :via => :get
5
+ match '/:survey_code/:response_set_code', :to => 'surveyor#show', :as => 'view_my_survey', :via => :get
6
+ match '/:survey_code/:response_set_code/take', :to => 'surveyor#edit', :as => 'edit_my_survey', :via => :get
7
+ match '/:survey_code/:response_set_code', :to => 'surveyor#update', :as => 'update_my_survey', :via => :put
8
8
  end
@@ -8,7 +8,10 @@ Feature: Internationalization
8
8
  Given I parse
9
9
  """
10
10
  survey "One language is never enough" do
11
- translations :es => "translations/languages.es.yml", :he => "translations/languages.he.yml", :ko => "translations/languages.ko.yml"
11
+ translations :en => :default
12
+ translations :es => {"title"=>"Un idioma nunca es suficiente", "survey_sections"=>{"one"=>{"title"=>"Uno"}}, "question_groups"=>{"hello"=>{"text"=>"¡Hola!"}}, "questions"=>{"name"=>{"text"=>"¿Cómo se llama Usted?", "answers"=>{"name"=>{"help_text"=>"Mi nombre es..."}}}}}
13
+ translations :he => {"title"=>"ידיעת שפה אחת אינה מספיקה", "survey_sections"=>{"one"=>{"title"=>"אחת"}}, "question_groups"=>{"hello"=>{"text"=>"שלום"}}, "questions"=>{"name"=>{"text"=>"מה שמך?", "answers"=>{"name"=>{"help_text"=>"שמי..."}}}}}
14
+ translations :ko => {"title"=>"한가지 언어로는 충분치 않습니다.", "survey_sections"=>{"one"=>{"title"=>"하나"}}, "question_groups"=>{"hello"=>{"text"=>"안녕하십니까"}}, "questions"=>{"name"=>{"text"=>"성함이 어떻게 되십니까?", "answers"=>{"name"=>{"help_text"=>"제 이름은 ... 입니다"}}}}}
12
15
  section_one "One" do
13
16
  g_hello "Hello" do
14
17
  q_name "What is your name?"
@@ -17,39 +20,102 @@ Feature: Internationalization
17
20
  end
18
21
  end
19
22
  """
20
- Then there should be 3 translations with
23
+ Then there should be 4 translations with
21
24
  | locale |
25
+ | en |
22
26
  | es |
23
27
  | he |
24
28
  | ko |
25
29
  When I start the survey
26
30
  Then I should see "One language is never enough"
31
+ And a dropdown should exist with the options "en, es, he, ko"
32
+ And I should see "One"
33
+ And I should see "Hello"
34
+ And I should see "What is your name?"
35
+ And I should see "My name is..."
36
+ When I start the survey in "en"
37
+ Then I should see "One language is never enough"
38
+ And a dropdown should exist with the options "en, es, he, ko"
27
39
  And I should see "One"
28
40
  And I should see "Hello"
29
41
  And I should see "What is your name?"
30
42
  And I should see "My name is..."
31
43
  When I start the survey in "es"
32
44
  Then I should see "Un idioma nunca es suficiente"
45
+ And a dropdown should exist with the options "en, es, he, ko"
33
46
  And I should see "Uno"
34
47
  And I should see "¡Hola!"
35
48
  And I should see "¿Cómo se llama Usted?"
36
49
  And I should see "Mi nombre es..."
37
50
  When I start the survey in "he"
38
51
  Then I should see "ידיעת שפה אחת אינה מספיקה"
52
+ And a dropdown should exist with the options "en, es, he, ko"
39
53
  And I should see "אחת"
40
54
  And I should see "שלום"
41
55
  And I should see "מה שמך?"
42
56
  And I should see "שמי..."
43
57
  When I start the survey in "ko"
44
58
  Then I should see "한가지 언어로는 충분치 않습니다."
59
+ And a dropdown should exist with the options "en, es, he, ko"
45
60
  And I should see "하나"
46
61
  And I should see "안녕하십니까"
47
62
  And I should see "성함이 어떻게 되십니까?"
48
63
  And I should see "제 이름은 ... 입니다"
49
64
  When I start the survey
50
65
  Then I should see "One language is never enough"
66
+ And a dropdown should exist with the options "en, es, he, ko"
51
67
  And I should see "One"
52
68
  And I should see "Hello"
53
69
  And I should see "What is your name?"
54
70
  And I should see "My name is..."
55
71
 
72
+
73
+ Scenario:
74
+ Given I parse
75
+ """
76
+ survey "Favorites" do
77
+ section "Foods" do
78
+ question_1 "What is the best meat?", :pick => :one, :correct => "oink"
79
+ a_oink "bacon"
80
+ a_tweet "chicken"
81
+ a_moo "beef"
82
+ end
83
+ end
84
+ """
85
+ When I start the survey
86
+ Then I should not see "Language"
87
+
88
+ @javascript
89
+ Scenario:
90
+ Given I parse
91
+ """
92
+ survey "One language is never enough" do
93
+ translations :en => :default
94
+ translations :es => {"title"=>"Un idioma nunca es suficiente", "survey_sections"=>{"one"=>{"title"=>"Uno"}, "two"=>{"title"=>"Dos"}}, "question_groups"=>{"hello"=>{"text"=>"¡Hola!"}}, "questions"=>{"name"=>{"text"=>"¿Cómo se llama Usted?", "answers"=>{"name"=>{"help_text"=>"Mi nombre es..."}}}, "color"=>{"text"=>"¿Cuál es tu color favorito?"}}}
95
+ translations :he => {"title"=>"ידיעת שפה אחת אינה מספיקה", "survey_sections"=>{"one"=>{"title"=>"אחת"}, "two"=>{"title"=>"שנים"}}, "question_groups"=>{"hello"=>{"text"=>"שלום"}}, "questions"=>{"name"=>{"text"=>"מה שמך?", "answers"=>{"name"=>{"help_text"=>"שמי..."}}}, "color"=>{"text"=>"מהו הצבע האהוב עליך?"}}}
96
+
97
+ section_one "One" do
98
+ g_hello "Hello" do
99
+ q_name "What is your name?"
100
+ a_name :string, :help_text => "My name is..."
101
+ end
102
+ end
103
+
104
+ section_two "Two" do
105
+ q_color "What is your favorite color?"
106
+ a_name :string
107
+ end
108
+ end
109
+ """
110
+ When I start the survey in "en"
111
+ Then I should see "One language is never enough"
112
+ And I should see "What is your name?"
113
+ And I should see "Language"
114
+ And a dropdown should exist with the options "en, es, he"
115
+ When I change the locale to "es"
116
+ Then I should see "Un idioma nunca es suficiente"
117
+ And I should see "¿Cómo se llama Usted?"
118
+ When I press "Dos"
119
+ Then I should see "¿Cuál es tu color favorito?"
120
+ When I change the locale to "he"
121
+ Then I should see "מהו הצבע האהוב עליך?"
@@ -37,6 +37,35 @@ Feature: showing a survey
37
37
  | orange |
38
38
  | brown |
39
39
  When I go to the last response set show page
40
+ Then I should see "You with the sad eyes don't be discouraged"
40
41
  Then the "blue" radiobutton should be checked
41
42
  And the "orange" checkbox should be checked
42
43
  And the "brown" checkbox should be checked
44
+
45
+ Scenario: Take a survey with group questions, then look at it
46
+ Given I parse
47
+ """
48
+ survey "Grid question test", :default_mandatory => false do
49
+ section 'Communication Skills' do
50
+ grid 'Identify communication and interviewing skills' do
51
+ a 'Yes'
52
+ a 'No'
53
+
54
+ q 'Able to articulate job duties and skills', :pick => :one
55
+ end
56
+
57
+ q 'Communication Skills Comments'
58
+ a :text
59
+ end
60
+ end
61
+ """
62
+ When I start the "Grid question test" survey
63
+ Then I should see "Identify communication and interviewing skills"
64
+ And I choose "Yes"
65
+ And I press "Click here to finish"
66
+ Then there should be 1 response set with 1 responses with:
67
+ | answer |
68
+ | Yes |
69
+ When I go to the last response set show page
70
+ Then I should see "Identify communication and interviewing skills"
71
+ Then the "Yes" radiobutton should be checked
@@ -88,7 +88,22 @@ end
88
88
 
89
89
  Then /^there should be (\d+) resolved dependency_condition(?:s?) with:$/ do |x, table|
90
90
  DependencyCondition.count.should == x.to_i
91
+
91
92
  table.hashes.each do |hash|
93
+ if hash.has_key?("question_reference")
94
+ question = Question.find_by_reference_identifier(hash.delete("question_reference"))
95
+ question.should_not be_nil
96
+
97
+ hash.merge!({ :question_id => question.id })
98
+
99
+ if hash.has_key?("answer_reference")
100
+ answer = Answer.find(:first, :conditions => { :question_id => question.id, :reference_identifier => hash.delete("answer_reference") })
101
+ answer.should_not be_nil
102
+
103
+ hash.merge!({ :answer_id => answer.id })
104
+ end
105
+ end
106
+
92
107
  d = DependencyCondition.find(:first, :conditions => hash)
93
108
  d.should_not be_nil
94
109
  d.question.should_not be_nil
@@ -18,10 +18,9 @@ When /^I start the survey$/ do
18
18
  end
19
19
 
20
20
  When /^I start the survey in "(.*?)"$/ do |locale|
21
- visit(available_surveys_path(:locale => locale))
22
- steps %Q{
23
- And I press "#{I18n.t 'surveyor.take_it'}"
24
- }
21
+ step %Q{I go to the surveys page in "#{locale}"}
22
+ # these steps need to be separated so the url param has a chance to set I18n.locale
23
+ step %Q{I press "#{I18n.t 'surveyor.take_it'}"}
25
24
  end
26
25
 
27
26
 
@@ -120,6 +119,7 @@ end
120
119
  Then /^there should (not )?be a (\w+ )?response(?: for answer "([^"]+)")?(?: with value "([^"]+)")?(?: on question "([^"]+)")?$/ do |neg, type, answer_reference_id, value, question_reference_id|
121
120
  conditions = []
122
121
  values = []
122
+ where = {}
123
123
  expected_count = neg.blank? ? 1 : 0
124
124
  if type
125
125
  attribute = case type.strip
@@ -132,10 +132,8 @@ Then /^there should (not )?be a (\w+ )?response(?: for answer "([^"]+)")?(?: wit
132
132
  end
133
133
  if value
134
134
  case type.strip
135
- when 'date'
136
- # Work around deficient SQLite date handling
137
- conditions << "date(#{attribute}) = date(?)"
138
- values << value
135
+ when 'date' || 'datetime' || 'time'
136
+ where[:datetime_value] = Time.zone.parse(value).utc
139
137
  else
140
138
  conditions << "#{attribute} = ?"
141
139
  values << value
@@ -163,7 +161,7 @@ Then /^there should (not )?be a (\w+ )?response(?: for answer "([^"]+)")?(?: wit
163
161
  values << answer
164
162
  end
165
163
 
166
- Response.where(conditions.join(' AND '), *values).count.should == expected_count
164
+ Response.where(conditions.join(' AND '), *values).where(where).count.should == expected_count
167
165
  end
168
166
 
169
167
  Then /^I should see the image "([^"]*)"$/ do |src|
@@ -321,3 +319,7 @@ end
321
319
  Then /^I set the asset directory$/ do
322
320
  ActionController::Base.helpers.config.assets_dir = "public" unless asset_pipeline_enabled?
323
321
  end
322
+
323
+ When(/^I change the locale to "(.*?)"$/) do |locale|
324
+ steps %Q{When I select "#{locale}" from "new_locale"}
325
+ end
@@ -10,10 +10,13 @@ module NavigationHelpers
10
10
 
11
11
  when /^the home\s?page$/
12
12
  '/'
13
- when /the surveys page/
13
+ when /^the surveys page$/
14
14
  '/surveys'
15
+ when /the surveys page in "(.*)"$/
16
+ "/surveys?locale=#{$1}"
15
17
  when /the last response set show page/
16
- view_my_survey_path(:survey_code => ResponseSet.last.survey.access_code, :response_set_code => ResponseSet.last.access_code)
18
+ "/surveys/#{ResponseSet.last.survey.access_code}/#{ResponseSet.last.access_code}"
19
+
17
20
  # Add more mappings here.
18
21
  # Here is an example that pulls values out of the Regexp:
19
22
  #