helena 1.3.1 → 2.0.0
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +12 -7
- data/.travis.yml +11 -0
- data/Gemfile +6 -3
- data/Gemfile.lock +175 -188
- data/README.md +3 -4
- data/Rakefile +1 -2
- data/app/assets/javascripts/helena/application.js +0 -1
- data/app/assets/stylesheets/helena/{application.css.sass → application.scss} +0 -8
- data/app/controllers/helena/sessions_controller.rb +7 -1
- data/app/helpers/helena/application_helper.rb +18 -0
- data/app/models/helena/concerns/questions/validates_one_label.rb +1 -0
- data/app/models/helena/question.rb +1 -0
- data/app/models/helena/question_group.rb +8 -0
- data/app/models/helena/questions/static_text.rb +4 -0
- data/app/models/helena/session.rb +1 -19
- data/app/models/helena/sub_question.rb +1 -0
- data/app/models/helena/version.rb +4 -0
- data/app/views/helena/questions/_bipolar_radio_matrix.html.slim +36 -0
- data/app/views/helena/questions/{_checkbox_group.html.haml → _checkbox_group.html.slim} +6 -8
- data/app/views/helena/questions/_long_text.html.slim +9 -0
- data/app/views/helena/questions/{_radio_group.html.haml → _radio_group.html.slim} +5 -6
- data/app/views/helena/questions/_radio_matrix.html.slim +27 -0
- data/app/views/helena/questions/_short_text.html.slim +9 -0
- data/app/views/helena/questions/_static_text.html.slim +2 -4
- data/app/views/helena/sessions/_error_messages.html.slim +8 -0
- data/app/views/helena/sessions/edit.html.slim +11 -7
- data/app/views/helena/sessions/end_message.html.slim +1 -1
- data/config/locales/en.yml +13 -12
- data/config/locales/views/sessions/en.yml +1 -0
- data/gemfiles/rails_4.2.gemfile +18 -15
- data/gemfiles/rails_4.2.gemfile.lock +96 -117
- data/gemfiles/rails_5.1.gemfile +6 -3
- data/gemfiles/rails_5.1.gemfile.lock +127 -146
- data/helena.gemspec +16 -20
- data/lib/helena.rb +0 -3
- data/lib/helena/engine.rb +1 -1
- data/lib/helena/survey_importer.rb +4 -1
- data/lib/helena/version.rb +1 -1
- data/spec/controllers/helena/sessions_controller_spec.rb +2 -2
- data/spec/dummy/Rakefile +1 -1
- data/spec/dummy/app/views/layouts/{application.html.haml → application.html.slim} +10 -10
- data/spec/dummy/bin/bundle +1 -1
- data/spec/dummy/bin/rails +1 -1
- data/spec/dummy/config/application.rb +1 -2
- data/spec/dummy/config/boot.rb +2 -2
- data/spec/dummy/config/environment.rb +1 -1
- data/spec/factories/helena/surveys.rb +1 -1
- data/spec/features/helena/manage_session_spec.rb +40 -36
- data/spec/helpers/application_helper_spec.rb +10 -0
- data/spec/models/helena/session_spec.rb +1 -8
- data/spec/models/helena/sub_question_spec.rb +1 -1
- data/spec/spec_helper.rb +3 -1
- data/spec/support/rails_compatibility.rb +1 -1
- data/test_all_gemfiles.sh +7 -0
- metadata +72 -131
- data/.coveralls.yml +0 -2
- data/Appraisals +0 -12
- data/app/assets/stylesheets/helena/forms.css.sass +0 -13
- data/app/assets/stylesheets/helena/layout.css.sass +0 -3
- data/app/assets/stylesheets/helena/question_groups.css.sass +0 -4
- data/app/views/helena/questions/_bipolar_radio_matrix.html.haml +0 -56
- data/app/views/helena/questions/_long_text.html.haml +0 -8
- data/app/views/helena/questions/_radio_matrix.html.haml +0 -53
- data/app/views/helena/questions/_short_text.html.haml +0 -8
- data/config/initializers/simple_form_bootstrap.rb +0 -132
data/helena.gemspec
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
$LOAD_PATH.push File.expand_path('lib', __dir__)
|
2
2
|
|
3
3
|
# Maintain your gem's version:
|
4
4
|
require 'helena/version'
|
@@ -9,35 +9,31 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.version = Helena::VERSION
|
10
10
|
s.authors = ['Markus Graf']
|
11
11
|
s.email = ['info@markusgraf.ch']
|
12
|
-
s.licenses = ['GPL-3']
|
12
|
+
s.licenses = ['GPL-3.0+']
|
13
13
|
s.homepage = 'https://github.com/gurix/helena'
|
14
14
|
s.summary = 'Helena is an online survey/test framework designed for agile
|
15
15
|
survey/test development, longitudinal studies and instant feedback.'
|
16
16
|
s.description = 'Helena is an online survey/test framework designed for agile
|
17
17
|
survey/test development, longitudinal studies and instant feedback.'
|
18
18
|
|
19
|
-
s.files
|
20
|
-
s.test_files
|
19
|
+
s.files = `git ls-files`.split("\n")
|
20
|
+
s.test_files = `git ls-files -- {spec}/*`.split("\n")
|
21
21
|
|
22
|
-
s.add_dependency 'rails', '>= 4.2'
|
23
22
|
s.add_dependency 'mongoid', '>= 4.0'
|
24
|
-
s.add_dependency 'mongoid_orderable', '~> 4.1'
|
25
23
|
s.add_dependency 'mongoid-simple-tags', '>= 0.1.3'
|
26
|
-
s.add_dependency '
|
27
|
-
s.add_dependency '
|
28
|
-
s.add_dependency '
|
29
|
-
s.add_dependency 'sass-rails', '~> 5.0'
|
30
|
-
s.add_dependency 'bootstrap-sass', '~> 3.2'
|
31
|
-
s.add_dependency 'simple_form', '~> 3.2'
|
24
|
+
s.add_dependency 'mongoid-tree', '>= 2.0'
|
25
|
+
s.add_dependency 'mongoid_orderable', '>= 5.2'
|
26
|
+
s.add_dependency 'rails', '>= 4.2'
|
32
27
|
s.add_dependency 'rails-i18n', '>= 4.0'
|
33
|
-
s.add_dependency 'responders', '
|
34
|
-
s.add_dependency '
|
35
|
-
s.add_dependency '
|
28
|
+
s.add_dependency 'responders', '>= 2.0'
|
29
|
+
s.add_dependency 'sass-rails', '>= 5.0'
|
30
|
+
s.add_dependency 'simple_form', '>= 4'
|
31
|
+
s.add_dependency 'slim', '>= 3.0'
|
36
32
|
|
37
|
-
s.add_development_dependency '
|
38
|
-
s.add_development_dependency '
|
33
|
+
s.add_development_dependency 'appraisal'
|
34
|
+
s.add_development_dependency 'capybara', '>= 2.3'
|
39
35
|
s.add_development_dependency 'factory_bot_rails'
|
40
|
-
s.add_development_dependency 'faker', '
|
41
|
-
s.add_development_dependency '
|
42
|
-
s.add_development_dependency
|
36
|
+
s.add_development_dependency 'faker', '>= 1.4'
|
37
|
+
s.add_development_dependency 'rspec-collection_matchers', '>= 1'
|
38
|
+
s.add_development_dependency 'rspec-rails', '>= 3'
|
43
39
|
end
|
data/lib/helena.rb
CHANGED
@@ -1,14 +1,11 @@
|
|
1
1
|
require 'helena/engine'
|
2
|
-
require 'haml'
|
3
2
|
require 'helena/version_publisher'
|
4
3
|
require 'helena/survey_importer'
|
5
4
|
require 'mongoid'
|
6
|
-
require 'simple_form' # TODO: Remove this when amdin interface is finally moved
|
7
5
|
require 'mongoid_orderable'
|
8
6
|
require 'mongoid-simple-tags'
|
9
7
|
require 'slim'
|
10
8
|
require 'mongoid/tree'
|
11
|
-
require 'browser'
|
12
9
|
|
13
10
|
module Helena
|
14
11
|
end
|
data/lib/helena/engine.rb
CHANGED
@@ -5,7 +5,7 @@ module Helena
|
|
5
5
|
|
6
6
|
# Thanks to https://github.com/thoughtbot/factory_girl_rails/pull/42
|
7
7
|
initializer 'helena.factories', after: 'factory_bot.set_factory_paths' do
|
8
|
-
FactoryBot.definition_file_paths << File.expand_path('
|
8
|
+
FactoryBot.definition_file_paths << File.expand_path('../../spec/factories/helena', __dir__) if defined?(FactoryBot)
|
9
9
|
end
|
10
10
|
|
11
11
|
config.to_prepare do
|
@@ -5,7 +5,7 @@ module Helena
|
|
5
5
|
attr_accessor :survey
|
6
6
|
|
7
7
|
def initialize(yaml_string)
|
8
|
-
@parsed = YAML.
|
8
|
+
@parsed = YAML.safe_load yaml_string
|
9
9
|
|
10
10
|
create_survey
|
11
11
|
end
|
@@ -16,6 +16,7 @@ module Helena
|
|
16
16
|
@survey = Helena::Survey.find_or_initialize_by @parsed.except('versions')
|
17
17
|
return unless @survey.save!
|
18
18
|
return unless @parsed['versions']
|
19
|
+
|
19
20
|
@parsed['versions'].each { |parsed_version| create_version parsed_version }
|
20
21
|
end
|
21
22
|
|
@@ -24,6 +25,7 @@ module Helena
|
|
24
25
|
return unless version.new_record? # We ignore already imported versions
|
25
26
|
return unless version.save!
|
26
27
|
return unless parsed_version.last['question_groups']
|
28
|
+
|
27
29
|
parsed_version.last['question_groups'].each { |parsed_question_group| create_question_group version, parsed_question_group }
|
28
30
|
end
|
29
31
|
|
@@ -32,6 +34,7 @@ module Helena
|
|
32
34
|
question_group.position = parsed_question_group.first
|
33
35
|
return unless question_group.save!
|
34
36
|
return unless parsed_question_group.last['questions']
|
37
|
+
|
35
38
|
parsed_question_group.last['questions'].each { |parsed_question| create_question question_group, parsed_question }
|
36
39
|
end
|
37
40
|
|
data/lib/helena/version.rb
CHANGED
@@ -15,8 +15,8 @@ describe Helena::SessionsController do
|
|
15
15
|
context 'version not active' do
|
16
16
|
before { version.update_attribute :active, false }
|
17
17
|
|
18
|
-
it 'raises not found when editing' do
|
19
|
-
get :edit, parametrize(token: session.token)
|
18
|
+
it 'raises not found when editing' do
|
19
|
+
get :edit, parametrize(token: session.token)
|
20
20
|
is_expected.to respond_with :not_found
|
21
21
|
end
|
22
22
|
|
data/spec/dummy/Rakefile
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Add your own tasks in files placed in lib/tasks ending in .rake,
|
2
2
|
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
|
3
3
|
|
4
|
-
require File.expand_path('
|
4
|
+
require File.expand_path('config/application', __dir__)
|
5
5
|
|
6
6
|
Dummy::Application.load_tasks
|
@@ -1,22 +1,22 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
doctype html
|
2
|
+
html
|
3
|
+
head
|
4
|
+
title = "#{content_for(:title)} - #{t('.brand_name')}"
|
5
|
+
|
5
6
|
= stylesheet_link_tag 'helena/application', media: 'all'
|
6
7
|
= javascript_include_tag 'helena/application'
|
7
|
-
%meta{ name: 'viewport', content: 'initial-scale=1.0' }
|
8
8
|
= csrf_meta_tags
|
9
9
|
|
10
|
-
|
10
|
+
body
|
11
11
|
.container
|
12
12
|
- flash.each do |name, messages|
|
13
|
-
|
13
|
+
div class="alert alert-#{name}"
|
14
14
|
- if messages.is_a?(String)
|
15
15
|
= messages
|
16
16
|
- else
|
17
|
-
|
17
|
+
ul
|
18
18
|
- messages.each do |message|
|
19
|
-
|
20
|
-
|
19
|
+
li= message
|
20
|
+
h1
|
21
21
|
Helena
|
22
22
|
= yield
|
data/spec/dummy/bin/bundle
CHANGED
data/spec/dummy/bin/rails
CHANGED
@@ -1,11 +1,10 @@
|
|
1
|
-
require File.expand_path('
|
1
|
+
require File.expand_path('boot', __dir__)
|
2
2
|
|
3
3
|
# Pick the frameworks you want:
|
4
4
|
require 'action_controller/railtie'
|
5
5
|
require 'action_mailer/railtie'
|
6
6
|
require 'sprockets/railtie'
|
7
7
|
require 'rails/mongoid'
|
8
|
-
require 'browser'
|
9
8
|
|
10
9
|
Bundler.require(*Rails.groups)
|
11
10
|
require 'helena'
|
data/spec/dummy/config/boot.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# Set up gems listed in the Gemfile.
|
2
|
-
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('
|
2
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../Gemfile', __dir__)
|
3
3
|
|
4
4
|
require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
|
5
|
-
$LOAD_PATH.unshift File.expand_path('
|
5
|
+
$LOAD_PATH.unshift File.expand_path('../../../lib', __dir__)
|
@@ -18,20 +18,20 @@ feature 'Session management' do
|
|
18
18
|
|
19
19
|
second_question_group = base_version.question_groups.create title: 'Question Group 2', allow_to_go_back: true
|
20
20
|
|
21
|
-
all_and_everything = build :radio_group_question, code:
|
22
|
-
question_text:
|
23
|
-
position:
|
21
|
+
all_and_everything = build :radio_group_question, code: :all_and_everything,
|
22
|
+
question_text: 'What is the answer to the Ultimate Question of Life, the Universe, and Everything?',
|
23
|
+
position: 1
|
24
24
|
|
25
25
|
all_and_everything.labels << build(:label, position: 1, text: 'Just Chuck Norris knows it', value: 'norris')
|
26
26
|
all_and_everything.labels << build(:label, position: 2, text: 'God', value: 'god')
|
27
27
|
all_and_everything.labels << build(:label, position: 3, text: '42', value: 42)
|
28
|
-
all_and_everything.labels << build(:label, position: 4, text: 'Your mom', value: 'mom', preselected:
|
28
|
+
all_and_everything.labels << build(:label, position: 4, text: 'Your mom', value: 'mom', preselected: true)
|
29
29
|
|
30
30
|
second_question_group.questions << all_and_everything
|
31
31
|
|
32
|
-
food_allergy = build :checkbox_group_question, code:
|
33
|
-
question_text:
|
34
|
-
position:
|
32
|
+
food_allergy = build :checkbox_group_question, code: :food_allergy,
|
33
|
+
question_text: 'What kind of food allergy do you have?',
|
34
|
+
position: 2
|
35
35
|
|
36
36
|
food_allergy.sub_questions << build(:sub_question, text: 'Garlic', code: 'garlic', position: 1, preselected: true)
|
37
37
|
food_allergy.sub_questions << build(:sub_question, text: 'Oats', code: 'oat', position: 2)
|
@@ -41,10 +41,10 @@ feature 'Session management' do
|
|
41
41
|
|
42
42
|
third_question_group = base_version.question_groups.create title: 'Question Group 3', allow_to_go_back: true
|
43
43
|
|
44
|
-
satisfaction_matrix = build :radio_matrix_question, code:
|
44
|
+
satisfaction_matrix = build :radio_matrix_question, code: :satisfaction,
|
45
45
|
question_text: 'Below are five statements with which you may agree or disagree.',
|
46
|
-
required:
|
47
|
-
position:
|
46
|
+
required: true,
|
47
|
+
position: 1
|
48
48
|
|
49
49
|
satisfaction_matrix.labels << build(:label, position: 1, text: 'Strongly Disagree', value: 1)
|
50
50
|
satisfaction_matrix.labels << build(:label, position: 2, text: 'Disagree', value: 2)
|
@@ -57,8 +57,8 @@ feature 'Session management' do
|
|
57
57
|
satisfaction_matrix.sub_questions << build(:sub_question, text: 'In most ways my life is close to my ideal.', code: 'life_is_ideal', position: 1)
|
58
58
|
satisfaction_matrix.sub_questions << build(:sub_question, text: 'The conditions of my life are excellent.', code: 'condition', position: 2)
|
59
59
|
satisfaction_matrix.sub_questions << build(:sub_question, text: 'I am satisfied with life.', code: 'satisfied_with_life', position: 3)
|
60
|
-
satisfaction_matrix.sub_questions << build(:sub_question, text:
|
61
|
-
code:
|
60
|
+
satisfaction_matrix.sub_questions << build(:sub_question, text: 'So far I have gotten the important things I want in life.',
|
61
|
+
code: 'important_things',
|
62
62
|
position: 4)
|
63
63
|
satisfaction_matrix.sub_questions << build(:sub_question, text: 'If I could live my life over, I would change almost nothing.',
|
64
64
|
code: 'nothing_to_change',
|
@@ -84,8 +84,9 @@ feature 'Session management' do
|
|
84
84
|
|
85
85
|
expect(page).not_to have_link 'Back'
|
86
86
|
|
87
|
-
fill_in '
|
88
|
-
|
87
|
+
fill_in "What's your name?", with: 'Hans'
|
88
|
+
|
89
|
+
fill_in 'Give a brief description of yourself', with: 'I am a proud man living in middle earth.'
|
89
90
|
|
90
91
|
expect { click_button 'Next' }.to change { session.reload.answers.count }.from(0).to(2)
|
91
92
|
expect(session.reload.last_question_group_id).to eq second_question_group.id
|
@@ -174,9 +175,12 @@ feature 'Session management' do
|
|
174
175
|
|
175
176
|
visit helena.edit_session_path(session.token)
|
176
177
|
|
177
|
-
expect(page).to have_content "What's your name
|
178
|
+
expect(page).to have_content "What's your name?*"
|
178
179
|
expect(page).to have_content '* indicates required fields'
|
179
|
-
expect { click_button 'Save' }.not_to
|
180
|
+
expect { click_button 'Save' }.not_to(change { session.reload.answers.count })
|
181
|
+
expect(page).to have_content('One or more questions have not been answered correctly.')
|
182
|
+
expect(page).to have_content("«What's your name?» can't be blank.")
|
183
|
+
|
180
184
|
expect(page).to have_content("can't be blank")
|
181
185
|
end
|
182
186
|
|
@@ -200,15 +204,15 @@ feature 'Session management' do
|
|
200
204
|
|
201
205
|
visit helena.edit_session_path(session.token)
|
202
206
|
|
203
|
-
expect(page).to have_content 'Give a brief description of yourself
|
204
|
-
expect { click_button 'Save' }.not_to
|
207
|
+
expect(page).to have_content 'Give a brief description of yourself*'
|
208
|
+
expect { click_button 'Save' }.not_to(change { session.reload.answers.count })
|
205
209
|
expect(page).to have_content("can't be blank")
|
206
210
|
end
|
207
211
|
|
208
212
|
scenario 'does not save a non selected radio group when required' do
|
209
|
-
all_and_everything = build :radio_group_question, code:
|
210
|
-
question_text:
|
211
|
-
required:
|
213
|
+
all_and_everything = build :radio_group_question, code: :all_and_everything,
|
214
|
+
question_text: 'What is the answer to the Ultimate Question of Life, the Universe, and Everything?',
|
215
|
+
required: true
|
212
216
|
|
213
217
|
all_and_everything.labels << build(:label, value: 'norris')
|
214
218
|
all_and_everything.labels << build(:label, value: 'god')
|
@@ -221,16 +225,16 @@ feature 'Session management' do
|
|
221
225
|
|
222
226
|
visit helena.edit_session_path(session.token)
|
223
227
|
|
224
|
-
expect(page).to have_content 'What is the answer to the Ultimate Question of Life, the Universe, and Everything
|
225
|
-
expect { click_button 'Save' }.not_to
|
228
|
+
expect(page).to have_content 'What is the answer to the Ultimate Question of Life, the Universe, and Everything?*'
|
229
|
+
expect { click_button 'Save' }.not_to(change { session.reload.answers.count })
|
226
230
|
|
227
231
|
expect(page).to have_content("can't be blank")
|
228
232
|
end
|
229
233
|
|
230
234
|
scenario 'does not save when no subquestion of a checkbox group is selected if required' do
|
231
|
-
food_allergy = build :checkbox_group_question, code:
|
232
|
-
question_text:
|
233
|
-
required:
|
235
|
+
food_allergy = build :checkbox_group_question, code: :food_allergy,
|
236
|
+
question_text: 'What kind of food allergy do you have?',
|
237
|
+
required: true
|
234
238
|
|
235
239
|
food_allergy.sub_questions << build(:sub_question, text: 'Garlic', code: 'garlic')
|
236
240
|
food_allergy.sub_questions << build(:sub_question, text: 'Oats', code: 'oat')
|
@@ -242,15 +246,15 @@ feature 'Session management' do
|
|
242
246
|
|
243
247
|
visit helena.edit_session_path(session.token)
|
244
248
|
|
245
|
-
expect(page).to have_content 'What kind of food allergy do you have
|
249
|
+
expect(page).to have_content 'What kind of food allergy do you have?*'
|
246
250
|
expect { click_button 'Save' }.to change { session.reload.answers.map(&:value) }.from([]).to([0, 0, 0])
|
247
251
|
expect(page).to have_content("can't be blank")
|
248
252
|
end
|
249
253
|
|
250
254
|
scenario 'saves when subquestion of a checkbox group is selected if required' do
|
251
|
-
food_allergy = build :checkbox_group_question, code:
|
252
|
-
question_text:
|
253
|
-
required:
|
255
|
+
food_allergy = build :checkbox_group_question, code: :food_allergy,
|
256
|
+
question_text: 'What kind of food allergy do you have?',
|
257
|
+
required: true
|
254
258
|
|
255
259
|
food_allergy.sub_questions << build(:sub_question, text: 'Garlic', code: 'garlic')
|
256
260
|
food_allergy.sub_questions << build(:sub_question, text: 'Oats', code: 'oat')
|
@@ -262,16 +266,16 @@ feature 'Session management' do
|
|
262
266
|
|
263
267
|
visit helena.edit_session_path(session.token)
|
264
268
|
|
265
|
-
expect(page).to have_content 'What kind of food allergy do you have
|
269
|
+
expect(page).to have_content 'What kind of food allergy do you have?*'
|
266
270
|
check('Oats')
|
267
271
|
expect { click_button 'Save' }.to change { session.reload.answers.count }.from(0).to(3)
|
268
272
|
expect(page).not_to have_content("can't be blank")
|
269
273
|
end
|
270
274
|
|
271
275
|
scenario 'does not save when radio matrix is filled out completely if required' do
|
272
|
-
satisfaction_matrix = build :radio_matrix_question, code:
|
276
|
+
satisfaction_matrix = build :radio_matrix_question, code: :satisfaction,
|
273
277
|
question_text: 'Below are five statements with which you may agree or disagree.',
|
274
|
-
required:
|
278
|
+
required: true
|
275
279
|
|
276
280
|
satisfaction_matrix.labels << build(:label, value: 1)
|
277
281
|
satisfaction_matrix.labels << build(:label, value: 2)
|
@@ -293,7 +297,7 @@ feature 'Session management' do
|
|
293
297
|
|
294
298
|
visit helena.edit_session_path(session.token)
|
295
299
|
|
296
|
-
expect(page).to have_content 'Below are five statements with which you may agree or disagree
|
300
|
+
expect(page).to have_content 'Below are five statements with which you may agree or disagree.*'
|
297
301
|
|
298
302
|
choose('session_answers_satisfied_with_life_3')
|
299
303
|
|
@@ -303,7 +307,7 @@ feature 'Session management' do
|
|
303
307
|
end
|
304
308
|
|
305
309
|
scenario 'Displaying a bipolar radio matrix question"' do
|
306
|
-
radio_matrix = build :bipolar_radio_matrix_question, code:
|
310
|
+
radio_matrix = build :bipolar_radio_matrix_question, code: :satisfaction,
|
307
311
|
question_text: 'What do you like more?'
|
308
312
|
|
309
313
|
radio_matrix.labels << build(:label, value: 1, text: 'Yo')
|
@@ -321,7 +325,7 @@ feature 'Session management' do
|
|
321
325
|
|
322
326
|
visit helena.edit_session_path(session.token)
|
323
327
|
|
324
|
-
expect(page.all('table thead tr th').size).to eq
|
328
|
+
expect(page.all('table thead tr th').size).to eq 3
|
325
329
|
expect(page.find('table tbody tr:first td:first')).to have_content 'Ice cream'
|
326
330
|
expect(page.find('table tbody tr:last td:first')).to have_content 'I am not splitted'
|
327
331
|
expect(page.find('table tbody tr:last td:last').text).to be_empty
|
@@ -43,20 +43,13 @@ describe Helena::Session do
|
|
43
43
|
end.to change { session.answers.find_by(code: 'a').value }.from(42).to(666)
|
44
44
|
end
|
45
45
|
|
46
|
-
it 'does not affect the answer when the value is the same' do
|
47
|
-
expect do
|
48
|
-
session.answers_as_yaml = 'a: 42'
|
49
|
-
session.save
|
50
|
-
end.not_to change { session.answers.find_by code: 'a' }
|
51
|
-
end
|
52
|
-
|
53
46
|
it 'removes existings answers that is not in the yaml' do
|
54
47
|
expect do
|
55
48
|
session.answers_as_yaml = 'x: "test"'
|
56
49
|
session.save
|
57
50
|
end.to change { session.reload.answers.size }.by(-2)
|
58
51
|
|
59
|
-
expect(session.answers.in(code: %w
|
52
|
+
expect(session.answers.in(code: %w[a b c]).size).to eq 0
|
60
53
|
end
|
61
54
|
end
|
62
55
|
end
|
@@ -40,7 +40,7 @@ describe Helena::SubQuestion do
|
|
40
40
|
it 'returns correct parts' do
|
41
41
|
splitted_sub_question = build :sub_question, question: question, text: 'first|last'
|
42
42
|
|
43
|
-
expect(splitted_sub_question.parts).to eq %w
|
43
|
+
expect(splitted_sub_question.parts).to eq %w[first last]
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|