Files

111 lines
3.7 KiB
Ruby

require "rails_helper"
RSpec.describe Problem do
describe "querying visible scope" do
let(:settings) do
{
missing: :silent,
empty: :info,
nesting: :warning,
inefficient: :info,
duplicate: :warning
}
end
before do
create_list(:problem, 3, :missing)
create_list(:problem, 3, :inefficient)
end
it "lists visible problems" do # rubocop:todo RSpec/MultipleExpectations
expect(described_class.visible(settings).length).to eq 3
expect(described_class.visible(settings).map { it.category.to_sym }).to include :inefficient
end
it "does not include silenced problems" do
expect(described_class.visible(settings).map { it.category.to_sym }).not_to include :missing
end
it "falls back to default visibility settings" do # rubocop:todo RSpec/MultipleExpectations
expect(described_class.visible({missing: :silent}).length).to eq 3
expect(described_class.visible({missing: :silent}).map { it.category.to_sym }).to include :inefficient
end
end
context "when being ignored" do
it "have an ignored flag" do
p = build(:problem)
expect(p).to respond_to(:ignored)
end
it "leaves out ignored problems by default" do
create(:problem)
create(:problem, ignored: true)
expect(described_class.count).to eq(1)
end
it "includes ignored problems when specified" do
create(:problem)
create(:problem, ignored: true)
expect(described_class.unscoped.count).to eq(2)
end
it "can ignore an existing problem" do # rubocop:todo RSpec/ExampleLength, RSpec/MultipleExpectations
p = create(:problem)
expect(p.ignored).to be(false)
expect(described_class.count).to eq(1)
p.update!(ignored: true)
expect(p.ignored).to be(true)
expect(described_class.count).to eq(0)
end
it "can unignore an existing problem" do # rubocop:todo RSpec/ExampleLength, RSpec/MultipleExpectations
p = create(:problem, ignored: true)
expect(p.ignored).to be(true)
expect(described_class.count).to eq(0)
p.update!(ignored: false)
expect(p.ignored).to be(false)
expect(described_class.count).to eq(1)
end
end
context "when updating problem state" do
let(:model) { create(:model, license: nil) }
it "creates a problem that should exist but doesn't" do
expect {
described_class.create_or_clear model, :no_license, model.license.blank?
}.to change(described_class, :count).from(0).to(1)
end
it "removes a problem that shouldn't exist but does" do
described_class.create_or_clear model, :no_license, model.license.blank?
model.update!(license: "CC-BY-4.0")
expect {
described_class.create_or_clear model, :no_license, model.license.blank?
}.to change(described_class, :count).from(1).to(0)
end
it "does nothing with a problem that shouldn't exist and doesn't" do
model.update!(license: "CC-BY-4.0")
expect {
described_class.create_or_clear model, :no_license, model.license.blank?
}.not_to change(described_class, :count)
end
it "does nothing with a problem that should exist and does" do
described_class.create_or_clear model, :no_license, model.license.blank?
expect {
described_class.create_or_clear model, :no_license, model.license.blank?
}.not_to change(described_class, :count)
end
it "does nothing with a problem that should exist and does, but is ignored" do
described_class.create_or_clear model, :no_license, model.license.blank?, ignored: true
expect {
described_class.create_or_clear model, :no_license, model.license.blank?
}.not_to raise_error
end
end
end