From 2af8f052a4d627e182af436d8176466e5d807ca4 Mon Sep 17 00:00:00 2001 From: jacobtoddmathes Date: Wed, 10 Apr 2024 11:18:58 -0500 Subject: [PATCH] adding tests and groundwork to make survey response page render role-based questions. added new cucumber feature --- .../controllers/survey_profiles_controller.rb | 2 +- .../survey_responses_controller.rb | 4 + rails_root/app/models/survey_profile.rb | 6 +- .../_survey_profile.json.jbuilder | 2 +- .../app/views/survey_profiles/index.html.erb | 1 + .../app/views/survey_responses/new.html.erb | 6 +- rails_root/db/seeds.rb | 6 +- .../features/login_profile_generation.feature | 2 +- rails_root/features/role_based_survey.feature | 38 +++++++++ .../data_model_design_steps.rb | 2 +- .../login_profile_generation_steps.rb | 5 +- .../step_definitions/model_rework_steps.rb | 2 +- .../role_based_survey_steps.rb | 79 +++++++++++++++++++ 13 files changed, 141 insertions(+), 14 deletions(-) create mode 100644 rails_root/features/role_based_survey.feature create mode 100644 rails_root/features/step_definitions/role_based_survey_steps.rb diff --git a/rails_root/app/controllers/survey_profiles_controller.rb b/rails_root/app/controllers/survey_profiles_controller.rb index 75c470c..a0a18e6 100644 --- a/rails_root/app/controllers/survey_profiles_controller.rb +++ b/rails_root/app/controllers/survey_profiles_controller.rb @@ -116,6 +116,6 @@ def set_survey_profile # Only allow a list of trusted parameters through. def survey_profile_params - params.require(:survey_profile).permit(:user_id, :first_name, :last_name, :campus_name, :district_name) + params.require(:survey_profile).permit(:user_id, :first_name, :last_name, :campus_name, :district_name, :role) end end diff --git a/rails_root/app/controllers/survey_responses_controller.rb b/rails_root/app/controllers/survey_responses_controller.rb index 68116f7..8ed2979 100644 --- a/rails_root/app/controllers/survey_responses_controller.rb +++ b/rails_root/app/controllers/survey_responses_controller.rb @@ -12,6 +12,7 @@ class SurveyResponsesController < ApplicationController # GET /survey_responses or /survey_responses.json def index if params[:query].present? + @survey_responses = SurveyResponse.where(share_code: params[:query]) flash[:warning] = "No survey responses found for share code #{params[:query]}" if @survey_responses.empty? else @@ -34,11 +35,14 @@ def current_user_id def new # login check is done in secure.rb logger.info '========== new triggered ==========' + @pagination, @questions, @section = paginate(collection: SurveyQuestion.all, params: { per_page: 10, page: 1 }) @survey_response = SurveyResponse.new return return_to_root 'You are not logged in.' if current_user_id.nil? return return_to_root 'Your profile could not be found. Please complete your profile.' unless SurveyProfile.exists?(user_id: current_user_id) + @survey_profile = SurveyProfile.find_by(user_id: current_user_id) + session[:survey_id] = nil session[:page_number] = 1 end diff --git a/rails_root/app/models/survey_profile.rb b/rails_root/app/models/survey_profile.rb index 37da81c..d240014 100644 --- a/rails_root/app/models/survey_profile.rb +++ b/rails_root/app/models/survey_profile.rb @@ -3,9 +3,9 @@ # This is the model for the SurveyProfile class SurveyProfile < ApplicationRecord enum role: { - principal: 0, - teacher: 1, - superintendent: 2 + Principal: 0, + Teacher: 1, + Superintendent: 2 } has_many :responses, foreign_key: :profile_id, diff --git a/rails_root/app/views/survey_profiles/_survey_profile.json.jbuilder b/rails_root/app/views/survey_profiles/_survey_profile.json.jbuilder index 3e74a32..3c18d96 100644 --- a/rails_root/app/views/survey_profiles/_survey_profile.json.jbuilder +++ b/rails_root/app/views/survey_profiles/_survey_profile.json.jbuilder @@ -1,5 +1,5 @@ # frozen_string_literal: true json.extract! survey_profile, :id, :user_id, :first_name, :last_name, :campus_name, :district_name, :created_at, - :updated_at + :updated_at, :role json.url survey_profile_url(survey_profile, format: :json) diff --git a/rails_root/app/views/survey_profiles/index.html.erb b/rails_root/app/views/survey_profiles/index.html.erb index 76ded21..c3a5b86 100644 --- a/rails_root/app/views/survey_profiles/index.html.erb +++ b/rails_root/app/views/survey_profiles/index.html.erb @@ -20,6 +20,7 @@ <%= survey_profile.last_name %> <%= survey_profile.campus_name %> <%= survey_profile.district_name %> + <%= survey_profile.role %> <%= link_to "Show", survey_profile %> <% end %> diff --git a/rails_root/app/views/survey_responses/new.html.erb b/rails_root/app/views/survey_responses/new.html.erb index bc4fd75..066d6d2 100644 --- a/rails_root/app/views/survey_responses/new.html.erb +++ b/rails_root/app/views/survey_responses/new.html.erb @@ -1,4 +1,8 @@ -

ORGANIZATIONAL AND LEADERSHIP EFFECTIVENESS INVENTORY

+

ORGANIZATIONAL AND LEADERSHIP EFFECTIVENESS INVENTORY + <% if session[:userinfo].present? && @survey_profile.present?%> + - <%= @survey_profile.role %> + <% end %> +

<%# <%= render "form", survey_response: @survey_response, survey_sections: @survey_sections%> <%= render partial: 'paginated_form', locals: { pagination: @pagination, diff --git a/rails_root/db/seeds.rb b/rails_root/db/seeds.rb index 86b879e..1d14e8b 100644 --- a/rails_root/db/seeds.rb +++ b/rails_root/db/seeds.rb @@ -16,11 +16,11 @@ SurveyProfile.create!([ { user_id: '5', first_name: 'John', last_name: 'Doe', campus_name: 'Campus 1', - district_name: 'District 1', role: 'principal' }, + district_name: 'District 1', role: 'Principal' }, { user_id: '6', first_name: 'Jane', last_name: 'Doe', campus_name: 'Campus 2', - district_name: 'District 2', role: 'teacher' }, + district_name: 'District 2', role: 'Teacher' }, { user_id: '7', first_name: 'Jim', last_name: 'Doe', campus_name: 'Campus 3', - district_name: 'District 3', role: 'superintendent' } + district_name: 'District 3', role: 'Superintendent' } ]) # seed data for the survey_responses table diff --git a/rails_root/features/login_profile_generation.feature b/rails_root/features/login_profile_generation.feature index 4b0ca09..dc1634a 100644 --- a/rails_root/features/login_profile_generation.feature +++ b/rails_root/features/login_profile_generation.feature @@ -8,7 +8,7 @@ Feature: Survey Profile Creation upon successful OAuth login And I have never created a survey profile Then I am redirected to the create survey profile page And I fill in my first and last name and district name and campus name and organization role and click create - Then a survey profile is created + Then a survey profile is created with the proper information Then I am redirected to the home page diff --git a/rails_root/features/role_based_survey.feature b/rails_root/features/role_based_survey.feature new file mode 100644 index 0000000..fc415c5 --- /dev/null +++ b/rails_root/features/role_based_survey.feature @@ -0,0 +1,38 @@ +Feature: Specific Survey Questions Rendered based on User Role. + Verify Survey Profile and Survey Response + + Scenario: User logs in for the first time and takes survey as a principal + Given that I am on the homepage + And I try to login + And I have never created a survey profile + Then I am redirected to the create survey profile page + And I fill in my information as a principal + Then a survey profile is created for me as a principal + Then I am redirected to the home page + Then I am logged in as a principal + When I navigate to the survey page + Then I should see the survey questions specific to the principal + + Scenario: User logs in for the first time and takes survey as a teacher + Given that I am on the homepage + And I try to login + And I have never created a survey profile + Then I am redirected to the create survey profile page + And I fill in my information as a teacher + Then a survey profile is created for me as a teacher + Then I am redirected to the home page + Then I am logged in as a teacher + When I navigate to the survey page + Then I should see the survey questions specific to the teacher + + Scenario: User logs in for the first time and takes survey as a superintendent + Given that I am on the homepage + And I try to login + And I have never created a survey profile + Then I am redirected to the create survey profile page + And I fill in my information as a superintendent + Then a survey profile is created for me as a superintendent + Then I am redirected to the home page + Then I am logged in as a superintendent + When I navigate to the survey page + Then I should see the survey questions specific to the superintendent diff --git a/rails_root/features/step_definitions/data_model_design_steps.rb b/rails_root/features/step_definitions/data_model_design_steps.rb index 8268417..b87f65a 100644 --- a/rails_root/features/step_definitions/data_model_design_steps.rb +++ b/rails_root/features/step_definitions/data_model_design_steps.rb @@ -3,7 +3,7 @@ When('I try to create model instances') do |table| table.hashes.each do |model| @attributes = @model_attributes[model['model_name']] - @attributes['role'] = 'principal' if model['model_name'] == 'SurveyProfile' + @attributes['role'] = 'Principal' if model['model_name'] == 'SurveyProfile' if @attributes.values.any?(&:nil?) expect do diff --git a/rails_root/features/step_definitions/login_profile_generation_steps.rb b/rails_root/features/step_definitions/login_profile_generation_steps.rb index cc88c4e..6e57df7 100644 --- a/rails_root/features/step_definitions/login_profile_generation_steps.rb +++ b/rails_root/features/step_definitions/login_profile_generation_steps.rb @@ -93,8 +93,9 @@ expect(page).to have_content('John Doe - Welcome to Our Rails App') end -Then('a survey profile is created') do +Then('a survey profile is created with the proper information') do profile = SurveyProfile.find_by_user_id('google-oauth2|100507718411999601151') + expect(profile.role).to eq('Principal') expect(profile).not_to be_nil end -#rubocop enable all \ No newline at end of file +#rubocop enable all diff --git a/rails_root/features/step_definitions/model_rework_steps.rb b/rails_root/features/step_definitions/model_rework_steps.rb index a0a4a02..e4cd4df 100644 --- a/rails_root/features/step_definitions/model_rework_steps.rb +++ b/rails_root/features/step_definitions/model_rework_steps.rb @@ -40,7 +40,7 @@ end @model_attributes['SurveyProfile'] = {} - @model_attributes['SurveyProfile']['role'] = 'principal' + @model_attributes['SurveyProfile']['role'] = 'Principal' SurveyProfile.column_names.each do |name| @model_attributes['SurveyProfile'][name] = 10 if name != 'created_at' && name != 'updated_at' && name != 'role' end diff --git a/rails_root/features/step_definitions/role_based_survey_steps.rb b/rails_root/features/step_definitions/role_based_survey_steps.rb new file mode 100644 index 0000000..97242e5 --- /dev/null +++ b/rails_root/features/step_definitions/role_based_survey_steps.rb @@ -0,0 +1,79 @@ +# frozen_string_literal: true + +Then('I fill in my information as a principal') do + fill_in 'First name', with: 'John' + fill_in 'Last name', with: 'Doe' + fill_in 'Campus name', with: 'Joe Campus' + fill_in 'District name', with: 'Joe District' + select 'Principal', from: 'Role' + click_button 'Create Survey profile' +end + +Then('a survey profile is created for me as a principal') do + profile = SurveyProfile.find_by_user_id('google-oauth2|100507718411999601151') + expect(profile.role).to eq('Principal') + expect(profile).not_to be_nil +end + +Then('I am logged in as a principal') do + expect(page).to have_content('John Doe - Welcome to Our Rails App') + expect(page).to have_content('Role: Principal') +end + +When('I navigate to the survey page') do + visit new_survey_response_path +end + +Then('I should see the survey questions specific to the principal') do + expect(page).to have_content('ORGANIZATIONAL AND LEADERSHIP EFFECTIVENESS INVENTORY - Principal') +end + + + +Then('I fill in my information as a teacher') do + fill_in 'First name', with: 'John' + fill_in 'Last name', with: 'Doe' + fill_in 'Campus name', with: 'Joe Campus' + fill_in 'District name', with: 'Joe District' + select 'Teacher', from: 'Role' + click_button 'Create Survey profile' +end + +Then('a survey profile is created for me as a teacher') do + profile = SurveyProfile.find_by_user_id('google-oauth2|100507718411999601151') + expect(profile.role).to eq('Teacher') + expect(profile).not_to be_nil +end + +Then('I am logged in as a teacher') do + expect(page).to have_content('John Doe - Welcome to Our Rails App') + expect(page).to have_content('Role: Teacher') +end + +Then('I should see the survey questions specific to the teacher') do + expect(page).to have_content('ORGANIZATIONAL AND LEADERSHIP EFFECTIVENESS INVENTORY - Teacher') +end + +Then('I fill in my information as a superintendent') do + fill_in 'First name', with: 'John' + fill_in 'Last name', with: 'Doe' + fill_in 'Campus name', with: 'Joe Campus' + fill_in 'District name', with: 'Joe District' + select 'Superintendent', from: 'Role' + click_button 'Create Survey profile' +end + +Then('a survey profile is created for me as a superintendent') do + profile = SurveyProfile.find_by_user_id('google-oauth2|100507718411999601151') + expect(profile.role).to eq('Superintendent') + expect(profile).not_to be_nil +end + +Then('I am logged in as a superintendent') do + expect(page).to have_content('John Doe - Welcome to Our Rails App') + expect(page).to have_content('Role: Superintendent') +end + +Then('I should see the survey questions specific to the superintendent') do + expect(page).to have_content('ORGANIZATIONAL AND LEADERSHIP EFFECTIVENESS INVENTORY - Superintendent') +end