require "spec_helper" describe RSpec::SQLimit::Reporter do subject { described_class.new(counter) } context "no params were passed to the query" do let(:counter) { RSpec::SQLimit::Counter[/CREATE/, proc{ User.create }] } it "doesn't print binds" do # INSERT INTO "users" DEFAULT VALUES (0.284 ms) expect(subject.call).to include("DEFAULT VALUES") end end context "query contains params" do context "nil was passed as param" do let(:counter) do RSpec::SQLimit::Counter[/CREATE/, proc { User.create(id: nil) }] end it "doesn't print binds" do # INSERT INTO "users" DEFAULT VALUES (0.284 ms) expect(subject.call).to include("DEFAULT VALUES") end end context "single param was passed" do let(:counter) do RSpec::SQLimit::Counter[/CREATE/, proc { User.create(id: 1) }] end it "prints param as an array with one element" do # INSERT INTO "users" ("id") VALUES (?); [1] (0.234 ms) expect(subject.call).to include("VALUES (?); [1]") end end context "array was passed as a param" do let(:counter) do RSpec::SQLimit::Counter[ /SELECT/, proc { User.where(id: [1, 2, 3]).to_a } ] end it "prints all params" do # rubocop: disable Metrics/LineLength # SELECT "users".* FROM "users" WHERE "users"."id" IN (1, 2, 3) (0.17 ms)) # Rails >= 6: # SELECT "users".* FROM "users" WHERE "users"."id" IN (?, ?, ?); [1, 2, 3] (0.121 ms) # rubocop: enable Metrics/LineLength expect(subject.call).to include("1, 2, 3") end end end context "activerecord query caching was enabled" do let(:counter) do RSpec::SQLimit::Counter[/SELECT "users"/, proc { queries }] end let(:queries) do User.cache do User.where(id: 1).to_a User.where(id: 1).to_a User.where(id: [2, 3]).to_a User.where(id: [2, 3]).to_a end end it "ignores cached queries" do expect(subject.call).to include("2 queries were invoked") end end end