discourse/spec/components/slug_spec.rb

147 lines
4.5 KiB
Ruby
Raw Normal View History

2013-02-06 03:16:51 +08:00
# encoding: utf-8
2016-04-01 05:33:25 +08:00
require 'rails_helper'
2013-02-06 03:16:51 +08:00
require 'slug'
describe Slug do
2015-04-13 22:50:41 +08:00
describe '#for' do
context 'ascii generator' do
before { SiteSetting.slug_generation_method = 'ascii' }
it 'generates the slug' do
expect(Slug.for("hello world")).to eq('hello-world')
2015-04-13 22:50:41 +08:00
end
it 'generates default slug when nothing' do
expect(Slug.for('')).to eq('topic')
2015-04-13 22:50:41 +08:00
end
it "doesn't generate slugs that are just numbers" do
expect(Slug.for('123')).to eq('topic')
2015-04-13 22:50:41 +08:00
end
end
context 'encoded generator' do
before { SiteSetting.slug_generation_method = 'encoded' }
after { SiteSetting.slug_generation_method = 'ascii' }
it 'generates the slug' do
expect(Slug.for("熱帶風暴畫眉")).to eq('熱帶風暴畫眉')
2015-04-13 22:50:41 +08:00
end
it 'generates default slug when nothing' do
expect(Slug.for('')).to eq('topic')
2015-04-13 22:50:41 +08:00
end
it "doesn't generate slugs that are just numbers" do
expect(Slug.for('123')).to eq('topic')
2015-04-13 22:50:41 +08:00
end
end
context 'none generator' do
before { SiteSetting.slug_generation_method = 'none' }
after { SiteSetting.slug_generation_method = 'ascii' }
it 'generates the slug' do
expect(Slug.for("hello world", 'category')).to eq('category')
expect(Slug.for("hello world")).to eq('topic')
expect(Slug.for('')).to eq('topic')
expect(Slug.for('123')).to eq('topic')
2015-04-13 22:50:41 +08:00
end
end
2013-02-06 03:16:51 +08:00
end
2015-04-13 22:50:41 +08:00
describe '#ascii_generator' do
before { SiteSetting.slug_generation_method = 'ascii' }
2013-02-06 03:16:51 +08:00
2015-04-13 22:50:41 +08:00
it 'replaces spaces with hyphens' do
expect(Slug.ascii_generator("hello world")).to eq('hello-world')
end
2013-02-06 03:16:51 +08:00
2015-04-13 22:50:41 +08:00
it 'changes accented characters' do
expect(Slug.ascii_generator('àllo')).to eq('allo')
end
2013-02-06 03:16:51 +08:00
2015-04-13 22:50:41 +08:00
it 'replaces symbols' do
expect(Slug.ascii_generator('evil#trout')).to eq('evil-trout')
end
2013-02-06 03:16:51 +08:00
2015-04-13 22:50:41 +08:00
it 'handles a.b.c properly' do
expect(Slug.ascii_generator("a.b.c")).to eq("a-b-c")
end
2015-04-13 22:50:41 +08:00
it 'handles double dots right' do
expect(Slug.ascii_generator("a....b.....c")).to eq("a-b-c")
end
2013-02-06 03:16:51 +08:00
2015-04-13 22:50:41 +08:00
it 'strips trailing punctuation' do
expect(Slug.ascii_generator("hello...")).to eq("hello")
end
2013-02-12 10:34:38 +08:00
2015-04-13 22:50:41 +08:00
it 'strips leading punctuation' do
expect(Slug.ascii_generator("...hello")).to eq("hello")
end
2013-02-15 06:46:11 +08:00
2015-04-13 22:50:41 +08:00
it 'handles our initial transliteration' do
from = "àáäâčďèéëěêìíïîľĺňòóöôŕřšťůùúüûýžñç"
to = "aaaacdeeeeeiiiillnoooorrstuuuuuyznc"
expect(Slug.ascii_generator(from)).to eq(to)
end
2015-04-13 22:50:41 +08:00
it 'replaces underscores' do
expect(Slug.ascii_generator("o_o_o")).to eq("o-o-o")
end
it "doesn't keep single quotes within word" do
expect(Slug.ascii_generator("Jeff hate's this")).to eq("jeff-hates-this")
end
it 'generates null when nothing' do
expect(Slug.ascii_generator('')).to eq('')
end
2015-04-13 22:50:41 +08:00
it "keeps number unchanged" do
expect(Slug.ascii_generator('123')).to eq('123')
end
2013-06-03 07:08:34 +08:00
end
2015-04-13 22:50:41 +08:00
describe '#encoded_generator' do
before { SiteSetting.slug_generation_method = 'encoded' }
after { SiteSetting.slug_generation_method = 'ascii' }
it 'generates precentage encoded string' do
expect(Slug.encoded_generator("Jeff hate's !~-_|,=#this")).to eq("Jeff-hates-this")
expect(Slug.encoded_generator("뉴스피드")).to eq("뉴스피드")
expect(Slug.encoded_generator("آموزش اضافه کردن لینک اختیاری به هدر")).to eq("آموزش-اضافه-کردن-لینک-اختیاری-به-هدر")
expect(Slug.encoded_generator("熱帶風暴畫眉")).to eq("熱帶風暴畫眉")
2015-04-13 22:50:41 +08:00
end
it 'reject RFC 3986 reserved character and blank' do
expect(Slug.encoded_generator(":/?#[]@!$ &'()*+,;=% -_`~.")).to eq("")
expect(Slug.encoded_generator(" - English and Chinese title with special characters / 中文标题 !@:?\\:'`#^& $%&*()` -- ")).to eq("English-and-Chinese-title-with-special-characters-中文标题")
2015-04-13 22:50:41 +08:00
end
it 'generates null when nothing' do
expect(Slug.encoded_generator('')).to eq('')
end
it "keeps number unchanged" do
expect(Slug.encoded_generator('123')).to eq('123')
end
end
2015-04-13 22:50:41 +08:00
describe '#none_generator' do
before { SiteSetting.slug_generation_method = 'none' }
after { SiteSetting.slug_generation_method = 'ascii' }
it 'generates nothing' do
expect(Slug.none_generator("Jeff hate's this")).to eq('')
expect(Slug.none_generator(nil)).to eq('')
expect(Slug.none_generator('')).to eq('')
expect(Slug.none_generator('31')).to eq('')
end
end
2013-02-06 03:16:51 +08:00
end