Skip to content

Commit 9e5744b

Browse files
authored
[WRSAT-486] Incorporate NC exemptions into eligibility logic (#206)
1 parent f917e8c commit 9e5744b

6 files changed

Lines changed: 99 additions & 41 deletions

File tree

app/models/nc_screener.rb

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,18 @@ class NcScreener < ApplicationRecord
1111
before_save :remove_worked_last_five_years_if_has_diploma,
1212
:remove_homeschool_attributes_if_no
1313

14-
def at_least_55_no_diploma_not_working?
14+
def age_work_education_health_exemption?
1515
return false unless screener.age
1616

17-
screener.age >= 55 && has_hs_diploma_no? && worked_last_five_years_no?
17+
screener.age.between?(55, 64) && worked_last_five_years_no? && has_hs_diploma_no? && screener.preventing_work_medical_condition_yes?
1818
end
1919

2020
def operating_homeschool_30_or_more_hours?
21-
homeschool_hours.to_i >= 30
21+
teaches_homeschool_yes? && homeschool_hours.to_i >= 30
22+
end
23+
24+
def exempt_from_work_rules?
25+
operating_homeschool_30_or_more_hours? || age_work_education_health_exemption?
2226
end
2327

2428
private

app/models/screener.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,9 +218,9 @@ def earnings_above_minimum?
218218
working_weekly_earnings.to_f >= 217.50
219219
end
220220

221-
# TODO: Homeschooling and 5 year work eligibility for NC
222221
def exempt_from_work_rules?
223222
return true if age_qualified?
223+
return true if nc_screener.present? && nc_screener.exempt_from_work_rules?
224224

225225
ELIGIBILITY_EXEMPTION_ATTRIBUTES.any? do |attribute|
226226
(attribute == :is_working) ? working_exempt? : public_send("#{attribute}_yes?")

lib/pdf_filler/packet_pdf.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ def combined_pdf
100100

101101
def shared_fields
102102
{
103-
at_least_55_no_diploma_not_working: @screener.nc_screener.at_least_55_no_diploma_not_working?,
103+
at_least_55_no_diploma_not_working: @screener.nc_screener.age_work_education_health_exemption?,
104104
birth_date: @screener.birth_date.to_s,
105105
caring_for_child_under_6: @screener.caring_for_child_under_6_yes?,
106106
caring_for_disabled_or_ill_person: @screener.caring_for_disabled_or_ill_person_yes?,

spec/lib/pdf_filler/packet_pdf_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,8 @@
102102
end
103103

104104
describe "calculated fields" do
105-
it "delegates at_least_55_no_diploma_not_working to nc_screener" do
106-
allow(nc_screener).to receive(:at_least_55_no_diploma_not_working?).and_return(true)
105+
it "delegates age_work_education_health_exemption to nc_screener" do
106+
allow(nc_screener).to receive(:age_work_education_health_exemption?).and_return(true)
107107
expect(result[:at_least_55_no_diploma_not_working]).to be true
108108
end
109109

spec/models/nc_screener_spec.rb

Lines changed: 70 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -63,58 +63,94 @@
6363
end
6464
end
6565

66-
describe "#at_least_55_no_diploma_not_working?" do
67-
it "returns true when age >= 55, no diploma, and not worked in last 5 years" do
68-
nc_screener = build(:nc_screener,
69-
screener: build(:screener, birth_date: 56.years.ago.to_date),
70-
has_hs_diploma: "no",
71-
worked_last_five_years: "no")
66+
describe "#operating_homeschool_30_or_more_hours?" do
67+
it "returns true when homeschool_hours >= 30" do
68+
nc_screener = build(:nc_screener, teaches_homeschool: "yes", homeschool_hours: 30)
69+
expect(nc_screener.operating_homeschool_30_or_more_hours?).to be true
70+
end
7271

73-
expect(nc_screener.at_least_55_no_diploma_not_working?).to be true
72+
it "returns false when homeschool_hours < 30" do
73+
nc_screener = build(:nc_screener, teaches_homeschool: "yes", homeschool_hours: 29)
74+
expect(nc_screener.operating_homeschool_30_or_more_hours?).to be false
7475
end
7576

76-
it "returns false when age < 55" do
77-
nc_screener = build(:nc_screener,
78-
screener: build(:screener, birth_date: 54.years.ago.to_date),
79-
has_hs_diploma: "no",
80-
worked_last_five_years: "no")
77+
it "returns false when homeschool_hours is nil" do
78+
nc_screener = build(:nc_screener)
79+
expect(nc_screener.operating_homeschool_30_or_more_hours?).to be false
80+
end
81+
end
8182

82-
expect(nc_screener.at_least_55_no_diploma_not_working?).to be false
83+
describe "#age_work_education_health_exemption?" do
84+
it "returns true when age >= 55 && age <= 64 && worked_last_five_years_no? && has_hs_diploma_no? && preventing_work_medical_condition_yes?" do
85+
nc_screener = build(:nc_screener, worked_last_five_years: "no", has_hs_diploma: "no")
86+
create(:screener, state: "NC", birth_date: 56.years.ago.to_date, preventing_work_medical_condition: "yes", nc_screener: nc_screener)
87+
expect(nc_screener.exempt_from_work_rules?).to be true
8388
end
8489

85-
it "returns false when has a diploma" do
86-
nc_screener = build(:nc_screener,
87-
screener: build(:screener, birth_date: 56.years.ago.to_date),
88-
has_hs_diploma: "yes",
89-
worked_last_five_years: "no")
90+
it "returns false when age is not set" do
91+
nc_screener = build(:nc_screener, worked_last_five_years: "no", has_hs_diploma: "no")
92+
create(:screener, state: "NC", preventing_work_medical_condition: "yes", nc_screener: nc_screener)
93+
expect(nc_screener.exempt_from_work_rules?).to be false
94+
end
9095

91-
expect(nc_screener.at_least_55_no_diploma_not_working?).to be false
96+
it "returns false when age is too young" do
97+
nc_screener = build(:nc_screener, worked_last_five_years: "no", has_hs_diploma: "no")
98+
create(:screener, state: "NC", birth_date: 20.years.ago.to_date, preventing_work_medical_condition: "yes", nc_screener: nc_screener)
99+
expect(nc_screener.exempt_from_work_rules?).to be false
92100
end
93101

94-
it "returns false when worked in last 5 years" do
95-
nc_screener = build(:nc_screener,
96-
screener: build(:screener, birth_date: 56.years.ago.to_date),
97-
has_hs_diploma: "no",
98-
worked_last_five_years: "yes")
102+
it "returns false when age is too old" do
103+
nc_screener = build(:nc_screener, worked_last_five_years: "no", has_hs_diploma: "no")
104+
create(:screener, state: "NC", birth_date: 70.years.ago.to_date, preventing_work_medical_condition: "yes", nc_screener: nc_screener)
105+
expect(nc_screener.exempt_from_work_rules?).to be false
106+
end
107+
108+
it "returns false worked_last_five_years is yes" do
109+
nc_screener = build(:nc_screener, worked_last_five_years: "yes", has_hs_diploma: "no")
110+
create(:screener, state: "NC", birth_date: 56.years.ago.to_date, preventing_work_medical_condition: "yes", nc_screener: nc_screener)
111+
expect(nc_screener.exempt_from_work_rules?).to be false
112+
end
99113

100-
expect(nc_screener.at_least_55_no_diploma_not_working?).to be false
114+
it "returns false when has_hs_diploma is yes" do
115+
nc_screener = build(:nc_screener, worked_last_five_years: "no", has_hs_diploma: "yes")
116+
create(:screener, state: "NC", birth_date: 56.years.ago.to_date, preventing_work_medical_condition: "yes", nc_screener: nc_screener)
117+
expect(nc_screener.exempt_from_work_rules?).to be false
118+
end
119+
120+
it "returns false when preventing_work_medical_condition is no" do
121+
nc_screener = build(:nc_screener, worked_last_five_years: "no", has_hs_diploma: "no")
122+
create(:screener, state: "NC", birth_date: 56.years.ago.to_date, preventing_work_medical_condition: "no", nc_screener: nc_screener)
123+
expect(nc_screener.exempt_from_work_rules?).to be false
101124
end
102125
end
103126

104-
describe "#operating_homeschool_30_or_more_hours?" do
105-
it "returns true when homeschool_hours >= 30" do
106-
nc_screener = build(:nc_screener, homeschool_hours: 30)
107-
expect(nc_screener.operating_homeschool_30_or_more_hours?).to be true
127+
describe "#exempt_from_work_rules?" do
128+
it "returns true when operating a homeschool for 30 or more hours and age/work/education/health exemption is true" do
129+
nc_screener = build(:nc_screener)
130+
allow(nc_screener).to receive(:operating_homeschool_30_or_more_hours?).and_return(true)
131+
allow(nc_screener).to receive(:age_work_education_health_exemption?).and_return(true)
132+
expect(nc_screener.exempt_from_work_rules?).to be true
108133
end
109134

110-
it "returns false when homeschool_hours < 30" do
111-
nc_screener = build(:nc_screener, homeschool_hours: 29)
112-
expect(nc_screener.operating_homeschool_30_or_more_hours?).to be false
135+
it "returns true when not operating a homeschool for 30 or more hours and age/work/education/health exemption is true" do
136+
nc_screener = build(:nc_screener)
137+
allow(nc_screener).to receive(:operating_homeschool_30_or_more_hours?).and_return(false)
138+
allow(nc_screener).to receive(:age_work_education_health_exemption?).and_return(true)
139+
expect(nc_screener.exempt_from_work_rules?).to be true
113140
end
114141

115-
it "returns false when homeschool_hours is nil" do
142+
it "returns true when operating a homeschool for 30 or more hours and age/work/education/health exemption is false" do
116143
nc_screener = build(:nc_screener)
117-
expect(nc_screener.operating_homeschool_30_or_more_hours?).to be false
144+
allow(nc_screener).to receive(:operating_homeschool_30_or_more_hours?).and_return(true)
145+
allow(nc_screener).to receive(:age_work_education_health_exemption?).and_return(false)
146+
expect(nc_screener.exempt_from_work_rules?).to be true
147+
end
148+
149+
it "returns false when not operating a homeschool for 30 or more hours and age/work/education/health exemption is false" do
150+
nc_screener = build(:nc_screener)
151+
allow(nc_screener).to receive(:operating_homeschool_30_or_more_hours?).and_return(false)
152+
allow(nc_screener).to receive(:age_work_education_health_exemption?).and_return(false)
153+
expect(nc_screener.exempt_from_work_rules?).to be false
118154
end
119155
end
120156
end

spec/models/screener_spec.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,24 @@
557557
expect(screener.exempt_from_work_rules?).to eq true
558558
end
559559

560+
it "returns true if nc_screener is present and exempt" do
561+
nc_screener = build(:nc_screener)
562+
allow(nc_screener).to receive(:exempt_from_work_rules?).and_return(true)
563+
564+
screener = build(:screener, nc_screener: nc_screener)
565+
566+
expect(screener.exempt_from_work_rules?).to eq true
567+
end
568+
569+
it "returns false if nc_screener is present but not exempt and no other exemptions apply" do
570+
nc_screener = build(:nc_screener)
571+
allow(nc_screener).to receive(:exempt_from_work_rules?).and_return(false)
572+
573+
screener = build(:screener, nc_screener: nc_screener)
574+
575+
expect(screener.exempt_from_work_rules?).to eq false
576+
end
577+
560578
it "returns true if a non-working exemption attribute is yes" do
561579
screener = build(:screener, is_student: "yes")
562580
expect(screener.exempt_from_work_rules?).to eq true

0 commit comments

Comments
 (0)