# frozen_string_literal: true RSpec.describe Jobs::RemoveBanner do fab!(:topic) { Fabricate(:topic) } fab!(:user) { topic.user } context "when topic is not bannered until" do it "doesn’t enqueue a future job to remove it" do expect do topic.make_banner!(user) end.not_to change { Jobs::RemoveBanner.jobs.size } end end context "when topic is bannered until" do context "when bannered_until is a valid date" do it "enqueues a future job to remove it" do bannered_until = 5.days.from_now expect(topic.archetype).to eq(Archetype.default) expect do topic.make_banner!(user, bannered_until.to_s) end.to change { Jobs::RemoveBanner.jobs.size }.by(1) topic.reload expect(topic.archetype).to eq(Archetype.banner) job = Jobs::RemoveBanner.jobs[0] expect(Time.at(job["at"])).to be_within_one_minute_of(bannered_until) expect(job["args"][0]["topic_id"]).to eq(topic.id) job["class"].constantize.new.perform(*job["args"]) topic.reload expect(topic.archetype).to eq(Archetype.default) end end context "when bannered_until is an invalid date" do it "doesn’t enqueue a future job to remove it" do expect do expect do topic.make_banner!(user, "xxx") end.to raise_error(Discourse::InvalidParameters) end.not_to change { Jobs::RemoveBanner.jobs.size } end end end end