Browse Source
* add the question * CLDC-4174: update question number for 2026 * CLDc-4174: update question number for 2026 * CLDc-4174: update subsection * CLDc-4174: update question specs * CLDC-4174: add subsection spec * CLDc-4174: lint * CLDc-4174: add new page test * CLDC-4241: lint * CLDC-4241: lint * CLDC-4175: db updates * CLDC-4175: add new question to ui flow * CLDC-4175: csv label for new question * CLDC-4175: row parser updates * CLDC-4175: export updates * CLDC-4174: copy updates * CLDC-4174: add validation that new value is different * CLDC-4174: parser updates * CLDC-4174: migration linting * CLDC-4174: add tests * CLDC-4174: fixture updates * CLDC-4174: linting * CLDC-4175: export and test updates * CLDC-4175: row parser field renumbering * CLDC-4175: test fixes * CLDC-4175: test and schema updates post merge * CLDC-4175: lint * CLDC-4175: lint * CLDC-4175: lint * CLDC-4175: add reverse validation * CLDC-4175: cleanup sales_log_to_csv.rb * CLDC-4226: test fixture updates * CLDC-4175: update export spec * CLDC-4175: update validation message * CLDC-4175: remove redundant range validation * CLDC-4175: test with real values in row parser * CLDC-4175: export test updates * CLDC-4175: update row parser spec and examples * CLDC-4175: update row parser spec and examples * CLDC-4175: update row parser spec and examples * CLDC-4175: update row parser spec and examples * CLDC-4175: update row parser spec and examples * CLDC-4248: respond to comments * CLDC-4175: remove newservicecharges custom call chain * CLDC-4175: include new spec requirement * CLDC-4175: update financial_validations_spec.rb --------- Co-authored-by: Samuel Young <samuel.young@softwire.com>pull/3223/head
30 changed files with 436 additions and 39 deletions
@ -0,0 +1,14 @@
|
||||
class Form::Sales::Pages::ServiceChargeChanged < ::Form::Page |
||||
def initialize(id, hsh, subsection) |
||||
super |
||||
@id = "service_charge_changed" |
||||
@copy_key = "sales.sale_information.servicecharges_changed" |
||||
end |
||||
|
||||
def questions |
||||
@questions ||= [ |
||||
Form::Sales::Questions::HasServiceChargesChanged.new(nil, nil, self), |
||||
Form::Sales::Questions::NewServiceCharges.new(nil, nil, self), |
||||
] |
||||
end |
||||
end |
||||
@ -0,0 +1,27 @@
|
||||
class Form::Sales::Questions::HasServiceChargesChanged < ::Form::Question |
||||
def initialize(id, hsh, page) |
||||
super |
||||
@id = "hasservicechargeschanged" |
||||
@type = "radio" |
||||
@answer_options = ANSWER_OPTIONS |
||||
@conditional_for = { |
||||
"newservicecharges" => [1], |
||||
} |
||||
@hidden_in_check_answers = { |
||||
"depends_on" => [ |
||||
{ |
||||
"hasservicechargeschanged" => 1, |
||||
}, |
||||
], |
||||
} |
||||
@copy_key = "sales.sale_information.servicecharges_changed.has_service_charges_changed" |
||||
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] |
||||
end |
||||
|
||||
ANSWER_OPTIONS = { |
||||
"1" => { "value" => "Yes" }, |
||||
"2" => { "value" => "No" }, |
||||
}.freeze |
||||
|
||||
QUESTION_NUMBER_FROM_YEAR = { 2026 => 0 }.freeze |
||||
end |
||||
@ -0,0 +1,17 @@
|
||||
class Form::Sales::Questions::NewServiceCharges < ::Form::Question |
||||
def initialize(id, hsh, page) |
||||
super |
||||
@id = "newservicecharges" |
||||
@type = "numeric" |
||||
@min = 0 |
||||
@max = 9999.99 |
||||
@step = 0.01 |
||||
@width = 5 |
||||
@prefix = "£" |
||||
@copy_key = "sales.sale_information.servicecharges_changed.new_service_charges" |
||||
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] |
||||
@strip_commas = true |
||||
end |
||||
|
||||
QUESTION_NUMBER_FROM_YEAR = { 2026 => 0 }.freeze |
||||
end |
||||
@ -0,0 +1,8 @@
|
||||
class AddServiceChargeChangedToSalesLogs < ActiveRecord::Migration[7.2] |
||||
def change |
||||
change_table :sales_logs, bulk: true do |t| |
||||
t.column :hasservicechargeschanged, :integer |
||||
t.column :newservicecharges, :decimal, precision: 10, scale: 2 |
||||
end |
||||
end |
||||
end |
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,31 @@
|
||||
require "rails_helper" |
||||
|
||||
RSpec.describe Form::Sales::Pages::ServiceChargeChanged, type: :model do |
||||
include CollectionTimeHelper |
||||
|
||||
subject(:page) { described_class.new(page_id, page_definition, subsection) } |
||||
|
||||
let(:page_id) { nil } |
||||
let(:page_definition) { nil } |
||||
let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date: collection_start_date_for_year(2026))) } |
||||
|
||||
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[hasservicechargeschanged newservicecharges]) |
||||
end |
||||
|
||||
it "has the correct id" do |
||||
expect(page.id).to eq("service_charge_changed") |
||||
end |
||||
|
||||
it "has the correct description" do |
||||
expect(page.description).to be_nil |
||||
end |
||||
|
||||
it "has correct depends_on" do |
||||
expect(page.depends_on).to be_nil |
||||
end |
||||
end |
||||
@ -0,0 +1,56 @@
|
||||
require "rails_helper" |
||||
|
||||
RSpec.describe Form::Sales::Questions::HasServiceChargesChanged, type: :model do |
||||
include CollectionTimeHelper |
||||
|
||||
subject(:question) { described_class.new(question_id, question_definition, page) } |
||||
|
||||
let(:question_id) { nil } |
||||
let(:question_definition) { nil } |
||||
let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date:)) } |
||||
let(:page) { instance_double(Form::Page, subsection:) } |
||||
let(:start_date) { collection_start_date_for_year(2026) } |
||||
|
||||
it "has correct page" do |
||||
expect(question.page).to eq(page) |
||||
end |
||||
|
||||
it "has the correct id" do |
||||
expect(question.id).to eq("hasservicechargeschanged") |
||||
end |
||||
|
||||
it "has the correct type" do |
||||
expect(question.type).to eq("radio") |
||||
end |
||||
|
||||
it "is not marked as derived" do |
||||
expect(question.derived?(nil)).to be false |
||||
end |
||||
|
||||
it "has the correct answer_options" do |
||||
expect(question.answer_options).to eq({ |
||||
"1" => { "value" => "Yes" }, |
||||
"2" => { "value" => "No" }, |
||||
}) |
||||
end |
||||
|
||||
it "has correct conditional for" do |
||||
expect(question.conditional_for).to eq({ |
||||
"newservicecharges" => [1], |
||||
}) |
||||
end |
||||
|
||||
it "has correct hidden_in_check_answers for" do |
||||
expect(question.hidden_in_check_answers).to eq({ |
||||
"depends_on" => [ |
||||
{ |
||||
"hasservicechargeschanged" => 1, |
||||
}, |
||||
], |
||||
}) |
||||
end |
||||
|
||||
it "has the correct question number" do |
||||
expect(question.question_number).to eq(0) |
||||
end |
||||
end |
||||
@ -0,0 +1,53 @@
|
||||
require "rails_helper" |
||||
|
||||
RSpec.describe Form::Sales::Questions::NewServiceCharges, type: :model do |
||||
include CollectionTimeHelper |
||||
|
||||
subject(:question) { described_class.new(question_id, question_definition, page) } |
||||
|
||||
let(:question_id) { nil } |
||||
let(:question_definition) { nil } |
||||
let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date:)) } |
||||
let(:page) { instance_double(Form::Page, subsection:) } |
||||
let(:start_date) { collection_start_date_for_year(2026) } |
||||
|
||||
it "has correct page" do |
||||
expect(question.page).to eq(page) |
||||
end |
||||
|
||||
it "has the correct id" do |
||||
expect(question.id).to eq("newservicecharges") |
||||
end |
||||
|
||||
it "has the correct type" do |
||||
expect(question.type).to eq("numeric") |
||||
end |
||||
|
||||
it "is not marked as derived" do |
||||
expect(question.derived?(nil)).to be false |
||||
end |
||||
|
||||
it "has the correct width" do |
||||
expect(question.width).to be 5 |
||||
end |
||||
|
||||
it "has the correct min" do |
||||
expect(question.min).to be 0 |
||||
end |
||||
|
||||
it "has the correct max" do |
||||
expect(question.max).to be 9999.99 |
||||
end |
||||
|
||||
it "has the correct step" do |
||||
expect(question.step).to be 0.01 |
||||
end |
||||
|
||||
it "has the correct prefix" do |
||||
expect(question.prefix).to eq("£") |
||||
end |
||||
|
||||
it "has the correct question number" do |
||||
expect(question.question_number).to eq(0) |
||||
end |
||||
end |
||||
Loading…
Reference in new issue