mirror of
https://github.com/discourse/discourse.git
synced 2024-12-01 20:33:43 +08:00
b772d96f7a
Optionally allow admins to apply regex based normalization to permalinks prior to matching. This allows us to drop query string, or cleanly ignore slugs, etc.
83 lines
2.4 KiB
Ruby
83 lines
2.4 KiB
Ruby
require "spec_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
|