discourse/spec/components/pinned_check_spec.rb
Sam Saffron 4ea21fa2d0 DEV: use #frozen_string_literal: true on all spec
This change both speeds up specs (less strings to allocate) and helps catch
cases where methods in Discourse are mutating inputs.

Overall we will be migrating everything to use #frozen_string_literal: true
it will take a while, but this is the first and safest move in this direction
2019-04-30 10:27:42 +10:00

57 lines
1.7 KiB
Ruby

# frozen_string_literal: true
require 'rails_helper'
require 'pinned_check'
describe PinnedCheck do
let(:pinned_at) { 12.hours.ago }
let(:unpinned_topic) { Fabricate.build(:topic) }
let(:pinned_topic) { Fabricate.build(:topic, pinned_at: pinned_at) }
context "without a topic_user record (either anonymous or never been in the topic)" do
it "returns false if the topic is not pinned" do
expect(PinnedCheck.pinned?(unpinned_topic)).to eq(false)
end
it "returns true if the topic is pinned" do
expect(PinnedCheck.pinned?(unpinned_topic)).to eq(false)
end
end
context "with a topic_user record" do
let(:user) { Fabricate.build(:user) }
describe "unpinned topic" do
let(:topic_user) { TopicUser.new(topic: unpinned_topic, user: user) }
it "returns false" do
expect(PinnedCheck.pinned?(unpinned_topic, topic_user)).to eq(false)
end
end
describe "pinned topic" do
let(:topic_user) { TopicUser.new(topic: pinned_topic, user: user) }
it "is pinned if the topic_user's cleared_pinned_at is blank" do
expect(PinnedCheck.pinned?(pinned_topic, topic_user)).to eq(true)
end
it "is not pinned if the topic_user's cleared_pinned_at is later than when it was pinned_at" do
topic_user.cleared_pinned_at = (pinned_at + 1.hour)
expect(PinnedCheck.pinned?(pinned_topic, topic_user)).to eq(false)
end
it "is pinned if the topic_user's cleared_pinned_at is earlier than when it was pinned_at" do
topic_user.cleared_pinned_at = (pinned_at - 3.hours)
expect(PinnedCheck.pinned?(pinned_topic, topic_user)).to eq(true)
end
end
end
end