helena_administration 0.0.2 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/Gemfile +5 -6
  4. data/Gemfile.lock +213 -157
  5. data/README.md +8 -7
  6. data/app/assets/stylesheets/helena_administration.css.sass +3 -2
  7. data/app/controllers/helena_administration/application_controller.rb +1 -7
  8. data/app/controllers/helena_administration/question_groups_controller.rb +2 -2
  9. data/app/controllers/helena_administration/questions/bipolar_radio_matrices_controller.rb +6 -0
  10. data/app/controllers/helena_administration/questions/{checkbox_matrix_controller.rb → checkbox_matrices_controller.rb} +1 -1
  11. data/app/controllers/helena_administration/questions/{radio_matrix_controller.rb → radio_matrices_controller.rb} +1 -1
  12. data/app/controllers/helena_administration/questions_controller.rb +4 -3
  13. data/app/controllers/helena_administration/sessions_controller.rb +46 -2
  14. data/app/controllers/helena_administration/versions_controller.rb +2 -2
  15. data/app/views/helena_administration/questions/_form.html.slim +1 -0
  16. data/config/routes.rb +3 -2
  17. data/helena_administration.gemspec +9 -6
  18. data/lib/helena_administration/version.rb +1 -1
  19. data/lib/helena_administration.rb +1 -1
  20. data/spec/controllers/dashboard_controller_spec.rb +1 -1
  21. data/spec/controllers/sessions_controller_spec.rb +69 -77
  22. data/spec/dummy/config/environments/test.rb +1 -1
  23. data/spec/dummy/config/initializers/assets.rb +1 -1
  24. data/spec/features/dashboard/index.html.slim_spec.rb +1 -1
  25. data/spec/features/question_groups/manage_question_groups_spec.rb +1 -3
  26. data/spec/features/questions/manage_questions_spec.rb +6 -1
  27. data/spec/features/questions/question_types/manage_bipolar_radio_matrix_question_spec.rb +78 -0
  28. data/spec/features/questions/question_types/manage_checkbox_group_question_spec.rb +1 -1
  29. data/spec/features/questions/question_types/manage_long_text_question_spec.rb +1 -1
  30. data/spec/features/questions/question_types/manage_radio_group_question_spec.rb +1 -1
  31. data/spec/features/questions/question_types/manage_radio_matrix_question_spec.rb +1 -1
  32. data/spec/features/questions/question_types/manage_short_text_question_spec.rb +1 -1
  33. data/spec/features/questions/question_types/manage_static_text_question_spec.rb +1 -1
  34. data/spec/features/sessions/manage_sessions_spec.rb +3 -1
  35. data/spec/features/surveys/manage_survey_spec.rb +1 -1
  36. data/spec/features/versions/manage_version_spec.rb +1 -3
  37. data/spec/helpers/applicatin_helper_spec.rb +1 -1
  38. data/spec/spec_helper.rb +8 -28
  39. metadata +48 -21
  40. data/spec/controllers/survey_controller_spec.rb +0 -36
  41. data/spec/dummy/app/decorators/controllers/helena_administration/application_controller_decorator.rb +0 -5
  42. data/spec/rails_helper.rb +0 -23
@@ -1,6 +1,6 @@
1
1
  module HelenaAdministration
2
2
  module Questions
3
- class RadioMatrixController < QuestionsController
3
+ class RadioMatricesController < QuestionsController
4
4
  include Helena::Concerns::Questions::MatrixQuestions
5
5
  end
6
6
  end
@@ -18,10 +18,11 @@ module HelenaAdministration
18
18
  @question = @question_group.questions.build question_params
19
19
  if @question.save
20
20
  flash[:success] = t 'shared.actions.created'
21
+ respond_with @question, location: [@survey, @version, @question_group, @question]
21
22
  else
22
- flash.now[:danger] = t 'shared.actions.error'
23
+ flash[:danger] = t 'shared.actions.error'
24
+ render 'new'
23
25
  end
24
- respond_with [@survey, @version, @question_group, @question]
25
26
  end
26
27
 
27
28
  def edit
@@ -78,7 +79,7 @@ module HelenaAdministration
78
79
  end
79
80
 
80
81
  def question_params
81
- required_param.permit(permited_params + [:question_text, :code, :_type])
82
+ required_param.permit(permited_params + [:position, :question_text, :code, :_type])
82
83
  end
83
84
 
84
85
  def permited_params
@@ -1,6 +1,9 @@
1
+ require 'csv'
1
2
  module HelenaAdministration
2
3
  class SessionsController < ApplicationController
3
- respond_to :html
4
+ include ActionController::Live
5
+
6
+ respond_to :html, :json, :csv
4
7
 
5
8
  before_filter :load_survey, :add_breadcrumbs
6
9
  before_filter :load_session, only: [:edit, :update, :destroy]
@@ -9,7 +12,9 @@ module HelenaAdministration
9
12
  respond_to do |format|
10
13
  @sessions = @survey.sessions.desc(:created_at)
11
14
  format.json { render json: @sessions }
12
- format.csv { render text: @sessions.to_csv }
15
+ format.csv do
16
+ render_csv
17
+ end
13
18
  end
14
19
  end
15
20
 
@@ -40,6 +45,29 @@ module HelenaAdministration
40
45
 
41
46
  private
42
47
 
48
+ def render_csv
49
+ response.headers['Content-Disposition'] = "attachment; filename=#{@survey.name}.csv"
50
+ response.headers['Content-Type'] = 'text/csv'
51
+
52
+ # Write csv header once ...
53
+ response.stream.write CSV.generate_line(session_fields + question_codes)
54
+
55
+ # .. and generate a line for each session.
56
+ @sessions.each do |session|
57
+ response.stream.write CSV.generate_line(session_values(session) + answer_values(session, question_codes))
58
+ end
59
+ ensure
60
+ response.stream.close
61
+ end
62
+
63
+ def session_values(session)
64
+ session_fields.map { |field| session.attributes[field] }
65
+ end
66
+
67
+ def answer_values(session, answer_codes)
68
+ answer_codes.map { |code| session.answers.where(code: code).first.try(&:value) }
69
+ end
70
+
43
71
  def add_breadcrumbs
44
72
  add_breadcrumb t('shared.navigation.dashboard'), dashboard_index_path
45
73
  add_breadcrumb Helena::Survey.model_name.human(count: 2), surveys_path
@@ -56,5 +84,21 @@ module HelenaAdministration
56
84
  def session_params
57
85
  params.require(:session).permit :token, :view_token, :answers_as_yaml, :completed, :last_question_group_id
58
86
  end
87
+
88
+ def question_codes
89
+ @question_codes ||= unique_question_codes
90
+ end
91
+
92
+ # It could be possible that an answer code equals a session field. We add "answer_" in that case so that we get uniqe question codes for sure
93
+ def unique_question_codes
94
+ codes = @survey.versions.map(&:question_codes).flatten
95
+ codes.map do |code|
96
+ session_fields.include?(code) ? "answer_#{code}" : code
97
+ end
98
+ end
99
+
100
+ def session_fields
101
+ Helena::Session.fields.keys
102
+ end
59
103
  end
60
104
  end
@@ -23,7 +23,7 @@ module HelenaAdministration
23
23
  else
24
24
  flash.now[:danger] = t 'shared.actions.error'
25
25
  end
26
- respond_with [@survey, @version]
26
+ respond_with @version, location: [@survey, @version]
27
27
  end
28
28
 
29
29
  def edit
@@ -38,7 +38,7 @@ module HelenaAdministration
38
38
  flash.now[:danger] = t 'shared.actions.error'
39
39
  add_breadcrumb t 'helena_administration.versions.version', version: @version.version
40
40
  end
41
- respond_with [@survey, @version], location: [:edit, @survey, @version]
41
+ respond_with @version, location: [:edit, @survey, @version]
42
42
  end
43
43
 
44
44
  def destroy
@@ -1,4 +1,5 @@
1
1
  = simple_form_for [@survey, @version, @question_group, question] do |f|
2
+ = f.input :position
2
3
  = f.input :question_text
3
4
  = f.input :code, hint: t('shared.code_hint')
4
5
  = f.input :_type, collection: Helena::Question::TYPES.map { |type| [type.model_name.human, type] }
data/config/routes.rb CHANGED
@@ -15,8 +15,9 @@ HelenaAdministration::Engine.routes.draw do
15
15
  resources :static_texts, module: 'questions'
16
16
  resources :radio_groups, module: 'questions'
17
17
  resources :checkbox_groups, module: 'questions'
18
- resources :radio_matrix, module: 'questions'
19
- resources :checkbox_matrix, module: 'questions'
18
+ resources :radio_matrices, module: 'questions'
19
+ resources :bipolar_radio_matrices, module: 'questions'
20
+ resources :checkbox_matrices, module: 'questions'
20
21
  end
21
22
  end
22
23
  end
@@ -18,20 +18,23 @@ Gem::Specification.new do |s|
18
18
  s.test_files = `git ls-files -- {spec}/*`.split("\n")
19
19
 
20
20
  s.add_runtime_dependency 'kaminari', '~> 0.16'
21
- s.add_runtime_dependency 'rails', '~> 4.1'
22
- s.add_runtime_dependency 'slim-rails', '~> 2.1'
23
- s.add_runtime_dependency 'codemirror-rails', '~> 4.5'
21
+ s.add_runtime_dependency 'rails', '~> 4.2'
22
+ s.add_runtime_dependency 'slim-rails', '~> 3.0'
23
+ s.add_runtime_dependency 'codemirror-rails', '~> 5'
24
24
  s.add_dependency 'mongoid', '~> 4.0'
25
25
  s.add_dependency 'mongoid_orderable', '~> 4.1'
26
26
  s.add_dependency 'mongoid-simple-tags', '~> 0.1'
27
27
  s.add_dependency 'haml-rails', '~> 0.5'
28
28
  s.add_runtime_dependency 'html5-rails', '~> 0.1'
29
- s.add_dependency 'jquery-rails', '~> 3.1'
30
- s.add_runtime_dependency 'sass-rails', '~> 4.0'
29
+ s.add_dependency 'jquery-rails', '~> 4'
30
+ s.add_runtime_dependency 'sass-rails', '~> 5.0'
31
31
  s.add_dependency 'bootstrap-sass', '~> 3.2'
32
32
  s.add_dependency 'simple_form', '~> 3.1.0.rc2'
33
33
  s.add_dependency 'breadcrumbs_on_rails', '~> 2.3'
34
34
  s.add_dependency 'rails-i18n', '~> 4.0'
35
- s.add_runtime_dependency 'font-awesome-rails', '~> 4.2'
35
+ s.add_runtime_dependency 'font-awesome-sass', '~> 4.3.0'
36
36
  s.add_runtime_dependency 'coffee-rails', '~> 4.1'
37
+ s.add_dependency 'responders', '~> 2.0'
38
+
39
+ s.add_development_dependency 'database_cleaner', '~> 1.3'
37
40
  end
@@ -1,3 +1,3 @@
1
1
  module HelenaAdministration
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.5'
3
3
  end
@@ -2,7 +2,7 @@ require 'helena_administration/engine'
2
2
  require 'breadcrumbs_on_rails'
3
3
  require 'html5-rails'
4
4
  require 'bootstrap-sass'
5
- require 'font-awesome-rails'
5
+ require 'font-awesome-sass'
6
6
  require 'codemirror-rails'
7
7
  require 'jquery-rails'
8
8
  require 'helena'
@@ -1,4 +1,4 @@
1
- require 'rails_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe HelenaAdministration::DashboardController do
4
4
  routes { HelenaAdministration::Engine.routes }
@@ -1,102 +1,94 @@
1
- require 'rails_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe HelenaAdministration::SessionsController do
4
4
  routes { HelenaAdministration::Engine.routes }
5
5
 
6
6
  let(:survey) { create :survey }
7
-
8
- context 'without authorization' do
9
- before { allow_any_instance_of(HelenaAdministration::ApplicationController).to receive(:can_administer?).and_return false }
10
-
11
- specify 'trying to list surveys throws an error' do
12
- expect { get :index, survey_id: survey }.to raise_error(ActionController::RoutingError, 'Access Denied')
13
- end
14
-
15
- specify 'trying to export surveys as json throws an error' do
16
- expect { get :index, survey_id: survey, format: :json }.to raise_error(ActionController::RoutingError, 'Access Denied')
17
- end
18
-
19
- specify 'trying to export surveys as csv throws an error' do
20
- expect { get :index, survey_id: survey, format: :csv }.to raise_error(ActionController::RoutingError, 'Access Denied')
21
- end
7
+ let(:version) { survey.versions.create version: 0 }
8
+ let(:question_group) { version.question_groups.create title: 'Abakadabara' }
9
+
10
+ before do
11
+ question_group.questions.create code: 'string_answer_1', question_text: 'Yo!', _type: Helena::Questions::LongText
12
+ question_group.questions.create code: 'integer_answer_1', question_text: 'Bo', _type: Helena::Questions::ShortText
13
+
14
+ question_group.questions.create code: 'string_answer_2', question_text: 'Hip', _type: Helena::Questions::LongText
15
+ question_group.questions.create code: 'integer_answer_2', question_text: 'Hop', _type: Helena::Questions::ShortText
16
+
17
+ create :session, survey: survey, answers: [
18
+ build(:string_answer, code: 'string_answer_1', value: 'abc'),
19
+ build(:integer_answer, code: 'integer_answer_1', value: '123')
20
+ ]
21
+ create :session, survey: survey, answers: [
22
+ build(:string_answer, code: 'string_answer_2', value: 'def, xyz'),
23
+ build(:integer_answer, code: 'integer_answer_2', value: '456')
24
+ ]
22
25
  end
23
26
 
24
- context 'with authorization' do
25
- before do
26
- create :session, survey: survey, answers: [
27
- build(:string_answer, code: 'string_answer_1', value: 'abc'),
28
- build(:integer_answer, code: 'integer_answer_1', value: '123')
29
- ]
30
- create :session, survey: survey, answers: [
31
- build(:string_answer, code: 'string_answer_2', value: 'def, xyz'),
32
- build(:integer_answer, code: 'integer_answer_2', value: '456')
33
- ]
34
- end
35
-
36
- it 'return json result of all sessions' do
37
- get :index, survey_id: survey, format: :json
27
+ it 'return json result of all sessions' do
28
+ get :index, survey_id: survey, format: :json
38
29
 
39
- first_result = ActiveSupport::JSON.decode(response.body).first
30
+ first_result = ActiveSupport::JSON.decode(response.body).first
40
31
 
41
- expect(first_result['answers'].first['code']).to eq 'string_answer_2'
42
- expect(first_result['answers'].first['value']).to eq 'def, xyz'
43
- expect(first_result['answers'].last['code']).to eq 'integer_answer_2'
44
- expect(first_result['answers'].last['value']).to eq 456
32
+ expect(first_result['answers'].first['code']).to eq 'string_answer_2'
33
+ expect(first_result['answers'].first['value']).to eq 'def, xyz'
34
+ expect(first_result['answers'].last['code']).to eq 'integer_answer_2'
35
+ expect(first_result['answers'].last['value']).to eq 456
45
36
 
46
- last_result = ActiveSupport::JSON.decode(response.body).last
37
+ last_result = ActiveSupport::JSON.decode(response.body).last
47
38
 
48
- expect(last_result['answers'].first['code']).to eq 'string_answer_1'
49
- expect(last_result['answers'].first['value']).to eq 'abc'
50
- expect(last_result['answers'].last['code']).to eq 'integer_answer_1'
51
- expect(last_result['answers'].last['value']).to eq 123
52
- end
39
+ expect(last_result['answers'].first['code']).to eq 'string_answer_1'
40
+ expect(last_result['answers'].first['value']).to eq 'abc'
41
+ expect(last_result['answers'].last['code']).to eq 'integer_answer_1'
42
+ expect(last_result['answers'].last['value']).to eq 123
43
+ end
53
44
 
54
- it 'return json result of all sessions' do
55
- get :index, survey_id: survey, format: :json
45
+ it 'return json result of all sessions' do
46
+ get :index, survey_id: survey, format: :json
56
47
 
57
- first_result = ActiveSupport::JSON.decode(response.body).first
48
+ first_result = ActiveSupport::JSON.decode(response.body).first
58
49
 
59
- expect(first_result['answers'].first['code']).to eq 'string_answer_2'
60
- expect(first_result['answers'].first['value']).to eq 'def, xyz'
61
- expect(first_result['answers'].last['code']).to eq 'integer_answer_2'
62
- expect(first_result['answers'].last['value']).to eq 456
50
+ expect(first_result['answers'].first['code']).to eq 'string_answer_2'
51
+ expect(first_result['answers'].first['value']).to eq 'def, xyz'
52
+ expect(first_result['answers'].last['code']).to eq 'integer_answer_2'
53
+ expect(first_result['answers'].last['value']).to eq 456
63
54
 
64
- last_result = ActiveSupport::JSON.decode(response.body).last
55
+ last_result = ActiveSupport::JSON.decode(response.body).last
65
56
 
66
- expect(last_result['answers'].first['code']).to eq 'string_answer_1'
67
- expect(last_result['answers'].first['value']).to eq 'abc'
68
- expect(last_result['answers'].last['code']).to eq 'integer_answer_1'
69
- expect(last_result['answers'].last['value']).to eq 123
70
- end
57
+ expect(last_result['answers'].first['code']).to eq 'string_answer_1'
58
+ expect(last_result['answers'].first['value']).to eq 'abc'
59
+ expect(last_result['answers'].last['code']).to eq 'integer_answer_1'
60
+ expect(last_result['answers'].last['value']).to eq 123
61
+ end
71
62
 
72
- it 'return csv result of all sessions' do
73
- get :index, survey_id: survey, format: :csv
63
+ it 'return csv result of all sessions' do
64
+ get :index, survey_id: survey, format: :csv
74
65
 
75
- csv = CSV.parse(response.body)
76
- %w(string_answer_2 integer_answer_2 string_answer_1 integer_answer_1).each do |code|
77
- expect(csv.first).to include code
78
- end
66
+ csv = CSV.parse(response.body)
67
+ %w(string_answer_2 integer_answer_2 string_answer_1 integer_answer_1).each do |code|
68
+ expect(csv.first).to include code
69
+ end
79
70
 
80
- ['456', 'def, xyz'].each do |value|
81
- expect(csv[1]).to include value
82
- end
71
+ ['456', 'def, xyz'].each do |value|
72
+ expect(csv[1]).to include value
73
+ end
83
74
 
84
- %w(123 abc).each do |value|
85
- expect(csv[2]).to include value
86
- end
75
+ %w(123 abc).each do |value|
76
+ expect(csv[2]).to include value
87
77
  end
78
+ end
88
79
 
89
- specify 'csv header for all sessions does not allow same column names for answers and session fields' do
90
- create :session, survey: survey, answers: [
91
- build(:boolean_answer, code: 'completed', value: true),
92
- build(:string_answer, code: 'token', value: 'abcdefghijklmnopqrstuvwxyz')
93
- ]
94
- get :index, survey_id: survey, format: :csv
95
-
96
- csv = CSV.parse(response.body)
97
- %w(answer_token answer_completed).each do |code|
98
- expect(csv.first).to include code
99
- end
80
+ specify 'csv header for all sessions does not allow same column names for answers and session fields' do
81
+ question_group.questions.create code: 'completed', question_text: 'Good', _type: Helena::Questions::LongText
82
+ question_group.questions.create code: 'token', question_text: 'Point', _type: Helena::Questions::ShortText
83
+ create :session, survey: survey, answers: [
84
+ build(:boolean_answer, code: 'completed', value: true),
85
+ build(:string_answer, code: 'token', value: 'abcdefghijklmnopqrstuvwxyz')
86
+ ]
87
+ get :index, survey_id: survey, format: :csv
88
+
89
+ csv = CSV.parse(response.body)
90
+ %w(answer_token answer_completed).each do |code|
91
+ expect(csv.first).to include code
100
92
  end
101
93
  end
102
94
  end
@@ -13,7 +13,7 @@ Rails.application.configure do
13
13
  config.eager_load = false
14
14
 
15
15
  # Configure static asset server for tests with Cache-Control for performance.
16
- config.serve_static_assets = true
16
+ config.serve_static_files = true
17
17
  config.static_cache_control = 'public, max-age=3600'
18
18
 
19
19
  # Show full error reports and disable caching.
@@ -6,4 +6,4 @@ Rails.application.config.assets.version = '1.0'
6
6
  # Precompile additional assets.
7
7
  # application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
8
8
  # Rails.application.config.assets.precompile += %w( search.js )
9
- Rails.application.config.assets.precompile += %w( codemirror.css polyfills.js helena_administration.css )
9
+ Rails.application.config.assets.precompile += %w( codemirror* codemirror/**/* polyfills.js helena_administration.css )
@@ -1,4 +1,4 @@
1
- require 'rails_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe 'Dashboard' do
4
4
  scenario 'User visits the index page that links to the survey management' do
@@ -1,7 +1,6 @@
1
- require 'rails_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe 'Question groups' do
4
-
5
4
  let!(:survey) { create :survey }
6
5
  let!(:version) { survey.versions.create version: 0 }
7
6
 
@@ -45,7 +44,6 @@ describe 'Question groups' do
45
44
 
46
45
  expect(new_question_group.position).to eq 77
47
46
  expect(new_question_group.title).to eq 'Foo Bar'
48
-
49
47
  end
50
48
 
51
49
  scenario 'User edits question_group' do
@@ -1,4 +1,4 @@
1
- require 'rails_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe 'Questions' do
4
4
  let!(:survey) { create :survey }
@@ -33,6 +33,7 @@ describe 'Questions' do
33
33
 
34
34
  fill_in 'Code', with: 'a38'
35
35
  fill_in 'Question text', with: 'Shall we go?'
36
+ fill_in 'Position', with: 32
36
37
 
37
38
  within '.breadcrumbs' do
38
39
  expect(page).to have_text 'New question'
@@ -47,6 +48,8 @@ describe 'Questions' do
47
48
  fill_in 'Code', with: ''
48
49
 
49
50
  expect { click_button 'Save' }.to change { question_group.reload.questions.count }.by(0)
51
+
52
+ expect(page).to have_content "can't be blank"
50
53
  end
51
54
 
52
55
  scenario 'edits a question' do
@@ -56,11 +59,13 @@ describe 'Questions' do
56
59
 
57
60
  fill_in 'Question text', with: 'Are you sure?'
58
61
  fill_in 'Code', with: 'b12'
62
+ fill_in 'Position', with: 42
59
63
 
60
64
  click_button 'Save'
61
65
 
62
66
  expect(question.reload.question_text).to eq 'Are you sure?'
63
67
  expect(question.reload.code).to eq 'b12'
68
+ expect(question.reload.position).to eq 42
64
69
  end
65
70
 
66
71
  scenario 'edits a question errors when code text is empty' do
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Bipolar radio matrix question management' do
4
+ let!(:survey) { create :survey }
5
+ let!(:version) { survey.versions.create version: 0 }
6
+ let!(:question_group) { version.question_groups.create title: 'Abakadabara' }
7
+ let!(:question) { create :bipolar_radio_matrix_question, question_group: question_group }
8
+
9
+ scenario 'edits a question' do
10
+ question.labels.create text: 'Strongly disagree', value: '-1', position: 1
11
+ question.sub_questions.create code: 'aperto', text: 'Aperto Snacks', value: 'Aperto', position: 1
12
+
13
+ visit edit_survey_version_question_group_questions_bipolar_radio_matrix_path(survey, version, question_group, question)
14
+
15
+ check 'Required'
16
+
17
+ fill_in 'questions_bipolar_radio_matrix_labels_attributes_0_position', with: '2'
18
+ fill_in 'questions_bipolar_radio_matrix_labels_attributes_0_text', with: 'Strongly agree'
19
+ fill_in 'questions_bipolar_radio_matrix_labels_attributes_0_value', with: '1'
20
+ check 'questions_bipolar_radio_matrix_labels_attributes_0_preselected'
21
+
22
+ fill_in 'questions_bipolar_radio_matrix_sub_questions_attributes_0_position', with: '2'
23
+ fill_in 'questions_bipolar_radio_matrix_sub_questions_attributes_0_text', with: 'Avec Shop'
24
+ fill_in 'questions_bipolar_radio_matrix_sub_questions_attributes_0_code', with: 'avec'
25
+
26
+ click_button 'Save'
27
+
28
+ expect(question.reload.labels.first.position).to eq 2
29
+ expect(question.reload.labels.first.text).to eq 'Strongly agree'
30
+ expect(question.reload.labels.first.value).to eq '1'
31
+ expect(question.reload.labels.first.preselected).to eq true
32
+
33
+ expect(question.reload.sub_questions.first.position).to eq 2
34
+ expect(question.reload.sub_questions.first.text).to eq 'Avec Shop'
35
+ expect(question.reload.sub_questions.first.code).to eq 'avec'
36
+
37
+ expect(question.reload.required).to eq true
38
+ end
39
+
40
+ scenario 'adds a an option' do
41
+ visit edit_survey_version_question_group_questions_bipolar_radio_matrix_path(survey, version, question_group, question)
42
+
43
+ fill_in 'questions_bipolar_radio_matrix_labels_attributes_0_position', with: '2'
44
+ fill_in 'questions_bipolar_radio_matrix_labels_attributes_0_text', with: 'Strongly agree'
45
+ fill_in 'questions_bipolar_radio_matrix_labels_attributes_0_value', with: '1'
46
+ check 'questions_bipolar_radio_matrix_labels_attributes_0_preselected'
47
+
48
+ fill_in 'questions_bipolar_radio_matrix_sub_questions_attributes_0_position', with: '2'
49
+ fill_in 'questions_bipolar_radio_matrix_sub_questions_attributes_0_text', with: 'Avec Shop'
50
+ fill_in 'questions_bipolar_radio_matrix_sub_questions_attributes_0_code', with: 'avec'
51
+
52
+ click_button 'Save'
53
+
54
+ expect(question.reload.labels.first.position).to eq 2
55
+ expect(question.reload.labels.first.text).to eq 'Strongly agree'
56
+ expect(question.reload.labels.first.value).to eq '1'
57
+ expect(question.reload.labels.first.preselected).to eq true
58
+
59
+ expect(question.reload.sub_questions.first.position).to eq 2
60
+ expect(question.reload.sub_questions.first.text).to eq 'Avec Shop'
61
+ expect(question.reload.sub_questions.first.code).to eq 'avec'
62
+ end
63
+
64
+ scenario 'removes an option' do
65
+ question.labels.create text: 'Male', value: 'm', position: 1
66
+ question.sub_questions.create code: 'aperto', text: 'Aperto Snacks', value: 'Aperto', position: 1
67
+
68
+ visit edit_survey_version_question_group_questions_bipolar_radio_matrix_path(survey, version, question_group, question)
69
+
70
+ check 'questions_bipolar_radio_matrix_labels_attributes_0__destroy'
71
+ check 'questions_bipolar_radio_matrix_sub_questions_attributes_0__destroy'
72
+
73
+ click_button 'Save'
74
+
75
+ expect(question.reload.labels).to be_empty
76
+ expect(question.reload.sub_questions).to be_empty
77
+ end
78
+ end
@@ -1,4 +1,4 @@
1
- require 'rails_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe 'Checkbox group question management' do
4
4
  let!(:survey) { create :survey }
@@ -1,4 +1,4 @@
1
- require 'rails_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe 'Long text question management' do
4
4
  let!(:survey) { create :survey }
@@ -1,4 +1,4 @@
1
- require 'rails_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe 'Radio group question management' do
4
4
  let!(:survey) { create :survey }
@@ -1,4 +1,4 @@
1
- require 'rails_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe 'Radio matrix question management' do
4
4
  let!(:survey) { create :survey }
@@ -1,4 +1,4 @@
1
- require 'rails_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe 'Short text question management' do
4
4
  let!(:survey) { create :survey }
@@ -1,4 +1,4 @@
1
- require 'rails_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe 'Static text question management' do
4
4
  let!(:survey) { create :survey }
@@ -1,4 +1,4 @@
1
- require 'rails_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe 'Sessions' do
4
4
  let(:survey) { create :survey }
@@ -47,5 +47,7 @@ describe 'Sessions' do
47
47
  expect(session.reload.answers.map(&:value)).to eq ['c', 4]
48
48
  expect(session.reload.completed).to eq true
49
49
  expect(session.reload.last_question_group_id).to eq second_question_group.id
50
+
51
+ expect(page).not_to have_content 'RuntimeError'
50
52
  end
51
53
  end
@@ -1,4 +1,4 @@
1
- require 'rails_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe 'Surveys' do
4
4
  scenario 'Index site lists all surveys' do
@@ -1,7 +1,6 @@
1
- require 'rails_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe 'Versions ' do
4
-
5
4
  let!(:survey) { create :survey }
6
5
  let!(:baseversion) { survey.versions.create version: 0 }
7
6
 
@@ -89,7 +88,6 @@ describe 'Versions ' do
89
88
  within "##{dom_id(inactive_version)}" do
90
89
  expect { click_link 'Delete' }.to change { survey.reload.versions.count }.by(-1)
91
90
  end
92
-
93
91
  end
94
92
 
95
93
  scenario 'User can view version details' do
@@ -1,4 +1,4 @@
1
- require 'rails_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe HelenaAdministration::ApplicationHelper do
4
4
  describe '.title' do