Files
nairobi/spec/models/widget/feed_spec.rb
Javi Martín d410fcbc0e Split scope tests
In the scenario where we want to test scopes and use `match_array`, we
usually declare variables we never use, which raises a warning in the
Ruby interpreter (since the main cause for an unused variable is a
typo).

So I've decided to just split the tests into cases where every record is
returned and cases were no records are returned, just like we do in
other places.

There are several other options we've considered:

1. Don't declare unused variables, but declare the ones we use
2. Prefix unused variables with un underscore
3. Declare just one variable being an array containing all elements, and
access the elements using Array#[]
4. Don't declare any variables, and compare results against attributes
such as titles

None of these options was met with enthusiasm.
2019-09-30 15:46:58 +02:00

87 lines
2.5 KiB
Ruby

require "rails_helper"
describe Widget::Feed do
let(:feed) { build(:widget_feed) }
context "validations" do
it "is valid" do
expect(feed).to be_valid
end
end
context "kinds" do
describe "#proposals" do
it "returns the most active proposals" do
best_proposal = create(:proposal, title: "Best proposal")
best_proposal.update_column(:hot_score, 10)
worst_proposal = create(:proposal, title: "Worst proposal")
worst_proposal.update_column(:hot_score, 2)
even_worst_proposal = create(:proposal, title: "Worst proposal")
even_worst_proposal.update_column(:hot_score, 1)
medium_proposal = create(:proposal, title: "Medium proposal")
medium_proposal.update_column(:hot_score, 5)
feed = build(:widget_feed, kind: "proposals")
expect(feed.proposals).to eq([best_proposal, medium_proposal, worst_proposal])
end
end
describe "#debates" do
it "returns the most active debates" do
best_debate = create(:debate, title: "Best debate")
best_debate.update_column(:hot_score, 10)
worst_debate = create(:debate, title: "Worst debate")
worst_debate.update_column(:hot_score, 2)
even_worst_debate = create(:debate, title: "Worst debate")
even_worst_debate.update_column(:hot_score, 1)
medium_debate = create(:debate, title: "Medium debate")
medium_debate.update_column(:hot_score, 5)
feed = build(:widget_feed, kind: "debates")
expect(feed.debates).to eq([best_debate, medium_debate, worst_debate])
end
end
describe "#processes" do
let(:feed) { build(:widget_feed, kind: "processes") }
it "returns open and published processes" do
open_process1 = create(:legislation_process, :open, :published, title: "Open process 1")
open_process2 = create(:legislation_process, :open, :published, title: "Open process 2")
open_process3 = create(:legislation_process, :open, :published, title: "Open process 3")
open_process4 = create(:legislation_process, :open, :published, title: "Open process 4")
expect(feed.processes).to eq([open_process4, open_process3, open_process2])
end
it "does not return past processes" do
create(:legislation_process, :past)
expect(feed.processes).to be_empty
end
it "does not return unpublished processes" do
create(:legislation_process, :open, :not_published)
expect(feed.processes).to be_empty
end
end
end
end