require "rails_helper" RSpec.describe InterruptionScreenHelper do form_handler = FormHandler.instance let(:form) { form_handler.get_form("test_form") } let(:subsection) { form.get_subsection("household_characteristics") } let(:user) { FactoryBot.create(:user) } let(:lettings_log) do FactoryBot.create( :lettings_log, :in_progress, ecstat1: 1, earnings: 750, incfreq: 1, created_by: user, sex1: "F", ) end around do |example| Timecop.freeze(Time.zone.local(2022, 1, 1)) do Singleton.__init__(FormHandler) example.run end Timecop.return Singleton.__init__(FormHandler) end describe "display_informative_text" do context "when 2 out of 2 arguments are given" do it "returns correct informative text" do informative_text = { "translation" => "soft_validations.net_income.hint_text", "arguments" => [ { "key" => "ecstat1", "label" => true, "i18n_template" => "ecstat1", }, { "key" => "earnings", "label" => true, "i18n_template" => "earnings", }, ], } expect(display_informative_text(informative_text, lettings_log)) .to eq(I18n.t("soft_validations.net_income.hint_text", ecstat1: lettings_log.form.get_question("ecstat1", lettings_log).answer_label(lettings_log).downcase, earnings: lettings_log.form.get_question("earnings", lettings_log).answer_label(lettings_log))) end end context "when 1 out of 1 arguments is given" do it "returns correct informative text" do informative_text = { "translation" => "test.one_argument", "arguments" => [ { "key" => "ecstat1", "label" => true, "i18n_template" => "ecstat1", }, ], } expect(display_informative_text(informative_text, lettings_log)) .to eq(I18n.t("test.one_argument", ecstat1: lettings_log.form.get_question("ecstat1", lettings_log).answer_label(lettings_log).downcase)) end end context "when 2 out of 1 arguments are given" do it "returns correct informative text" do informative_text = { "translation" => "test.one_argument", "arguments" => [ { "key" => "ecstat1", "label" => true, "i18n_template" => "ecstat1", }, { "key" => "earnings", "label" => true, "i18n_template" => "earnings", }, ], } expect(display_informative_text(informative_text, lettings_log)) .to eq(I18n.t("test.one_argument", ecstat1: lettings_log.form.get_question("ecstat1", lettings_log).answer_label(lettings_log).downcase)) end end context "when 1 out of 2 arguments are given" do it "returns an empty string" do informative_text = { "translation" => "soft_validations.net_income.hint_text", "arguments" => [ { "key" => "ecstat1", "label" => true, "i18n_template" => "ecstat1", }, ], } expect(display_informative_text(informative_text, lettings_log)) .to eq("") end end context "when an argument is given not for a label" do translation = "test.title_text.one_argument" it "returns the correct text" do informative_text_hash = { "translation" => translation, "arguments" => [ { "key" => "earnings", "i18n_template" => "argument", }, ], } expect(display_informative_text(informative_text_hash, lettings_log)).to eq(I18n.t(translation, argument: lettings_log.earnings)) end end context "when and argument is given with a key and arguments for the key" do it "makes the correct method call" do informative_text_hash = { "arguments" => [ { "key" => "retirement_age_for_person", "arguments_for_key" => 1, "i18n_template" => "argument", }, ], } allow(lettings_log).to receive(:retirement_age_for_person) display_informative_text(informative_text_hash, lettings_log) expect(lettings_log).to have_received(:retirement_age_for_person).with(1) end it "returns the correct text" do translation = "test.title_text.one_argument" informative_text_hash = { "translation" => translation, "arguments" => [ { "key" => "retirement_age_for_person", "arguments_for_key" => 1, "i18n_template" => "argument", }, ], } expect(display_informative_text(informative_text_hash, lettings_log)).to eq(I18n.t(translation, argument: lettings_log.retirement_age_for_person(1))) end end end describe "display_title_text" do context "when title text has no arguments" do it "returns the correct title text" do title_text = { "translation" => "test.title_text.no_argument" } expect(display_title_text(title_text, lettings_log)) .to eq(I18n.t("test.title_text.no_argument")) end end context "when title text has arguments" do it "returns the correct title text" do title_text = { "translation" => "test.title_text.one_argument", "arguments" => [ { "key" => "ecstat1", "label" => true, "i18n_template" => "argument", }, ], } expect(display_title_text(title_text, lettings_log)) .to eq(I18n.t("test.title_text.one_argument", argument: lettings_log.form.get_question("ecstat1", lettings_log).answer_label(lettings_log).downcase)) end end context "when title text is not defined" do it "returns an empty string" do expect(display_title_text(nil, lettings_log)).to eq("") end end context "when title text is empty string" do it "returns an empty string" do expect(display_title_text("", lettings_log)).to eq("") end end end end