mirror of
https://github.com/manyfold3d/manyfold.git
synced 2026-10-22 11:42:19 -05:00
111 lines
3.7 KiB
Ruby
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
|