helena 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +2 -0
  3. data/.gitignore +15 -0
  4. data/.rubocop.yml +16 -0
  5. data/.travis.yml +6 -0
  6. data/Gemfile +31 -0
  7. data/Gemfile.lock +290 -0
  8. data/LICENSE +16 -0
  9. data/README.md +90 -0
  10. data/Rakefile +29 -0
  11. data/app/assets/images/helena/.keep +0 -0
  12. data/app/assets/images/helena/helena_mobile_view.jpg +0 -0
  13. data/app/assets/images/helena/icons/export.svg +29 -0
  14. data/app/assets/images/helena/swissmadesoftware.png +0 -0
  15. data/app/assets/javascripts/helena/application.js +4 -0
  16. data/app/assets/javascripts/helena/survey.js +2 -0
  17. data/app/assets/stylesheets/helena/admin/labels.css.sass +7 -0
  18. data/app/assets/stylesheets/helena/admin/layout.css.sass +6 -0
  19. data/app/assets/stylesheets/helena/admin/question_groups.css.sass +7 -0
  20. data/app/assets/stylesheets/helena/admin/questions.css.sass +9 -0
  21. data/app/assets/stylesheets/helena/admin/sessions.css.sass +5 -0
  22. data/app/assets/stylesheets/helena/admin/subquestions.css.sass +7 -0
  23. data/app/assets/stylesheets/helena/admin/versions.css.sass +9 -0
  24. data/app/assets/stylesheets/helena/application.css.sass +21 -0
  25. data/app/assets/stylesheets/helena/forms.css.sass +13 -0
  26. data/app/assets/stylesheets/helena/layout.css.sass +3 -0
  27. data/app/assets/stylesheets/helena/question_groups.css.sass +4 -0
  28. data/app/controllers/helena/admin/application_controller.rb +31 -0
  29. data/app/controllers/helena/admin/question_groups_controller.rb +78 -0
  30. data/app/controllers/helena/admin/questions/checkbox_groups_controller.rb +17 -0
  31. data/app/controllers/helena/admin/questions/checkbox_matrix_controller.rb +9 -0
  32. data/app/controllers/helena/admin/questions/long_texts_controller.rb +13 -0
  33. data/app/controllers/helena/admin/questions/radio_groups_controller.rb +17 -0
  34. data/app/controllers/helena/admin/questions/radio_matrix_controller.rb +9 -0
  35. data/app/controllers/helena/admin/questions/short_texts_controller.rb +13 -0
  36. data/app/controllers/helena/admin/questions/static_texts_controller.rb +13 -0
  37. data/app/controllers/helena/admin/questions_controller.rb +105 -0
  38. data/app/controllers/helena/admin/sessions_controller.rb +35 -0
  39. data/app/controllers/helena/admin/surveys_controller.rb +78 -0
  40. data/app/controllers/helena/admin/versions_controller.rb +71 -0
  41. data/app/controllers/helena/application_controller.rb +15 -0
  42. data/app/controllers/helena/concerns/questions/matrix_questions.rb +24 -0
  43. data/app/controllers/helena/sessions_controller.rb +93 -0
  44. data/app/controllers/helena/surveys_controller.rb +11 -0
  45. data/app/helpers/helena/application_helper.rb +4 -0
  46. data/app/models/helena/answer.rb +48 -0
  47. data/app/models/helena/boolean_answer.rb +5 -0
  48. data/app/models/helena/concerns/application_model.rb +19 -0
  49. data/app/models/helena/concerns/questions/requirable.rb +19 -0
  50. data/app/models/helena/concerns/questions/validates_one_label.rb +22 -0
  51. data/app/models/helena/integer_answer.rb +5 -0
  52. data/app/models/helena/label.rb +18 -0
  53. data/app/models/helena/question.rb +63 -0
  54. data/app/models/helena/question_group.rb +18 -0
  55. data/app/models/helena/questions/checkbox_group.rb +17 -0
  56. data/app/models/helena/questions/long_text.rb +9 -0
  57. data/app/models/helena/questions/radio_group.rb +12 -0
  58. data/app/models/helena/questions/radio_matrix.rb +24 -0
  59. data/app/models/helena/questions/short_text.rb +9 -0
  60. data/app/models/helena/questions/static_text.rb +7 -0
  61. data/app/models/helena/session.rb +76 -0
  62. data/app/models/helena/string_answer.rb +5 -0
  63. data/app/models/helena/sub_question.rb +27 -0
  64. data/app/models/helena/survey.rb +29 -0
  65. data/app/models/helena/survey_detail.rb +10 -0
  66. data/app/models/helena/version.rb +33 -0
  67. data/app/views/helena/admin/question_groups/_form.html.haml +3 -0
  68. data/app/views/helena/admin/question_groups/edit.html.haml +3 -0
  69. data/app/views/helena/admin/question_groups/index.html.haml +41 -0
  70. data/app/views/helena/admin/question_groups/new.html.haml +3 -0
  71. data/app/views/helena/admin/questions/_form.html.haml +15 -0
  72. data/app/views/helena/admin/questions/_labels.html.haml +24 -0
  73. data/app/views/helena/admin/questions/_sub_questions.html.haml +32 -0
  74. data/app/views/helena/admin/questions/edit.html.haml +3 -0
  75. data/app/views/helena/admin/questions/index.html.haml +49 -0
  76. data/app/views/helena/admin/questions/new.html.haml +3 -0
  77. data/app/views/helena/admin/sessions/index.html.haml +46 -0
  78. data/app/views/helena/admin/surveys/_form.html.haml +10 -0
  79. data/app/views/helena/admin/surveys/edit.html.haml +5 -0
  80. data/app/views/helena/admin/surveys/index.html.haml +35 -0
  81. data/app/views/helena/admin/surveys/new.html.haml +3 -0
  82. data/app/views/helena/admin/versions/_form.html.haml +5 -0
  83. data/app/views/helena/admin/versions/default_session_report.html.haml +17 -0
  84. data/app/views/helena/admin/versions/edit.html.haml +3 -0
  85. data/app/views/helena/admin/versions/index.html.haml +35 -0
  86. data/app/views/helena/admin/versions/new.html.haml +3 -0
  87. data/app/views/helena/questions/_checkbox_group.html.haml +17 -0
  88. data/app/views/helena/questions/_long_text.html.haml +8 -0
  89. data/app/views/helena/questions/_radio_group.html.haml +13 -0
  90. data/app/views/helena/questions/_radio_matrix.html.haml +27 -0
  91. data/app/views/helena/questions/_short_text.html.haml +8 -0
  92. data/app/views/helena/sessions/edit.html.haml +16 -0
  93. data/app/views/helena/sessions/end_message.html.haml +5 -0
  94. data/app/views/helena/surveys/_survey.html.haml +3 -0
  95. data/app/views/helena/surveys/index.html.haml +2 -0
  96. data/bin/rails +8 -0
  97. data/config/i18n-tasks.yml +3 -0
  98. data/config/initializers/simple_form.rb +162 -0
  99. data/config/initializers/simple_form_bootstrap.rb +132 -0
  100. data/config/locales/en.yml +20 -0
  101. data/config/locales/models/label/en.yml +14 -0
  102. data/config/locales/models/question/en.yml +47 -0
  103. data/config/locales/models/question_group/en.yml +11 -0
  104. data/config/locales/models/session/en.yml +10 -0
  105. data/config/locales/models/sub_question/en.yml +14 -0
  106. data/config/locales/models/survey/en.yml +6 -0
  107. data/config/locales/models/version/en.yml +12 -0
  108. data/config/locales/simple_form.en.yml +26 -0
  109. data/config/locales/views/admin/question_groups/en.yml +12 -0
  110. data/config/locales/views/admin/questions/en.yml +16 -0
  111. data/config/locales/views/admin/sessions/en.yml +11 -0
  112. data/config/locales/views/admin/surveys/en.yml +10 -0
  113. data/config/locales/views/admin/versions/en.yml +8 -0
  114. data/config/locales/views/sessions/en.yml +9 -0
  115. data/config/routes.rb +28 -0
  116. data/db/seeds.rb +182 -0
  117. data/gpl-3.0.txt +674 -0
  118. data/helena.gemspec +40 -0
  119. data/lib/helena/engine.rb +6 -0
  120. data/lib/helena/version.rb +3 -0
  121. data/lib/helena/version_publisher.rb +16 -0
  122. data/lib/helena.rb +10 -0
  123. data/lib/tasks/helena_tasks.rake +4 -0
  124. data/lib/templates/erb/scaffold/_form.html.erb +13 -0
  125. data/spec/controllers/helena/admin/question_group_controller_spec.rb +59 -0
  126. data/spec/controllers/helena/admin/questions_controller_spec.rb +60 -0
  127. data/spec/controllers/helena/admin/sessions_controller_spec.rb +84 -0
  128. data/spec/controllers/helena/admin/survey_controller_spec.rb +89 -0
  129. data/spec/controllers/helena/admin/versions_controller_spec.rb +19 -0
  130. data/spec/controllers/helena/application_controller_spec.rb +15 -0
  131. data/spec/controllers/helena/sessions_controller_spec.rb +24 -0
  132. data/spec/dummy/README.rdoc +28 -0
  133. data/spec/dummy/Rakefile +6 -0
  134. data/spec/dummy/app/assets/images/.keep +0 -0
  135. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  136. data/spec/dummy/app/controllers/application_controller.rb +9 -0
  137. data/spec/dummy/app/controllers/concerns/.keep +0 -0
  138. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  139. data/spec/dummy/app/mailers/.keep +0 -0
  140. data/spec/dummy/app/models/.keep +0 -0
  141. data/spec/dummy/app/models/concerns/.keep +0 -0
  142. data/spec/dummy/app/views/layouts/application.html.haml +24 -0
  143. data/spec/dummy/bin/bundle +3 -0
  144. data/spec/dummy/bin/rails +4 -0
  145. data/spec/dummy/bin/rake +4 -0
  146. data/spec/dummy/config/application.rb +27 -0
  147. data/spec/dummy/config/boot.rb +5 -0
  148. data/spec/dummy/config/environment.rb +5 -0
  149. data/spec/dummy/config/environments/development.rb +29 -0
  150. data/spec/dummy/config/environments/production.rb +80 -0
  151. data/spec/dummy/config/environments/test.rb +36 -0
  152. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  153. data/spec/dummy/config/initializers/secret_token.rb +12 -0
  154. data/spec/dummy/config/initializers/session_store.rb +3 -0
  155. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  156. data/spec/dummy/config/locales/en.yml +23 -0
  157. data/spec/dummy/config/mongoid.yml +14 -0
  158. data/spec/dummy/config/routes.rb +4 -0
  159. data/spec/dummy/config.ru +4 -0
  160. data/spec/dummy/db/seeds.rb +1 -0
  161. data/spec/dummy/lib/assets/.keep +0 -0
  162. data/spec/dummy/log/.keep +0 -0
  163. data/spec/dummy/public/404.html +58 -0
  164. data/spec/dummy/public/422.html +58 -0
  165. data/spec/dummy/public/500.html +57 -0
  166. data/spec/dummy/public/favicon.ico +0 -0
  167. data/spec/factories/helena/answers.rb +24 -0
  168. data/spec/factories/helena/labels.rb +7 -0
  169. data/spec/factories/helena/question_groups.rb +6 -0
  170. data/spec/factories/helena/questions.rb +14 -0
  171. data/spec/factories/helena/sessions.rb +9 -0
  172. data/spec/factories/helena/sub_questions.rb +7 -0
  173. data/spec/factories/helena/survey_details.rb +6 -0
  174. data/spec/factories/helena/surveys.rb +7 -0
  175. data/spec/factories/helena/versions.rb +11 -0
  176. data/spec/features/helena/admin/manage_question_group_spec.rb +101 -0
  177. data/spec/features/helena/admin/manage_question_spec.rb +105 -0
  178. data/spec/features/helena/admin/manage_session_spec.rb +40 -0
  179. data/spec/features/helena/admin/manage_survey_spec.rb +141 -0
  180. data/spec/features/helena/admin/manage_version_spec.rb +74 -0
  181. data/spec/features/helena/admin/question_types/manage_checkbox_group_question_spec.rb +55 -0
  182. data/spec/features/helena/admin/question_types/manage_long_text_question_spec.rb +21 -0
  183. data/spec/features/helena/admin/question_types/manage_radio_group_question_spec.rb +59 -0
  184. data/spec/features/helena/admin/question_types/manage_radio_matrix_question_spec.rb +80 -0
  185. data/spec/features/helena/admin/question_types/manage_short_text_question_spec.rb +19 -0
  186. data/spec/features/helena/admin/question_types/manage_static_text_question_spec.rb +17 -0
  187. data/spec/features/helena/manage_session_spec.rb +284 -0
  188. data/spec/features/helena/manage_survey_spec.rb +24 -0
  189. data/spec/lib/version_publisher_spec.rb +26 -0
  190. data/spec/models/helena/answer_spec.rb +53 -0
  191. data/spec/models/helena/label_spec.rb +13 -0
  192. data/spec/models/helena/question_group_spec.rb +11 -0
  193. data/spec/models/helena/question_spec.rb +21 -0
  194. data/spec/models/helena/questions/radio_group_spec.rb +32 -0
  195. data/spec/models/helena/questions/radio_matrix_spec.rb +32 -0
  196. data/spec/models/helena/questions/short_text_spec.rb +10 -0
  197. data/spec/models/helena/session_spec.rb +20 -0
  198. data/spec/models/helena/sub_question_spec.rb +28 -0
  199. data/spec/models/helena/survey_spec.rb +14 -0
  200. data/spec/models/helena/version_spec.rb +15 -0
  201. data/spec/spec_helper.rb +43 -0
  202. metadata +485 -0
@@ -0,0 +1,105 @@
1
+ require 'spec_helper'
2
+
3
+ feature 'Question management' do
4
+ let!(:draft_version) { create :version, survey: create(:survey), version: 0 }
5
+ let!(:question_group) { create :question_group, version: draft_version }
6
+
7
+ scenario 'lists all question groups of a certain survey' do
8
+ first_question = create :question, question_text: 'Who are you?', question_group: question_group, position: 1
9
+ second_question = create :question, question_text: 'Imagine an inivisible pony. What color has ist?', question_group: question_group, position: 2
10
+
11
+ visit helena.admin_survey_question_group_questions_path(draft_version.survey, question_group)
12
+
13
+ within "#helena_#{dom_id first_question}" do
14
+ expect(page).to have_text 'Who are you?'
15
+ end
16
+
17
+ within "#helena_#{dom_id second_question}" do
18
+ expect(page).to have_text 'Imagine an inivisible pony. What color has ist?'
19
+ end
20
+
21
+ within '.breadcrumb' do
22
+ expect(page).to have_link 'Surveys', href: helena.admin_surveys_path
23
+ expect(page).to have_link draft_version.survey.name, href: helena.admin_survey_question_groups_path(draft_version.survey)
24
+ expect(page).to have_text question_group.title
25
+ end
26
+ end
27
+
28
+ scenario 'creates a new question' do
29
+ visit helena.new_admin_survey_question_group_question_path(draft_version.survey, question_group)
30
+
31
+ fill_in 'Code', with: 'a38'
32
+ fill_in 'Question text', with: 'Shall we go?'
33
+
34
+ within '.breadcrumb' do
35
+ expect(page).to have_text 'New question'
36
+ end
37
+
38
+ expect { click_button 'Save' }.to change { question_group.reload.questions.count }.by(1)
39
+ end
40
+
41
+ scenario 'creating a new question errors when without entering a code' do
42
+ visit helena.new_admin_survey_question_group_question_path(draft_version.survey, question_group)
43
+
44
+ fill_in 'Code', with: ''
45
+
46
+ expect { click_button 'Save' }.to change { question_group.reload.questions.count }.by(0)
47
+ end
48
+
49
+ scenario 'edits a question' do
50
+ question = create :question, question_text: 'We are here?', question_group: question_group
51
+
52
+ visit helena.edit_admin_survey_question_group_question_path(draft_version.survey, question.question_group, question)
53
+
54
+ fill_in 'Question text', with: 'Are you sure?'
55
+ fill_in 'Code', with: 'b12'
56
+
57
+ click_button 'Save'
58
+
59
+ expect(question.reload.question_text).to eq 'Are you sure?'
60
+ expect(question.reload.code).to eq 'b12'
61
+ end
62
+
63
+ scenario 'edits a question errors when code text is empty' do
64
+ question = create :question, question_text: 'We are here?', question_group: question_group
65
+
66
+ visit helena.edit_admin_survey_question_group_question_path(draft_version.survey, question.question_group, question)
67
+
68
+ fill_in 'Code', with: ''
69
+
70
+ expect { click_button 'Save' }.not_to change { question.reload }
71
+ end
72
+
73
+ scenario 'moving a question' do
74
+ first_question = create :question, question_group: question_group, position: 1
75
+ second_question = create :question, question_group: question_group, position: 2
76
+
77
+ visit helena.admin_survey_question_group_questions_path(draft_version.survey, question_group)
78
+
79
+ within "#helena_#{dom_id first_question}" do
80
+ expect { click_link 'Move down' }.to change { first_question.reload.position }.from(1).to(2)
81
+ end
82
+
83
+ within "#helena_#{dom_id second_question}" do
84
+ expect { click_link 'Move down' }.to change { second_question.reload.position }.from(1).to(2)
85
+ end
86
+
87
+ within "#helena_#{dom_id second_question}" do
88
+ expect { click_link 'Move up' }.to change { second_question.reload.position }.from(2).to(1)
89
+ end
90
+
91
+ within "#helena_#{dom_id first_question}" do
92
+ expect { click_link 'Move up' }.to change { first_question.reload.position }.from(2).to(1)
93
+ end
94
+ end
95
+
96
+ scenario 'deletes a question' do
97
+ question = create :question, question_group: question_group
98
+
99
+ visit helena.admin_survey_question_group_questions_path(draft_version.survey, question_group)
100
+
101
+ within "#helena_#{dom_id question}" do
102
+ expect { click_link 'Delete' }.to change { question_group.reload.questions.count }.by(-1)
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+ include ActionView::RecordIdentifier
3
+
4
+ feature 'Session management' do
5
+ background do
6
+ @survey = create :survey
7
+ baseversion = @survey.versions.create version: 0
8
+ @version = Helena::VersionPublisher.publish baseversion
9
+ @version.save
10
+ end
11
+
12
+ scenario 'lists all sessions of a survey' do
13
+ session_not_completed = @survey.sessions.create version: @version, token: 'abc'
14
+ session_completed = @survey.sessions.create version: @version, token: 'xyz', completed: true
15
+
16
+ visit helena.admin_survey_sessions_path @survey
17
+
18
+ within "#helena_#{dom_id session_not_completed}" do
19
+ expect(page).to have_text 'less than a minute abc No'
20
+ end
21
+
22
+ within "#helena_#{dom_id session_completed}" do
23
+ expect(page).to have_text 'less than a minute xyz Yes'
24
+ end
25
+
26
+ within '.breadcrumb' do
27
+ expect(page).to have_text 'Surveys'
28
+ expect(page).to have_text @survey.name
29
+ end
30
+ end
31
+
32
+ scenario 'deletes a version' do
33
+ session = @survey.sessions.create
34
+
35
+ visit helena.admin_survey_sessions_path @survey
36
+ within "#helena_#{dom_id(session)}" do
37
+ expect { click_link 'Delete' }.to change { @survey.sessions.count }.by(-1)
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,141 @@
1
+ require 'spec_helper'
2
+
3
+ feature 'Survey management' do
4
+ scenario 'lists all surveys' do
5
+ first_survey = create :survey, name: 'first', tag_list: 'foo, bar'
6
+ first_survey.versions.create version: 0
7
+ first_survey.versions.first.survey_detail = Helena::SurveyDetail.new(title: 'My first survey', description: 'I am very proud of it')
8
+ second_survey = create :survey, name: 'second', tag_list: 'cumulus, nimbus'
9
+ second_survey.versions.create version: 0
10
+ second_survey.versions.first.survey_detail = Helena::SurveyDetail.new(title: 'Another cool survey', description: 'Everybody likes it')
11
+
12
+ visit helena.admin_surveys_path
13
+
14
+ within "#helena_#{dom_id first_survey}" do
15
+ expect(page).to have_text 'first'
16
+ expect(page).to have_text 'My first survey'
17
+ expect(page).to have_text 'I am very proud of it'
18
+ expect(page).to have_text 'foo, bar'
19
+ end
20
+
21
+ within "#helena_#{dom_id second_survey}" do
22
+ expect(page).to have_text 'second'
23
+ expect(page).to have_text 'Another cool survey'
24
+ expect(page).to have_text 'Everybody likes it'
25
+ expect(page).to have_text 'cumulus, nimbus'
26
+ end
27
+
28
+ within '.breadcrumb' do
29
+ expect(page).to have_text 'Surveys'
30
+ end
31
+ end
32
+
33
+ scenario 'creates a new surveys' do
34
+ visit helena.new_admin_survey_path
35
+
36
+ fill_in 'Name', with: 'More crazy stuff...'
37
+ fill_in 'Description', with: 'Once upon a time.'
38
+ fill_in 'Tag list', with: 'english, foo, 42'
39
+
40
+ within '.breadcrumb' do
41
+ expect(page).to have_text 'New Survey'
42
+ end
43
+
44
+ expect { click_button 'Save' }.to change { Helena::Survey.count }.by 1
45
+ end
46
+
47
+ scenario 'creates a new surveys errors without a name' do
48
+ visit helena.new_admin_survey_path
49
+
50
+ fill_in 'Name', with: ''
51
+
52
+ expect { click_button 'Save' }.to change { Helena::Survey.count }.by 0
53
+ end
54
+
55
+ scenario 'edits a survey' do
56
+ survey = create :survey, name: 'first'
57
+ survey.versions.create version: 0
58
+ survey.versions.first.survey_detail = Helena::SurveyDetail.new(title: 'My first survey', description: 'I am very proud of it')
59
+
60
+ visit helena.edit_admin_survey_path(survey)
61
+
62
+ fill_in 'Name', with: 'This is crazy'
63
+ fill_in 'Title', with: 'More crazy stuff...'
64
+ fill_in 'Description', with: 'Once upon a time.'
65
+ fill_in 'Tag list', with: 'english, foo, 42'
66
+
67
+ click_button 'Save'
68
+
69
+ within "#helena_#{dom_id survey}" do
70
+ expect(page).to have_text 'This is crazy'
71
+ expect(page).to have_text 'More crazy stuff...'
72
+ expect(page).to have_text 'Once upon a time.'
73
+ end
74
+ end
75
+
76
+ scenario 'edits a survey fails when name is empty' do
77
+ survey = create :survey, name: 'the first one'
78
+ survey.versions.create version: 0
79
+ survey.versions.first.survey_detail = Helena::SurveyDetail.new(title: 'My first survey', description: 'I am very proud of it')
80
+
81
+ visit helena.edit_admin_survey_path(survey)
82
+
83
+ fill_in 'Name', with: ''
84
+ fill_in 'Description', with: 'Once upon a time.'
85
+
86
+ click_button 'Save'
87
+
88
+ expect(page).to have_text "Name can't be blank"
89
+
90
+ within '.breadcrumb' do
91
+ expect(page).to have_text 'the first one'
92
+ end
93
+ end
94
+
95
+ scenario 'deletes a survey' do
96
+ survey = create :survey, name: 'the first one'
97
+ survey.versions.create version: 0
98
+
99
+ visit helena.admin_surveys_path
100
+
101
+ within "#helena_#{dom_id survey}" do
102
+ expect { click_link 'Delete' }.to change { Helena::Survey.count }.by(-1)
103
+ end
104
+ end
105
+
106
+ scenario 'links to question groups of a survey' do
107
+ survey = create :survey, name: 'the first one'
108
+ survey.versions.create version: 0
109
+
110
+ visit helena.admin_surveys_path
111
+
112
+ within "#helena_#{dom_id survey}" do
113
+ expect(page).to have_link 'Question Groups', href: helena.admin_survey_question_groups_path(survey)
114
+ end
115
+ end
116
+
117
+ scenario 'moving surveys' do
118
+ first_survey = create :survey, name: 'first', position: 1
119
+ first_survey.versions.create version: 0
120
+ second_survey = create :survey, name: 'second', position: 2
121
+ second_survey.versions.create version: 0
122
+
123
+ visit helena.admin_surveys_path
124
+
125
+ within "#helena_#{dom_id first_survey}" do
126
+ expect { click_link 'Move down' }.to change { first_survey.reload.position }.from(1).to(2)
127
+ end
128
+
129
+ within "#helena_#{dom_id second_survey}" do
130
+ expect { click_link 'Move down' }.to change { second_survey.reload.position }.from(1).to(2)
131
+ end
132
+
133
+ within "#helena_#{dom_id second_survey}" do
134
+ expect { click_link 'Move up' }.to change { second_survey.reload.position }.from(2).to(1)
135
+ end
136
+
137
+ within "#helena_#{dom_id first_survey}" do
138
+ expect { click_link 'Move up' }.to change { first_survey.reload.position }.from(2).to(1)
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,74 @@
1
+ require 'spec_helper'
2
+ include ActionView::RecordIdentifier
3
+
4
+ feature 'Version management' do
5
+ background do
6
+ @survey = create :survey
7
+ @baseversion = @survey.versions.create version: 0
8
+ end
9
+
10
+ scenario 'lists all versions of a survey' do
11
+ published_version = Helena::VersionPublisher.publish @baseversion
12
+ published_version.notes = 'bla bla'
13
+ published_version.save
14
+
15
+ visit helena.admin_survey_versions_path(@survey)
16
+
17
+ expect(page).not_to have_selector "#helena_#{dom_id @baseversion}" # Base version is always the working version
18
+
19
+ within "#helena_#{dom_id published_version}" do
20
+ expect(page).to have_text '1 bla bla 0 less than a minute'
21
+ end
22
+
23
+ within '.breadcrumb' do
24
+ expect(page).to have_text 'Surveys'
25
+ expect(page).to have_text @survey.name
26
+ end
27
+ end
28
+
29
+ scenario 'publishing a new version on the base of base version' do
30
+
31
+ visit helena.new_admin_survey_version_path @survey
32
+
33
+ expect(find_field('version_session_report').value).to have_content '{{ survey_title }}'
34
+
35
+ fill_in 'Notes', with: 'Luke, I am your father!'
36
+ fill_in 'version_session_report', with: 'Foo Bar'
37
+
38
+ expect { click_button 'Save' }.to change { @survey.reload.versions.count }.by(1)
39
+
40
+ expect(@survey.reload.versions.last.session_report).to eq 'Foo Bar'
41
+
42
+ visit helena.new_admin_survey_version_path @survey
43
+
44
+ expect(find_field('version_session_report').value).to have_content 'Foo Bar'
45
+ end
46
+
47
+ scenario 'changing the session report for a version' do
48
+ published_version = Helena::VersionPublisher.publish @baseversion
49
+ published_version.notes = 'bla bla'
50
+ published_version.save
51
+
52
+ visit helena.edit_admin_survey_version_path(@survey, published_version)
53
+
54
+ fill_in 'Notes', with: 'Michael Knight, a lone crusader in a dangerous world. The world of the Knight Rider.'
55
+ fill_in 'version_session_report', with: 'A Man, a Car'
56
+
57
+ click_button 'Save'
58
+
59
+ expect(published_version.reload.notes).to eq 'Michael Knight, a lone crusader in a dangerous world. The world of the Knight Rider.'
60
+ expect(published_version.reload.session_report).to eq 'A Man, a Car'
61
+ end
62
+
63
+ scenario 'deletes a version' do
64
+ published_version = Helena::VersionPublisher.publish @baseversion
65
+ published_version.notes = 'bla bla'
66
+ published_version.save
67
+
68
+ visit helena.admin_survey_versions_path @survey
69
+
70
+ within "#helena_#{dom_id published_version }" do
71
+ expect { click_link 'Delete' }.to change { @survey.reload.versions.count }.by(-1)
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+
3
+ feature 'Checkbox group question management' do
4
+ let!(:draft_version) { create :version, survey: create(:survey), version: 0 }
5
+ let!(:question_group) { create(:question_group, version: draft_version) }
6
+
7
+ scenario 'edits a question' do
8
+ question = create :checkbox_group_question, question_group: question_group
9
+ question.sub_questions.create(code: 'aperto', text: 'Aperto Snacks', value: 'Aperto', position: 1)
10
+
11
+ visit helena.edit_admin_survey_question_group_questions_checkbox_group_path(draft_version.survey, question.question_group, question)
12
+
13
+ check 'Required'
14
+
15
+ fill_in 'questions_checkbox_group_sub_questions_attributes_0_position', with: '2'
16
+ fill_in 'questions_checkbox_group_sub_questions_attributes_0_text', with: 'Avec Shop'
17
+ fill_in 'questions_checkbox_group_sub_questions_attributes_0_code', with: 'avec'
18
+ check 'questions_checkbox_group_sub_questions_attributes_0_preselected'
19
+
20
+ click_button 'Save'
21
+
22
+ expect(question.reload.sub_questions.first.position).to eq 2
23
+ expect(question.reload.sub_questions.first.text).to eq 'Avec Shop'
24
+ expect(question.reload.sub_questions.first.code).to eq 'avec'
25
+ expect(question.reload.required).to eq true
26
+ end
27
+
28
+ scenario 'adds a a sub question' do
29
+ question = create :checkbox_group_question, question_group: question_group
30
+
31
+ visit helena.edit_admin_survey_question_group_questions_checkbox_group_path(draft_version.survey, question.question_group, question)
32
+
33
+ fill_in 'questions_checkbox_group_sub_questions_attributes_0_position', with: '2'
34
+ fill_in 'questions_checkbox_group_sub_questions_attributes_0_text', with: 'Avec Shop'
35
+ fill_in 'questions_checkbox_group_sub_questions_attributes_0_code', with: 'avec'
36
+ check 'questions_checkbox_group_sub_questions_attributes_0_preselected'
37
+
38
+ click_button 'Save'
39
+
40
+ expect(question.reload.sub_questions.first.position).to eq 2
41
+ expect(question.reload.sub_questions.first.text).to eq 'Avec Shop'
42
+ expect(question.reload.sub_questions.first.code).to eq 'avec'
43
+ end
44
+
45
+ scenario 'removes a sub question' do
46
+ question = create :checkbox_group_question, question_group: question_group
47
+ question.sub_questions.create(code: 'aperto', text: 'Aperto Snacks', value: 'Aperto', position: 1)
48
+
49
+ visit helena.edit_admin_survey_question_group_question_path(draft_version.survey, question.question_group, question)
50
+
51
+ check 'questions_checkbox_group_sub_questions_attributes_0__destroy'
52
+
53
+ click_button 'Save'
54
+ end
55
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ feature 'Long text question management' do
4
+ let!(:draft_version) { create :version, survey: create(:survey), version: 0 }
5
+
6
+ scenario 'edits a question' do
7
+ question = create :long_text_question, question_group: create(:question_group, version: draft_version)
8
+
9
+ visit helena.edit_admin_survey_question_group_question_path(draft_version.survey, question.question_group, question)
10
+
11
+ a_very_long_text = Faker::Lorem.paragraph(20)
12
+
13
+ fill_in 'Default value', with: a_very_long_text
14
+ check 'Required'
15
+
16
+ click_button 'Save'
17
+
18
+ expect(question.reload.default_value).to eq a_very_long_text
19
+ expect(question.reload.required).to eq true
20
+ end
21
+ end
@@ -0,0 +1,59 @@
1
+ require 'spec_helper'
2
+
3
+ feature 'Radio group question management' do
4
+ let!(:draft_version) { create :version, survey: create(:survey), version: 0 }
5
+ let!(:question_group) { create(:question_group, version: draft_version) }
6
+
7
+ scenario 'edits a question' do
8
+ question = create :radio_group_question, question_group: question_group
9
+ question.labels << build(:label, text: 'Male', value: 'm', position: 1)
10
+
11
+ visit helena.edit_admin_survey_question_group_question_path(draft_version.survey, question.question_group, question)
12
+
13
+ check 'Required'
14
+
15
+ fill_in 'questions_radio_group_labels_attributes_0_position', with: '2'
16
+ fill_in 'questions_radio_group_labels_attributes_0_text', with: 'Female'
17
+ fill_in 'questions_radio_group_labels_attributes_0_value', with: 'f'
18
+ check 'questions_radio_group_labels_attributes_0_preselected'
19
+
20
+ click_button 'Save'
21
+
22
+ expect(question.reload.labels.first.position).to eq 2
23
+ expect(question.reload.labels.first.text).to eq 'Female'
24
+ expect(question.reload.labels.first.value).to eq 'f'
25
+ expect(question.reload.labels.first.preselected).to eq true
26
+ expect(question.reload.required).to eq true
27
+ end
28
+
29
+ scenario 'adds a an option' do
30
+ question = create :radio_group_question, question_group: question_group
31
+
32
+ visit helena.edit_admin_survey_question_group_questions_radio_group_path(draft_version.survey, question.question_group, question)
33
+
34
+ fill_in 'questions_radio_group_labels_attributes_0_position', with: '2'
35
+ fill_in 'questions_radio_group_labels_attributes_0_text', with: 'Female'
36
+ fill_in 'questions_radio_group_labels_attributes_0_value', with: 'f'
37
+ check 'questions_radio_group_labels_attributes_0_preselected'
38
+
39
+ click_button 'Save'
40
+
41
+ expect(question.reload.labels.first.position).to eq 2
42
+ expect(question.reload.labels.first.text).to eq 'Female'
43
+ expect(question.reload.labels.first.value).to eq 'f'
44
+ expect(question.reload.labels.first.preselected).to eq true
45
+ end
46
+
47
+ scenario 'removes an option' do
48
+ question = create :radio_group_question, question_group: question_group
49
+ question.labels << build(:label, text: 'Male', value: 'm', position: 1)
50
+
51
+ visit helena.edit_admin_survey_question_group_questions_radio_group_path(draft_version.survey, question.question_group, question)
52
+
53
+ check 'questions_radio_group_labels_attributes_0__destroy'
54
+
55
+ click_button 'Save'
56
+
57
+ expect(question.reload.labels).to be_empty
58
+ end
59
+ end
@@ -0,0 +1,80 @@
1
+ require 'spec_helper'
2
+
3
+ feature 'Radio matrix question management' do
4
+ let!(:draft_version) { create :version, survey: create(:survey), version: 0 }
5
+ let!(:question_group) { create(:question_group, version: draft_version) }
6
+
7
+ scenario 'edits a question' do
8
+ question = create :radio_matrix_question, question_group: question_group
9
+ question.labels.create text: 'Strongly disagree', value: '-1', position: 1
10
+ question.sub_questions.create code: 'aperto', text: 'Aperto Snacks', value: 'Aperto', position: 1
11
+
12
+ visit helena.edit_admin_survey_question_group_question_path(draft_version.survey, question.question_group, question)
13
+
14
+ check 'Required'
15
+
16
+ fill_in 'questions_radio_matrix_labels_attributes_0_position', with: '2'
17
+ fill_in 'questions_radio_matrix_labels_attributes_0_text', with: 'Strongly agree'
18
+ fill_in 'questions_radio_matrix_labels_attributes_0_value', with: '1'
19
+ check 'questions_radio_matrix_labels_attributes_0_preselected'
20
+
21
+ fill_in 'questions_radio_matrix_sub_questions_attributes_0_position', with: '2'
22
+ fill_in 'questions_radio_matrix_sub_questions_attributes_0_text', with: 'Avec Shop'
23
+ fill_in 'questions_radio_matrix_sub_questions_attributes_0_code', with: 'avec'
24
+
25
+ click_button 'Save'
26
+
27
+ expect(question.reload.labels.first.position).to eq 2
28
+ expect(question.reload.labels.first.text).to eq 'Strongly agree'
29
+ expect(question.reload.labels.first.value).to eq '1'
30
+ expect(question.reload.labels.first.preselected).to eq true
31
+
32
+ expect(question.reload.sub_questions.first.position).to eq 2
33
+ expect(question.reload.sub_questions.first.text).to eq 'Avec Shop'
34
+ expect(question.reload.sub_questions.first.code).to eq 'avec'
35
+
36
+ expect(question.reload.required).to eq true
37
+ end
38
+
39
+ scenario 'adds a an option' do
40
+ question = create :radio_matrix_question, question_group: question_group
41
+
42
+ visit helena.edit_admin_survey_question_group_questions_radio_matrix_path(draft_version.survey, question.question_group, question)
43
+
44
+ fill_in 'questions_radio_matrix_labels_attributes_0_position', with: '2'
45
+ fill_in 'questions_radio_matrix_labels_attributes_0_text', with: 'Strongly agree'
46
+ fill_in 'questions_radio_matrix_labels_attributes_0_value', with: '1'
47
+ check 'questions_radio_matrix_labels_attributes_0_preselected'
48
+
49
+ fill_in 'questions_radio_matrix_sub_questions_attributes_0_position', with: '2'
50
+ fill_in 'questions_radio_matrix_sub_questions_attributes_0_text', with: 'Avec Shop'
51
+ fill_in 'questions_radio_matrix_sub_questions_attributes_0_code', with: 'avec'
52
+
53
+ click_button 'Save'
54
+
55
+ expect(question.reload.labels.first.position).to eq 2
56
+ expect(question.reload.labels.first.text).to eq 'Strongly agree'
57
+ expect(question.reload.labels.first.value).to eq '1'
58
+ expect(question.reload.labels.first.preselected).to eq true
59
+
60
+ expect(question.reload.sub_questions.first.position).to eq 2
61
+ expect(question.reload.sub_questions.first.text).to eq 'Avec Shop'
62
+ expect(question.reload.sub_questions.first.code).to eq 'avec'
63
+ end
64
+
65
+ scenario 'removes an option' do
66
+ question = create :radio_matrix_question, question_group: question_group
67
+ question.labels.create text: 'Male', value: 'm', position: 1
68
+ question.sub_questions.create code: 'aperto', text: 'Aperto Snacks', value: 'Aperto', position: 1
69
+
70
+ visit helena.edit_admin_survey_question_group_questions_radio_matrix_path(draft_version.survey, question.question_group, question)
71
+
72
+ check 'questions_radio_matrix_labels_attributes_0__destroy'
73
+ check 'questions_radio_matrix_sub_questions_attributes_0__destroy'
74
+
75
+ click_button 'Save'
76
+
77
+ expect(question.reload.labels).to be_empty
78
+ expect(question.reload.sub_questions).to be_empty
79
+ end
80
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ feature 'Short text question management' do
4
+ let!(:draft_version) { create :version, survey: create(:survey), version: 0 }
5
+
6
+ scenario 'edits a question' do
7
+ question = create :short_text_question, question_group: create(:question_group, version: draft_version)
8
+
9
+ visit helena.edit_admin_survey_question_group_question_path(question.question_group.version.survey, question.question_group, question)
10
+
11
+ fill_in 'Default value', with: 'Hey Hey!'
12
+ check 'Required'
13
+
14
+ click_button 'Save'
15
+
16
+ expect(question.reload.default_value).to eq 'Hey Hey!'
17
+ expect(question.reload.required).to eq true
18
+ end
19
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ feature 'Static text question management' do
4
+ let!(:draft_version) { create :version, survey: create(:survey), version: 0 }
5
+
6
+ scenario 'edits a question' do
7
+ question = create :static_text_question, question_group: create(:question_group, version: draft_version)
8
+
9
+ visit helena.edit_admin_survey_question_group_question_path(draft_version.survey, question.question_group, question)
10
+
11
+ fill_in 'Static text', with: 'This text will be displayed instead of an input'
12
+
13
+ click_button 'Save'
14
+
15
+ expect(question.reload.default_value).to eq 'This text will be displayed instead of an input'
16
+ end
17
+ end