diff --git a/db/migrate/20221216122909_add_sexes_to_sales_log.rb b/db/migrate/20221216122909_add_sexes_to_sales_log.rb new file mode 100644 index 000000000..41c1d16f4 --- /dev/null +++ b/db/migrate/20221216122909_add_sexes_to_sales_log.rb @@ -0,0 +1,9 @@ +class AddSexesToSalesLog < ActiveRecord::Migration[7.0] + def change + change_table :sales_logs, bulk: true do |t| + t.column :sex4, :string + t.column :sex5, :string + t.column :sex6, :string + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 393022fd0..6acc48f6b 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[7.0].define(version: 2022_12_14_110208) do +ActiveRecord::Schema[7.0].define(version: 2022_12_16_122909) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -401,11 +401,12 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_14_110208) do t.integer "inc1mort" t.integer "income2" t.integer "income2nk" + t.integer "prevown" t.integer "savingsnk" t.integer "savings" - t.integer "prevown" t.string "sex3" t.integer "details_known_1" + t.string "relat3" t.integer "income1_value_check" t.integer "mortgage" t.integer "inc2mort" @@ -415,6 +416,12 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_14_110208) do t.integer "ecstat4" t.integer "ecstat5" t.integer "ecstat6" + t.string "relat4" + t.string "relat5" + t.string "relat6" + t.string "sex4" + t.string "sex5" + t.string "sex6" t.index ["created_by_id"], name: "index_sales_logs_on_created_by_id" t.index ["managing_organisation_id"], name: "index_sales_logs_on_managing_organisation_id" t.index ["owning_organisation_id"], name: "index_sales_logs_on_owning_organisation_id" diff --git a/spec/models/form/sales/pages/person1_gender_identity_joint_purchase_spec.rb b/spec/models/form/sales/pages/person1_gender_identity_joint_purchase_spec.rb deleted file mode 100644 index 94975b2e3..000000000 --- a/spec/models/form/sales/pages/person1_gender_identity_joint_purchase_spec.rb +++ /dev/null @@ -1,33 +0,0 @@ -require "rails_helper" - -RSpec.describe Form::Sales::Pages::Person1GenderIdentityJointPurchase, type: :model do - subject(:page) { described_class.new(page_id, page_definition, subsection) } - - let(:page_id) { nil } - let(:page_definition) { nil } - let(:subsection) { instance_double(Form::Subsection) } - - it "has correct subsection" do - expect(page.subsection).to eq(subsection) - end - - it "has correct questions" do - expect(page.questions.map(&:id)).to eq(%w[sex3]) - end - - it "has the correct id" do - expect(page.id).to eq("person_1_gender_identity_joint_purchase") - end - - it "has the correct header" do - expect(page.header).to eq("") - end - - it "has the correct description" do - expect(page.description).to eq("") - end - - it "has correct depends_on" do - expect(page.depends_on).to eq([{ "details_known_1" => 1, "jointpur" => 1 }]) - end -end diff --git a/spec/models/form/sales/pages/person1_gender_identity_spec.rb b/spec/models/form/sales/pages/person1_gender_identity_spec.rb deleted file mode 100644 index ac63a1da7..000000000 --- a/spec/models/form/sales/pages/person1_gender_identity_spec.rb +++ /dev/null @@ -1,33 +0,0 @@ -require "rails_helper" - -RSpec.describe Form::Sales::Pages::Person1GenderIdentity, type: :model do - subject(:page) { described_class.new(page_id, page_definition, subsection) } - - let(:page_id) { nil } - let(:page_definition) { nil } - let(:subsection) { instance_double(Form::Subsection) } - - it "has correct subsection" do - expect(page.subsection).to eq(subsection) - end - - it "has correct questions" do - expect(page.questions.map(&:id)).to eq(%w[sex2]) - end - - it "has the correct id" do - expect(page.id).to eq("person_1_gender_identity") - end - - it "has the correct header" do - expect(page.header).to eq("") - end - - it "has the correct description" do - expect(page.description).to eq("") - end - - it "has correct depends_on" do - expect(page.depends_on).to eq([{ "details_known_1" => 1, "jointpur" => 2 }]) - end -end diff --git a/spec/models/form/sales/pages/person_gender_identity_spec.rb b/spec/models/form/sales/pages/person_gender_identity_spec.rb new file mode 100644 index 000000000..0aefdd3f4 --- /dev/null +++ b/spec/models/form/sales/pages/person_gender_identity_spec.rb @@ -0,0 +1,178 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Pages::PersonGenderIdentity, type: :model do + subject(:page) { described_class.new(page_id, page_definition, subsection, person_index:) } + + let(:page_definition) { nil } + let(:subsection) { instance_double(Form::Subsection) } + let(:person_index) { 1 } + + context "without joint purchase" do + let(:page_id) { "person_1_working_situation" } + + it "has correct subsection" do + expect(page.subsection).to eq(subsection) + end + + it "has the correct header" do + expect(page.header).to eq("") + end + + it "has the correct description" do + expect(page.description).to eq("") + end + + context "with person 1" do + let(:person_index) { 2 } + let(:page_id) { "person_1_gender_identity" } + + it "has correct questions" do + expect(page.questions.map(&:id)).to eq(%w[sex2]) + end + + it "has the correct id" do + expect(page.id).to eq("person_1_gender_identity") + end + + it "has correct depends_on" do + expect(page.depends_on).to eq([{ "details_known_1" => 1, "jointpur" => 2 }]) + end + end + + context "with person 2" do + let(:person_index) { 3 } + let(:page_id) { "person_2_gender_identity" } + + it "has correct questions" do + expect(page.questions.map(&:id)).to eq(%w[sex3]) + end + + it "has the correct id" do + expect(page.id).to eq("person_2_gender_identity") + end + + it "has correct depends_on" do + expect(page.depends_on).to eq([{ "details_known_2" => 1, "jointpur" => 2 }]) + end + end + + context "with person 3" do + let(:person_index) { 4 } + let(:page_id) { "person_3_gender_identity" } + + it "has correct questions" do + expect(page.questions.map(&:id)).to eq(%w[sex4]) + end + + it "has the correct id" do + expect(page.id).to eq("person_3_gender_identity") + end + + it "has correct depends_on" do + expect(page.depends_on).to eq([{ "details_known_3" => 1, "jointpur" => 2 }]) + end + end + + context "with person 4" do + let(:person_index) { 5 } + let(:page_id) { "person_4_gender_identity" } + + it "has correct questions" do + expect(page.questions.map(&:id)).to eq(%w[sex5]) + end + + it "has the correct id" do + expect(page.id).to eq("person_4_gender_identity") + end + + it "has correct depends_on" do + expect(page.depends_on).to eq([{ "details_known_4" => 1, "jointpur" => 2 }]) + end + end + end + + context "with joint purchase" do + let(:page_id) { "person_1_gender_identity_joint_purchase" } + + it "has correct subsection" do + expect(page.subsection).to eq(subsection) + end + + it "has the correct header" do + expect(page.header).to eq("") + end + + it "has the correct description" do + expect(page.description).to eq("") + end + + context "with person 1" do + let(:person_index) { 3 } + let(:page_id) { "person_1_gender_identity_joint_purchase" } + + it "has correct questions" do + expect(page.questions.map(&:id)).to eq(%w[sex3]) + end + + it "has the correct id" do + expect(page.id).to eq("person_1_gender_identity_joint_purchase") + end + + it "has correct depends_on" do + expect(page.depends_on).to eq([{ "details_known_1" => 1, "jointpur" => 1 }]) + end + end + + context "with person 2" do + let(:person_index) { 4 } + + let(:page_id) { "person_2_gender_identity_joint_purchase" } + + it "has correct questions" do + expect(page.questions.map(&:id)).to eq(%w[sex4]) + end + + it "has the correct id" do + expect(page.id).to eq("person_2_gender_identity_joint_purchase") + end + + it "has correct depends_on" do + expect(page.depends_on).to eq([{ "details_known_2" => 1, "jointpur" => 1 }]) + end + end + + context "with person 3" do + let(:person_index) { 5 } + let(:page_id) { "person_3_gender_identity_joint_purchase" } + + it "has correct questions" do + expect(page.questions.map(&:id)).to eq(%w[sex5]) + end + + it "has the correct id" do + expect(page.id).to eq("person_3_gender_identity_joint_purchase") + end + + it "has correct depends_on" do + expect(page.depends_on).to eq([{ "details_known_3" => 1, "jointpur" => 1 }]) + end + end + + context "with person 4" do + let(:person_index) { 6 } + let(:page_id) { "person_4_gender_identity_joint_purchase" } + + it "has correct questions" do + expect(page.questions.map(&:id)).to eq(%w[sex6]) + end + + it "has the correct id" do + expect(page.id).to eq("person_4_gender_identity_joint_purchase") + end + + it "has correct depends_on" do + expect(page.depends_on).to eq([{ "details_known_4" => 1, "jointpur" => 1 }]) + end + end + end +end diff --git a/spec/models/form/sales/questions/person1_gender_identity_spec.rb b/spec/models/form/sales/questions/person1_gender_identity_spec.rb deleted file mode 100644 index 9a4bc67cf..000000000 --- a/spec/models/form/sales/questions/person1_gender_identity_spec.rb +++ /dev/null @@ -1,46 +0,0 @@ -require "rails_helper" - -RSpec.describe Form::Sales::Questions::Person1GenderIdentity, type: :model do - subject(:question) { described_class.new(question_id, question_definition, page) } - - let(:question_id) { "sex2" } - let(:question_definition) { nil } - let(:page) { instance_double(Form::Page) } - - it "has correct page" do - expect(question.page).to eq(page) - end - - it "has the correct id" do - expect(question.id).to eq("sex2") - end - - it "has the correct header" do - expect(question.header).to eq("Which of these best describes Person 1’s gender identity?") - end - - it "has the correct check_answer_label" do - expect(question.check_answer_label).to eq("Person 1’s gender identity") - end - - it "has the correct type" do - expect(question.type).to eq("radio") - end - - it "is not marked as derived" do - expect(question.derived?).to be false - end - - it "has expected check answers card number" do - expect(question.check_answers_card_number).to eq(2) - end - - it "has the correct answer_options" do - expect(question.answer_options).to eq({ - "F" => { "value" => "Female" }, - "M" => { "value" => "Male" }, - "X" => { "value" => "Non-binary" }, - "R" => { "value" => "Buyer prefers not to say" }, - }) - end -end diff --git a/spec/models/form/sales/questions/person_gender_identity_spec.rb b/spec/models/form/sales/questions/person_gender_identity_spec.rb new file mode 100644 index 000000000..fb828addf --- /dev/null +++ b/spec/models/form/sales/questions/person_gender_identity_spec.rb @@ -0,0 +1,247 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Questions::PersonGenderIdentity, type: :model do + subject(:question) { described_class.new(question_id, question_definition, page, person_index:) } + + let(:question_id) { "sex2" } + let(:question_definition) { nil } + let(:page) { instance_double(Form::Page) } + let(:person_index) { 2 } + + before do + allow(page).to receive(:id).and_return("person_1_gender_identity") + end + + it "has correct page" do + expect(question.page).to eq(page) + end + + it "has the correct type" do + expect(question.type).to eq("radio") + end + + it "is not marked as derived" do + expect(question.derived?).to be false + end + + it "has expected check answers card number" do + expect(question.check_answers_card_number).to eq(2) + end + + it "has the correct answer_options" do + expect(question.answer_options).to eq({ + "F" => { "value" => "Female" }, + "M" => { "value" => "Male" }, + "X" => { "value" => "Non-binary" }, + "R" => { "value" => "Person prefers not to say" }, + }) + end + + context "when person 1" do + context "and not joint purchase" do + let(:question_id) { "sex2" } + let(:person_index) { 2 } + + before do + allow(page).to receive(:id).and_return("person_1_gender_identity") + end + + it "has the correct id" do + expect(question.id).to eq("sex2") + end + + it "has the correct header" do + expect(question.header).to eq("Which of these best describes Person 1’s gender identity?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Person 1’s gender identity") + end + + it "has expected check answers card number" do + expect(question.check_answers_card_number).to eq(2) + end + end + + context "and joint purchase" do + let(:person_index) { 3 } + let(:question_id) { "sex3" } + + before do + allow(page).to receive(:id).and_return("person_1_gender_identity_joint_purchase") + end + + it "has the correct id" do + expect(question.id).to eq("sex3") + end + + it "has the correct header" do + expect(question.header).to eq("Which of these best describes Person 1’s gender identity?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Person 1’s gender identity") + end + + it "has expected check answers card number" do + expect(question.check_answers_card_number).to eq(3) + end + end + end + + context "when person 2" do + context "and not joint purchase" do + let(:question_id) { "sex3" } + let(:person_index) { 3 } + + before do + allow(page).to receive(:id).and_return("person_2_gender_identity") + end + + it "has the correct id" do + expect(question.id).to eq("sex3") + end + + it "has the correct header" do + expect(question.header).to eq("Which of these best describes Person 2’s gender identity?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Person 2’s gender identity") + end + + it "has expected check answers card number" do + expect(question.check_answers_card_number).to eq(3) + end + end + + context "and joint purchase" do + let(:question_id) { "sex4" } + let(:person_index) { 4 } + + before do + allow(page).to receive(:id).and_return("person_2_gender_identity_joint_purchase") + end + + it "has the correct id" do + expect(question.id).to eq("sex4") + end + + it "has the correct header" do + expect(question.header).to eq("Which of these best describes Person 2’s gender identity?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Person 2’s gender identity") + end + + it "has expected check answers card number" do + expect(question.check_answers_card_number).to eq(4) + end + end + end + + context "when person 3" do + context "and not joint purchase" do + let(:question_id) { "sex4" } + let(:person_index) { 4 } + + before do + allow(page).to receive(:id).and_return("person_3_gender_identity") + end + + it "has the correct id" do + expect(question.id).to eq("sex4") + end + + it "has the correct header" do + expect(question.header).to eq("Which of these best describes Person 3’s gender identity?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Person 3’s gender identity") + end + + it "has expected check answers card number" do + expect(question.check_answers_card_number).to eq(4) + end + end + + context "and joint purchase" do + let(:question_id) { "sex5" } + let(:person_index) { 5 } + + before do + allow(page).to receive(:id).and_return("person_3_gender_identity_joint_purchase") + end + + it "has the correct id" do + expect(question.id).to eq("sex5") + end + + it "has the correct header" do + expect(question.header).to eq("Which of these best describes Person 3’s gender identity?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Person 3’s gender identity") + end + + it "has expected check answers card number" do + expect(question.check_answers_card_number).to eq(5) + end + end + end + + context "when person 4" do + context "and not joint purchase" do + let(:question_id) { "sex5" } + let(:person_index) { 5 } + + before do + allow(page).to receive(:id).and_return("person_4_gender_identity") + end + + it "has the correct id" do + expect(question.id).to eq("sex5") + end + + it "has the correct header" do + expect(question.header).to eq("Which of these best describes Person 4’s gender identity?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Person 4’s gender identity") + end + + it "has expected check answers card number" do + expect(question.check_answers_card_number).to eq(5) + end + end + + context "and joint purchase" do + let(:question_id) { "sex6" } + let(:person_index) { 6 } + + before do + allow(page).to receive(:id).and_return("person_4_gender_identity_joint_purchase") + end + + it "has the correct id" do + expect(question.id).to eq("sex6") + end + + it "has the correct header" do + expect(question.header).to eq("Which of these best describes Person 4’s gender identity?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Person 4’s gender identity") + end + + it "has expected check answers card number" do + expect(question.check_answers_card_number).to eq(6) + end + end + end +end