From 1c33319f02fb9a41cbb7b10b5810608f353b4f67 Mon Sep 17 00:00:00 2001 From: Stuart Johnson Date: Tue, 7 Nov 2017 15:26:08 -0500 Subject: [PATCH 1/5] fixing indirect cost validation [#152641470] --- app/models/protocol.rb | 6 +++++- .../20171107195635_correct_bad_indirect_cost_data.rb | 9 +++++++++ db/schema.rb | 6 +++--- 3 files changed, 17 insertions(+), 4 deletions(-) create mode 100644 db/migrate/20171107195635_correct_bad_indirect_cost_data.rb diff --git a/app/models/protocol.rb b/app/models/protocol.rb index c2b56a74a4..98b4dbd924 100644 --- a/app/models/protocol.rb +++ b/app/models/protocol.rb @@ -62,7 +62,7 @@ class Protocol < ApplicationRecord validates :research_master_id, numericality: { only_integer: true }, allow_blank: true validates :research_master_id, presence: true, if: :rmid_requires_validation? - validates :indirect_cost_rate, numericality: { greater_than_or_equal_to: 1, less_than_or_equal_to: 1000 }, allow_blank: true + validates :indirect_cost_rate, numericality: { greater_than_or_equal_to: 1, less_than_or_equal_to: 1000 }, allow_blank: true, if: :indirect_cost_enabled attr_accessor :requester_id attr_accessor :validate_nct @@ -552,6 +552,10 @@ def has_incomplete_additional_details? private + def indirect_cost_enabled + Setting.find_by_key('use_indirect_cost').value + end + def notify_remote_around_update? true end diff --git a/db/migrate/20171107195635_correct_bad_indirect_cost_data.rb b/db/migrate/20171107195635_correct_bad_indirect_cost_data.rb new file mode 100644 index 0000000000..025c9d669b --- /dev/null +++ b/db/migrate/20171107195635_correct_bad_indirect_cost_data.rb @@ -0,0 +1,9 @@ +class CorrectBadIndirectCostData < ActiveRecord::Migration[5.1] + def change + protocols = Protocol.where(indirect_cost_rate: 0.0) + protocols.each do |protocol| + protocol.indirect_cost_rate = nil + protocol.save(validate: false) + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 536b9a5d82..38e5092a3f 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20171025145319) do +ActiveRecord::Schema.define(version: 20171107195635) do create_table "admin_rates", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin" do |t| t.integer "line_item_id" @@ -488,7 +488,7 @@ t.index ["sub_service_request_id"], name: "index_payments_on_sub_service_request_id" end - create_table "permissible_values", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin" do |t| + create_table "permissible_values", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| t.string "key" t.string "value" t.string "concept_code" @@ -810,7 +810,7 @@ t.index ["updated_at"], name: "index_sessions_on_updated_at" end - create_table "settings", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin" do |t| + create_table "settings", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| t.string "key" t.text "value" t.string "data_type" From 1d2baa093934bd00686aabe8b4d56c118539a760 Mon Sep 17 00:00:00 2001 From: Stuart Johnson Date: Tue, 7 Nov 2017 15:36:09 -0500 Subject: [PATCH 2/5] tab weirdness --- .../20171107195635_correct_bad_indirect_cost_data.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/db/migrate/20171107195635_correct_bad_indirect_cost_data.rb b/db/migrate/20171107195635_correct_bad_indirect_cost_data.rb index 025c9d669b..0d5415a811 100644 --- a/db/migrate/20171107195635_correct_bad_indirect_cost_data.rb +++ b/db/migrate/20171107195635_correct_bad_indirect_cost_data.rb @@ -1,9 +1,9 @@ class CorrectBadIndirectCostData < ActiveRecord::Migration[5.1] def change - protocols = Protocol.where(indirect_cost_rate: 0.0) - protocols.each do |protocol| - protocol.indirect_cost_rate = nil - protocol.save(validate: false) - end + protocols = Protocol.where(indirect_cost_rate: 0.0) + protocols.each do |protocol| + protocol.indirect_cost_rate = nil + protocol.save(validate: false) + end end end From b554ed08a3c756dae24a3436e411a6293c7ce76c Mon Sep 17 00:00:00 2001 From: Stuart Johnson Date: Tue, 7 Nov 2017 17:25:19 -0500 Subject: [PATCH 3/5] spec fix --- spec/models/protocol/valid?_spec.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/spec/models/protocol/valid?_spec.rb b/spec/models/protocol/valid?_spec.rb index a9ca538a0c..719e960d4c 100644 --- a/spec/models/protocol/valid?_spec.rb +++ b/spec/models/protocol/valid?_spec.rb @@ -38,6 +38,8 @@ end end - it { is_expected.to validate_numericality_of(:indirect_cost_rate).is_greater_than_or_equal_to(1) } - it { is_expected.to validate_numericality_of(:indirect_cost_rate).is_less_than_or_equal_to(1000) } + if Setting.find_by_key('use_indirect_cost').value + it { is_expected.to validate_numericality_of(:indirect_cost_rate).is_greater_than_or_equal_to(1) } + it { is_expected.to validate_numericality_of(:indirect_cost_rate).is_less_than_or_equal_to(1000) } + end end From 6f15d5982fd378a02e688c9af0fd0214059b6470 Mon Sep 17 00:00:00 2001 From: Stuart Johnson Date: Wed, 8 Nov 2017 10:14:17 -0500 Subject: [PATCH 4/5] removing schema changes and a fix to specs [#152641470] --- db/schema.rb | 6 +++--- spec/models/protocol/valid?_spec.rb | 10 ++++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/db/schema.rb b/db/schema.rb index 38e5092a3f..536b9a5d82 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20171107195635) do +ActiveRecord::Schema.define(version: 20171025145319) do create_table "admin_rates", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin" do |t| t.integer "line_item_id" @@ -488,7 +488,7 @@ t.index ["sub_service_request_id"], name: "index_payments_on_sub_service_request_id" end - create_table "permissible_values", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| + create_table "permissible_values", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin" do |t| t.string "key" t.string "value" t.string "concept_code" @@ -810,7 +810,7 @@ t.index ["updated_at"], name: "index_sessions_on_updated_at" end - create_table "settings", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| + create_table "settings", id: :integer, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin" do |t| t.string "key" t.text "value" t.string "data_type" diff --git a/spec/models/protocol/valid?_spec.rb b/spec/models/protocol/valid?_spec.rb index 719e960d4c..92c7293043 100644 --- a/spec/models/protocol/valid?_spec.rb +++ b/spec/models/protocol/valid?_spec.rb @@ -30,6 +30,10 @@ build_study_type_questions() build_study_type_answers() + before :each do + Setting.find_by_key("use_indirect_cost").update_attribute(:value, true) + end + describe 'should validate funding source for projects' do it 'should raise an exception if funding source is nil' do project = Project.create(attributes_for(:protocol)) @@ -38,8 +42,6 @@ end end - if Setting.find_by_key('use_indirect_cost').value - it { is_expected.to validate_numericality_of(:indirect_cost_rate).is_greater_than_or_equal_to(1) } - it { is_expected.to validate_numericality_of(:indirect_cost_rate).is_less_than_or_equal_to(1000) } - end + it { is_expected.to validate_numericality_of(:indirect_cost_rate).is_greater_than_or_equal_to(1) } + it { is_expected.to validate_numericality_of(:indirect_cost_rate).is_less_than_or_equal_to(1000) } end From 3b3a4e319eb58a0609ac2f2c964537c5ef56bd41 Mon Sep 17 00:00:00 2001 From: Stuart Johnson Date: Wed, 8 Nov 2017 14:50:00 -0500 Subject: [PATCH 5/5] final pass on specs [#152641470] --- spec/models/protocol/valid?_spec.rb | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/spec/models/protocol/valid?_spec.rb b/spec/models/protocol/valid?_spec.rb index 92c7293043..94d962d616 100644 --- a/spec/models/protocol/valid?_spec.rb +++ b/spec/models/protocol/valid?_spec.rb @@ -30,10 +30,6 @@ build_study_type_questions() build_study_type_answers() - before :each do - Setting.find_by_key("use_indirect_cost").update_attribute(:value, true) - end - describe 'should validate funding source for projects' do it 'should raise an exception if funding source is nil' do project = Project.create(attributes_for(:protocol)) @@ -42,6 +38,19 @@ end end - it { is_expected.to validate_numericality_of(:indirect_cost_rate).is_greater_than_or_equal_to(1) } - it { is_expected.to validate_numericality_of(:indirect_cost_rate).is_less_than_or_equal_to(1000) } + context 'indirect cost is turned off' do + it 'should not validate indirect cost' do + is_expected.not_to validate_numericality_of(:indirect_cost_rate).is_greater_than_or_equal_to(1) + is_expected.not_to validate_numericality_of(:indirect_cost_rate).is_less_than_or_equal_to(1000) + end + end + + context 'indirect cost is turned on' do + stub_config("use_indirect_cost", true) + + it 'should validate indirect cost' do + is_expected.to validate_numericality_of(:indirect_cost_rate).is_greater_than_or_equal_to(1) + is_expected.to validate_numericality_of(:indirect_cost_rate).is_less_than_or_equal_to(1000) + end + end end