Skip to content

Commit f18b920

Browse files
Refactor show action
Moving view instances to a View Object to keep the controller clean. Add coverage for business logic
1 parent 77ae00e commit f18b920

2 files changed

Lines changed: 63 additions & 4 deletions

File tree

app/models/view/requests.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,19 +66,19 @@ def request_types
6666
end
6767

6868
def selected_request_type
69-
filter_params[:by_request_type]
69+
filters[:by_request_type]
7070
end
7171

7272
def selected_request_item
73-
filter_params[:by_request_item_id]
73+
filters[:by_request_item_id]
7474
end
7575

7676
def selected_partner
77-
filter_params[:by_partner]
77+
filters[:by_partner]
7878
end
7979

8080
def selected_status
81-
filter_params[:by_status]
81+
filters[:by_status]
8282
end
8383
end
8484
end

spec/models/view/requests_spec.rb

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
RSpec.describe View::Requests do
2+
describe "#unfulfilled_requests_count" do
3+
it "returns the unfulfilled requests count for the given date range" do
4+
organization = create(:organization)
5+
create(:request, :pending, organization:)
6+
create(:request, :started, organization:)
7+
create(:request, :fulfilled, organization:)
8+
9+
requests = View::Requests.from_params(params: {}, organization:, helpers:)
10+
11+
expect(requests.unfulfilled_requests_count).to eq(2)
12+
end
13+
end
14+
15+
describe "#calculate_product_totals" do
16+
it "returns the product total items service" do
17+
organization = create(:organization)
18+
create(:request, :pending, organization:)
19+
total_items_service_double = instance_double(RequestsTotalItemsService, calculate: {"Diaper" => 10})
20+
allow(RequestsTotalItemsService).to receive(:new).with(requests: organization.requests).and_return(total_items_service_double)
21+
22+
requests = View::Requests.from_params(params: {}, organization:, helpers:)
23+
24+
expect(requests.calculate_product_totals).to eq({"Diaper" => 10})
25+
end
26+
end
27+
28+
describe "selected filter params" do
29+
it "returns the filter params given" do
30+
organization = create(:organization)
31+
create(:request, :pending, organization:)
32+
params = ActionController::Parameters.new(
33+
{
34+
filters: {
35+
by_request_type: "quantity",
36+
by_request_item_id: "1",
37+
by_partner: "A Local Partner",
38+
by_status: "pending"
39+
}
40+
}
41+
).permit!
42+
43+
requests = View::Requests.from_params(params:, organization:, helpers:)
44+
45+
expect(requests.selected_request_type).to eq("quantity")
46+
expect(requests.selected_request_item).to eq("1")
47+
expect(requests.selected_partner).to eq("A Local Partner")
48+
expect(requests.selected_status).to eq("pending")
49+
end
50+
end
51+
52+
def helpers
53+
Class.new do
54+
def self.selected_range
55+
(1.month.ago..2.days.from_now)
56+
end
57+
end
58+
end
59+
end

0 commit comments

Comments
 (0)