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.
87 lines
2.5 KiB
Ruby
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
|