require "rails_helper" describe Permalink do describe "normalization" do it "correctly normalizes" do normalizer = Permalink::Normalizer.new("/(\\/hello.*)\\?.*/\\1|/(\\/bye.*)\\?.*/\\1") expect(normalizer.normalize("/hello?a=1")).to eq("/hello") expect(normalizer.normalize("/bye?test=1")).to eq("/bye") expect(normalizer.normalize("/bla?a=1")).to eq("/bla?a=1") end end describe "new record" do it "strips blanks" do permalink = described_class.create(url: " my/old/url ") expect(permalink.url).to eq("my/old/url") end it "removes leading slash" do permalink = described_class.create(url: "/my/old/url") expect(permalink.url).to eq("my/old/url") end end describe "target_url" do let(:permalink) { Fabricate.build(:permalink) } let(:topic) { Fabricate(:topic) } let(:post) { Fabricate(:post, topic: topic) } let(:category) { Fabricate(:category) } subject(:target_url) { permalink.target_url } it "returns a topic url when topic_id is set" do permalink.topic_id = topic.id expect(target_url).to eq(topic.relative_url) end it "returns nil when topic_id is set but topic is not found" do permalink.topic_id = 99999 expect(target_url).to eq(nil) end it "returns a post url when post_id is set" do permalink.post_id = post.id expect(target_url).to eq(post.url) end it "returns nil when post_id is set but post is not found" do permalink.post_id = 99999 expect(target_url).to eq(nil) end it "returns a post url when post_id and topic_id are both set" do permalink.post_id = post.id permalink.topic_id = topic.id expect(target_url).to eq(post.url) end it "returns a category url when category_id is set" do permalink.category_id = category.id expect(target_url).to eq(category.url) end it "returns nil when category_id is set but category is not found" do permalink.category_id = 99999 expect(target_url).to eq(nil) end it "returns a post url when topic_id, post_id, and category_id are all set for some reason" do permalink.post_id = post.id permalink.topic_id = topic.id permalink.category_id = category.id expect(target_url).to eq(post.url) end it "returns nil when nothing is set" do expect(target_url).to eq(nil) end end end