require 'spec_helper' require 'pretty_text' describe PrettyText do describe "Cooking" do it "should support github style code blocks" do PrettyText.cook("``` test ```").should match_html "
test \n
"
end
it "should support quoting [] " do
PrettyText.cook("[quote=\"EvilTrout, post:123, topic:456, full:true\"][sam][/quote]").should =~ /\[sam\]/
end
it "produces a quote even with new lines in it" do
PrettyText.cook("[quote=\"EvilTrout, post:123, topic:456, full:true\"]ddd\n[/quote]").should match_html ""
end
it "should produce a quote" do
PrettyText.cook("[quote=\"EvilTrout, post:123, topic:456, full:true\"]ddd[/quote]").should match_html ""
end
it "trims spaces on quote params" do
PrettyText.cook("[quote=\"EvilTrout, post:555, topic: 666\"]ddd[/quote]").should match_html ""
end
it "should handle 3 mentions in a row" do
PrettyText.cook('@hello @hello @hello').should match_html "@hello @hello @hello
" end it "should not do weird @ mention stuff inside a pre block" do PrettyText.cook("``` a @test ```").should match_html "a @test \n
"
end
it "should sanitize the html" do
PrettyText.cook("").should match_html "alert(42)"
end
it "should escape html within the code block" do
PrettyText.cook("```text
<header>hello</header> \n
"
end
it "should support language choices" do
PrettyText.cook("```ruby
test
```").should match_html "test \n
"
end
it 'should decorate @mentions' do
PrettyText.cook("Hello @eviltrout").should match_html "Hello @eviltrout
" end it 'should allow for @mentions to have punctuation' do PrettyText.cook("hello @bob's @bob,@bob; @bob\"").should match_html "hello @bob's @bob,@bob; @bob\"
" end it 'should add spoiler tags' do PrettyText.cook("[spoiler]hello[/spoiler]").should match_html "hello
" end it "should only detect ``` at the begining of lines" do PrettyText.cook(" ```\n hello\n ```") .should match_html "```\nhello\n```\n
"
end
end
describe "rel nofollow" do
before do
SiteSetting.stubs(:add_rel_nofollow_to_user_content).returns(true)
SiteSetting.stubs(:exclude_rel_nofollow_domains).returns("foo.com,bar.com")
end
it "should inject nofollow in all user provided links" do
PrettyText.cook('cnn').should =~ /nofollow/
end
it "should not inject nofollow in all local links" do
(PrettyText.cook("cnn") !~ /nofollow/).should be_true
end
it "should not inject nofollow in all subdomain links" do
(PrettyText.cook("cnn") !~ /nofollow/).should be_true
end
it "should not inject nofollow for foo.com" do
(PrettyText.cook("cnn") !~ /nofollow/).should be_true
end
it "should not inject nofollow for bar.foo.com" do
(PrettyText.cook("cnn") !~ /nofollow/).should be_true
end
end
describe "Excerpt" do
context "images" do
it "should dump images" do
PrettyText.excerpt("",100).should == "[image]"
end
it "should keep alt tags" do
PrettyText.excerpt("",100).should == "[car]"
end
it "should keep title tags" do
PrettyText.excerpt("",100).should == "[car]"
end
it "should convert images to markdown if the option is set" do
PrettyText.excerpt("", 100, markdown_images: true).should == "![car](http://cnn.com/a.gif)"
end
end
it "should have an option to strip links" do
PrettyText.excerpt("cnn",100, strip_links: true).should == "cnn"
end
it "should preserve links" do
PrettyText.excerpt("cnn",100).should == "cnn"
end
it "should deal with special keys properly" do
PrettyText.excerpt("",100).should == "" end it "should truncate stuff properly" do PrettyText.excerpt("hello world",5).should == "hello…" PrettyText.excerpt("
hello
world
",6).should == "hello w…" end it "should insert a space between to Ps" do PrettyText.excerpt("a
b
",5).should == "a b" end it "should strip quotes" do PrettyText.excerpt("boom",5).should == "boom" end it "should not count the surrounds of a link" do PrettyText.excerpt("cnn",3).should == "cnn" end it "uses an ellipsis instead of html entities if provided with the option" do PrettyText.excerpt("cnn", 2, text_entities: true).should == "cn..." end it "should truncate links" do PrettyText.excerpt("cnn",2).should == "cn…" end it "should be able to extract links" do PrettyText.extract_links("http://bla.com").to_a.should == ["http://cnn.com"] end it "should extract links to topics" do PrettyText.extract_links("").to_a.should == ["/t/topic/321"] end it "should extract links to posts" do PrettyText.extract_links("").to_a.should == ["/t/topic/1234/4567"] end it "should not extract links inside quotes" do PrettyText.extract_links(" http://useless1.com http://useless2.com ").to_a.should == ["http://body_only.com", "http://body_and_quote.com", "/t/topic/1234"] end it "should not preserve tags in code blocks" do PrettyText.excerpt("<h3>Hours</h3>
",100).should == "<h3>Hours</h3>"
end
it "should handle nil" do
PrettyText.excerpt(nil,100).should == ''
end
end
describe "strip links" do
it "returns blank for blank input" do
expect(PrettyText.strip_links("")).to be_blank
end
it "does nothing to a string without links" do
expect(PrettyText.strip_links("I'm the batman")).to eq("I'm the batman")
end
it "strips links but leaves the text content" do
expect(PrettyText.strip_links("I'm the linked batman")).to eq("I'm the linked batman")
end
end
describe "apply cdn" do
it "should detect bare links to images and apply a CDN" do
PrettyText.apply_cdn("hello","http://a.com").should ==
"hello"
end
it "should not touch non images" do
PrettyText.apply_cdn("hello","http://a.com").should ==
"hello"
end
end
end