Require code of conduct acceptance on registration

This commit is contained in:
James Mason 2018-03-16 16:23:01 -07:00 committed by Ana María Martínez Gómez
parent 95196c7f80
commit 03ef28e74d
9 changed files with 91 additions and 8 deletions

View file

@ -12,6 +12,7 @@ module Admin
@registration_distribution = @conference.registration_distribution
@affiliation_distribution = @conference.affiliation_distribution
@code_of_conduct = @conference.code_of_conduct.present?
end
def edit; end
@ -61,9 +62,11 @@ module Admin
end
def registration_params
params.require(:registration).permit(:user_id, :conference_id, :arrival, :departure, :attended,
:volunteer, :other_special_needs,
vchoice_ids: [], qanswer_ids: [], qanswers_attributes: [], event_ids: [])
params.require(:registration).permit(
:user_id, :conference_id, :arrival, :departure, :attended,
:volunteer, :other_special_needs, :accepted_code_of_conduct,
vchoice_ids: [], qanswer_ids: [], qanswers_attributes: [], event_ids: []
)
end
end
end

View file

@ -112,7 +112,7 @@ class ConferenceRegistrationsController < ApplicationController
params.require(:registration)
.permit(
:conference_id, :arrival, :departure,
:volunteer,
:volunteer, :accepted_code_of_conduct,
vchoice_ids: [], qanswer_ids: [],
qanswers_attributes: [],
event_ids: [],

View file

@ -28,6 +28,10 @@ class Registration < ApplicationRecord
validate :registration_limit_not_exceed, on: :create
validate :registration_to_events_only_if_present
validates :accepted_code_of_conduct, acceptance: {
if: -> { conference.code_of_conduct.present? }
}
after_create :set_week, :subscribe_to_conference, :send_registration_mail
##

View file

@ -25,6 +25,9 @@
%th ID#
%th Name
%th E-Mail
- if @code_of_conduct
%th
%abbr{ title: 'Code of Conduct' } CoC
%th Arrival
%th Departure
- if @conference.questions.any?
@ -43,6 +46,13 @@
= role.name.titleize
%td
= registration.email
- if @code_of_conduct
- if registration.accepted_code_of_conduct
%td.text-success.text-center= fa_icon('check', title: 'accepted')
- else
%td.text-center.text-warning
= fa_icon('exclamation-circle',
title: 'Has not accepted Code of Conduct')
%td
- if registration.arrival
= registration.arrival.strftime('%d %b %H:%M')

View file

@ -1,3 +1,14 @@
- unless @conference.code_of_conduct.blank?
- code_of_conduct_link = link_to 'Code of Conduct', '#',
data: { toggle: 'modal', target: '#modal-code-of-conduct'}
- if @registration.accepted_code_of_conduct
= fa_icon 'check-square-o'
I have read and accepted the
= code_of_conduct_link
- else
= f.input :accepted_code_of_conduct,
label: "I have read and accept the #{code_of_conduct_link}".html_safe,
required: true
- if @conference.questions.any?
= render partial: 'conference_registrations/questions', locals: { f: f }
- if @conference.program.events.with_registration_open.any? || @registration.events.any?
@ -19,3 +30,5 @@
= f.inputs 'Your Travel Info' do
= f.input :arrival, as: :string, label: 'Your arrival time', hint: "Leave blank if not sure", input_html: { value: (f.object.arrival.to_formatted_s(:db_without_seconds) unless f.object.arrival.nil?), id: 'registration-arrival-datepicker',start_date: @conference.start_date,end_date: @conference.end_date}
= f.input :departure, as: :string, label: 'Your departure time', hint: "Leave blank if not sure", input_html: { value: (f.object.departure.to_formatted_s(:db_without_seconds) unless f.object.departure.nil?), id: 'registration-departure-datepicker'}
= render 'conferences/code_of_conduct', organization: @conference.organization

View file

@ -14,6 +14,25 @@
= "#{@conference.venue.city} / #{@conference.venue.country_name}."
%small
= date_string(@conference.start_date, @conference.end_date)
- unless @conference.code_of_conduct.blank?
.row
.col-md-12
%h4= fa_stacked_icon 'handshake-o', base: 'square-o', text: 'Code of Conduct'
%ul.fa-ul
- if @registration.accepted_code_of_conduct
%li.text-info
= fa_icon('check li')
You have accepted the
= link_to 'Code of Conduct', '#',
data: { toggle: 'modal', target: '#modal-code-of-conduct'}
- else
%li.text-warning
= fa_icon('exclamation-circle li')
You need to accept the
= link_to 'Code of Conduct', '#',
data: { toggle: 'modal', target: '#modal-code-of-conduct'}
= render 'conferences/code_of_conduct',
organization: @conference.organization
.row
.col-md-12
%h4

View file

@ -0,0 +1,5 @@
class AddAcceptedCodeOfConductToRegistrations < ActiveRecord::Migration[5.0]
def change
add_column :registrations, :accepted_code_of_conduct, :boolean
end
end

View file

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20180316185150) do
ActiveRecord::Schema.define(version: 20180316220446) do
create_table "ahoy_events", force: :cascade do |t|
t.integer "visit_id"
@ -390,6 +390,7 @@ ActiveRecord::Schema.define(version: 20180316185150) do
t.boolean "volunteer"
t.integer "user_id"
t.integer "week"
t.boolean "accepted_code_of_conduct"
end
create_table "registrations_vchoices", id: false, force: :cascade do |t|

View file

@ -2,6 +2,7 @@ require 'spec_helper'
feature 'Code of Conduct:' do
let!(:organization) { create(:organization) }
let!(:conference) { create(:full_conference, organization: organization) }
let(:admin) { create(:admin) }
let(:sample_text) { Faker::Lorem.paragraph }
@ -45,8 +46,6 @@ feature 'Code of Conduct:' do
end
context 'on a conference' do
let!(:conference) { create(:full_conference, organization: organization) }
it 'is linked from the index' do
visit conferences_path
within "#conference-#{conference.id}" do
@ -62,5 +61,34 @@ feature 'Code of Conduct:' do
end
end
end
describe 'as a participant' do
let!(:organization) { create(:organization, code_of_conduct: sample_text) }
let!(:participant) { create(:user) }
before { sign_in participant }
it 'must be accepted', js: true do
visit conferences_path
within "#conference-#{conference.id}" do
click_on 'Register'
end
expect(page).to have_text('I have read and accept the Code of Conduct')
expect(page).not_to have_text(sample_text)
within 'form' do
click_on 'Code of Conduct'
end
expect(page).to have_content(sample_text)
find('button.close').click
click_on 'Register'
expect(conference.user_registered?(participant)).to be_falsey
expect(page).to have_content('Accepted code of conduct must be accepted')
check 'registration[accepted_code_of_conduct]'
click_on 'Register'
expect(conference.user_registered?(participant)).to be_truthy
visit conference_conference_registration_path(conference)
expect(page).to have_content('You have accepted the Code of Conduct')
end
end
end
end