1010 it 'should report zero values' do
1111 expect ( report . report [ :name ] ) . to eq ( "Adult Incontinence" )
1212 expect ( report . report [ :entries ] ) . to match ( hash_including ( {
13+ "Adult incontinence supplies distributed" => "0" ,
14+ "Adults Assisted Per Month" => 0 ,
1315 "% adult incontinence bought" => "0%" ,
1416 "% adult incontinence supplies donated" => "0%" ,
15- "Adult incontinence supplies distributed" => "0" ,
1617 "Adult incontinence supplies per adult per month" => 0 ,
1718 "Money spent purchasing adult incontinence supplies" => "$0.00"
1819 } ) )
3940 adult_incontinence_item = organization . items . adult_incontinence . first
4041 non_adult_incontinence_item = organization . items . where . not ( id : organization . items . adult_incontinence ) . first
4142
43+ # kits
44+ adult_incontinence_kit_item_1 = create ( :item , name : "Adult Briefs (Medium)" , reporting_category : "adult_incontinence" , distribution_quantity : 1 )
45+ adult_incontinence_kit_item_2 = create ( :item , name : "Adult Briefs (Large)" , reporting_category : "adult_incontinence" , distribution_quantity : 1 )
46+ adult_incontinence_kit_item_3 = create ( :item , name : "Adult Briefs (Small)" , reporting_category : "adult_incontinence" , distribution_quantity : 1 )
47+ non_adult_incontinence_kit_item = create ( :item , name : "Baby Wipes" , reporting_category : "other" )
48+
49+ donation_1 = create ( :donation )
50+ donation_2 = create ( :donation )
51+ donation_3 = create ( :donation )
52+ donation_4 = create ( :donation )
53+
54+ line_item_1 = LineItem . create! ( item : adult_incontinence_kit_item_1 , itemizable_id : donation_1 . id , itemizable_type : "Donation" , quantity : 5 )
55+ line_item_2 = LineItem . create! ( item : adult_incontinence_kit_item_2 , itemizable_id : donation_2 . id , itemizable_type : "Donation" , quantity : 5 )
56+ line_item_4 = LineItem . create! ( item : adult_incontinence_kit_item_3 , itemizable_id : donation_4 . id , itemizable_type : "Donation" , quantity : 5 )
57+ line_item_3 = LineItem . create! ( item : non_adult_incontinence_kit_item , itemizable_id : donation_3 . id , itemizable_type : "Donation" , quantity : 5 )
58+
59+ @kit_1 = create ( :kit , line_items : [ line_item_1 ] , organization : organization , item : adult_incontinence_kit_item_1 )
60+ @kit_2 = create ( :kit , line_items : [ line_item_2 ] , organization : organization , item : adult_incontinence_kit_item_2 )
61+ @kit_4 = create ( :kit , line_items : [ line_item_4 ] , organization : organization , item : adult_incontinence_kit_item_3 )
62+ @kit_3 = create ( :kit , line_items : [ line_item_3 ] , organization : organization , item : non_adult_incontinence_kit_item )
63+
64+ # kit distributions
65+ kit_distribution_1 = create ( :distribution , organization : organization , issued_at : within_time )
66+ kit_distribution_2 = create ( :distribution , organization : organization , issued_at : within_time )
67+ kit_distribution_4 = create ( :distribution , organization : organization , issued_at : within_time )
68+ # wipes distribution
69+ kit_distribution_3 = create ( :distribution , organization : organization , issued_at : within_time )
70+
71+ create ( :line_item , :distribution , quantity : 100 , item : @kit_1 . line_items . first . item , itemizable : kit_distribution_1 )
72+ create ( :line_item , :distribution , quantity : 100 , item : @kit_2 . line_items . first . item , itemizable : kit_distribution_2 )
73+ create ( :line_item , :distribution , quantity : 100 , item : @kit_4 . line_items . first . item , itemizable : kit_distribution_4 )
74+ # wipes kit no ai items
75+ create ( :line_item , :distribution , quantity : 100 , item : @kit_3 . line_items . first . item , itemizable : kit_distribution_3 )
4276 # We will create data both within and outside our date range, and both adult_incontinence and non adult_incontinence.
4377 # Spec will ensure that only the required data is included.
4478
4579 # Distributions
4680 distributions = create_list ( :distribution , 2 , issued_at : within_time , organization : organization )
4781 outside_distributions = create_list ( :distribution , 2 , issued_at : outside_time , organization : organization )
4882 ( distributions + outside_distributions ) . each do |dist |
49- create_list ( :line_item , 5 , :distribution , quantity : 200 , item : adult_incontinence_item , itemizable : dist )
50- create_list ( :line_item , 5 , :distribution , quantity : 30 , item : non_adult_incontinence_item , itemizable : dist )
83+ create_list ( :line_item , 5 , :distribution , quantity : 5000 , item : adult_incontinence_item , itemizable : dist )
84+ create_list ( :line_item , 5 , :distribution , quantity : 500 , item : non_adult_incontinence_item , itemizable : dist )
5185 end
5286
5387 # Donations
94128 end
95129 end
96130
131+ it "returns an accurate number of adult served per month" do
132+ expect ( report . adults_served_per_month . round ) . to eq ( 108 )
133+ end
134+
135+ it "should return the number of loose adult incontinence supplies distributed" do
136+ expect ( report . distributed_adult_incontinence_items_from_kits ) . to eq ( 1500.0 )
137+ end
138+ it "should return the number of distributed adult incontinence items from kits" do
139+ expect ( report . distributed_adult_incontinence_items_from_kits ) . to eq ( 1500.0 )
140+ end
141+
142+ it "should return the number of distributed kits only containing adult incontinence items per month" do
143+ expect ( report . total_distributed_kits_containing_adult_incontinence_items_per_month ) . to eq ( 25.0 )
144+ end
145+
146+ it "should return the kits distributed within a specific year" do
147+ result = report . distributed_kits_for_year
148+ expect ( result . to_a ) . to match_array ( [ @kit_1 . id , @kit_2 . id , @kit_3 . id , @kit_4 . id ] )
149+ end
150+
97151 it 'should report normal values' do
98152 organization . items . adult_incontinence . first . update! ( distribution_quantity : 20 )
99-
100153 expect ( report . report [ :name ] ) . to eq ( "Adult Incontinence" )
101154 expect ( report . report [ :entries ] ) . to match ( hash_including ( {
102155 "% adult incontinence bought" => "60%" ,
103156 "% adult incontinence supplies donated" => "40%" ,
104- "Adult incontinence supplies distributed" => "2,000" ,
105- "Adult incontinence supplies per adult per month" => 20 ,
157+ "Adults Assisted Per Month" => 233.33 ,
158+ "Adult incontinence supplies distributed" => "51,800" ,
159+ "Adult incontinence supplies per adult per month" => 18.5 ,
106160 "Money spent purchasing adult incontinence supplies" => "$30.00"
107161 } ) )
108162 expect ( report . report [ :entries ] [ 'Adult incontinence supplies' ] . split ( ', ' ) )
115169 "Adult Briefs (XXS)" ,
116170 "Adult Incontinence Pads" ,
117171 "Underpads (Pack)" ,
172+ "Adult Cloth Diapers (Large/XL/XXL)" ,
173+ "Adult Cloth Diapers (Small/Medium)" ,
118174 "Liners (Incontinence)" ,
119- "Adult Cloth Diapers (Large/XL/XXL)" ,
120- "Adult Cloth Diapers (Small/Medium)" )
175+ "Adult Briefs (Small)" ,
176+ "Adult Briefs (Large)" ,
177+ "Adult Briefs (Medium)" )
121178 end
122179
123180 it 'should handle null distribution quantity' do
124181 expect ( report . report [ :name ] ) . to eq ( "Adult Incontinence" )
125182 expect ( report . report [ :entries ] ) . to match ( hash_including ( {
126183 "% adult incontinence bought" => "60%" ,
127184 "% adult incontinence supplies donated" => "40%" ,
128- "Adult incontinence supplies distributed" => "2,000" ,
129- "Adult incontinence supplies per adult per month" => 50 ,
185+ "Adult incontinence supplies distributed" => "51,800" ,
186+ "Adults Assisted Per Month" => 108.33 ,
187+ "Adult incontinence supplies per adult per month" => 39.85 ,
130188 "Money spent purchasing adult incontinence supplies" => "$30.00"
131189 } ) )
132190 expect ( report . report [ :entries ] [ 'Adult incontinence supplies' ] . split ( ', ' ) )
139197 "Adult Briefs (XXS)" ,
140198 "Adult Incontinence Pads" ,
141199 "Underpads (Pack)" ,
142- "Liners (Incontinence)" ,
143- "Adult Cloth Diapers (Large/XL/XXL)" ,
144- "Adult Cloth Diapers (Small/Medium)" )
200+ "Adult Cloth Diapers (Large/XL/XXL)" ,
201+ "Adult Cloth Diapers (Small/Medium)" ,
202+ "Liners (Incontinence)" ,
203+ "Adult Briefs (Small)" ,
204+ "Adult Briefs (Large)" ,
205+ "Adult Briefs (Medium)" )
145206 end
146207 end
147208 end
148- end
209+ end
0 commit comments