mirror of
https://github.com/discourse/discourse.git
synced 2024-11-30 19:45:23 +08:00
59097b207f
Over the years we accrued many spelling mistakes in the code base. This PR attempts to fix spelling mistakes and typos in all areas of the code that are extremely safe to change - comments - test descriptions - other low risk areas
193 lines
6.0 KiB
Ruby
193 lines
6.0 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
require 'email_cook'
|
|
require 'pretty_text'
|
|
|
|
describe EmailCook do
|
|
it "uses to PrettyText when there is no [plaintext] in raw" do
|
|
raw = "**Hello world!**"
|
|
expect(cook(raw)).to eq(PrettyText.cook(raw))
|
|
end
|
|
|
|
it "adds linebreaks to short lines" do
|
|
raw = plaintext("hello\nworld\n")
|
|
expect(cook(raw)).to eq("hello\n<br>world\n<br>")
|
|
end
|
|
|
|
it "doesn't add linebreaks to long lines" do
|
|
long = plaintext(<<~LONG_EMAIL)
|
|
Hello,
|
|
|
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc convallis volutpat
|
|
risus. Nulla ac faucibus quam, quis cursus lorem. Sed rutrum eget nunc sed accumsan.
|
|
Vestibulum feugiat mi vitae turpis tempor dignissim.
|
|
LONG_EMAIL
|
|
|
|
long_cooked = (+<<~LONG_COOKED).strip!
|
|
Hello,
|
|
<br>
|
|
<br>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc convallis volutpat
|
|
risus. Nulla ac faucibus quam, quis cursus lorem. Sed rutrum eget nunc sed accumsan.
|
|
Vestibulum feugiat mi vitae turpis tempor dignissim.
|
|
<br>
|
|
LONG_COOKED
|
|
|
|
expect(cook(long)).to eq(long_cooked)
|
|
end
|
|
|
|
it "replaces a blank line with 2 linebreaks" do
|
|
long = plaintext(<<~LONG_EMAIL)
|
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc convallis volutpat
|
|
risus.
|
|
Nulla ac faucibus quam, quis cursus lorem. Sed rutrum eget nunc sed accumsan.
|
|
|
|
Vestibulum feugiat mi vitae turpis tempor dignissim.
|
|
|
|
Stet clita kasd gubergren.
|
|
LONG_EMAIL
|
|
|
|
long_cooked = (+<<~LONG_COOKED).strip!
|
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc convallis volutpat
|
|
risus.
|
|
<br>Nulla ac faucibus quam, quis cursus lorem. Sed rutrum eget nunc sed accumsan.
|
|
<br>
|
|
<br>Vestibulum feugiat mi vitae turpis tempor dignissim.
|
|
<br>
|
|
<br>Stet clita kasd gubergren.
|
|
<br>
|
|
LONG_COOKED
|
|
|
|
expect(cook(long)).to eq(long_cooked)
|
|
end
|
|
|
|
it "escapes HTML" do
|
|
long = plaintext(<<~LONG_EMAIL)
|
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
|
|
<form name="f1" method="post" action="test.html" onsubmit="javascript:showAlert()">
|
|
<input type="submit" name="submit" value="Click this button" />
|
|
</form>
|
|
|
|
Nunc convallis volutpat risus.
|
|
LONG_EMAIL
|
|
|
|
long_cooked = (+<<~LONG_COOKED).strip!
|
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
<br>
|
|
<br><form name="f1" method="post" action="test.html" onsubmit="javascript:showAlert()">
|
|
<input type="submit" name="submit" value="Click this button" />
|
|
</form>
|
|
<br>
|
|
<br>Nunc convallis volutpat risus.
|
|
<br>
|
|
LONG_COOKED
|
|
|
|
expect(cook(long)).to eq(long_cooked)
|
|
end
|
|
|
|
it "replaces indentation of more than 2 spaces with corresponding amount of non-breaking spaces" do
|
|
nbsp = "\u00A0"
|
|
long = plaintext(<<~LONG_EMAIL)
|
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
|
|
this is intended by 4 spaces
|
|
this is intended by 1 space
|
|
no indentation, but lots of spaces
|
|
LONG_EMAIL
|
|
|
|
long_cooked = (+<<~LONG_COOKED).strip!
|
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
<br>
|
|
<br>#{nbsp}#{nbsp}#{nbsp}#{nbsp}this is intended by 4 spaces
|
|
<br> this is intended by 1 space
|
|
<br>no indentation, but lots of spaces
|
|
<br>
|
|
LONG_COOKED
|
|
|
|
expect(cook(long)).to eq(long_cooked)
|
|
end
|
|
|
|
it "creates oneboxed link when the line contains only a link" do
|
|
raw = plaintext("https://www.eviltrout.com")
|
|
expect(cook(raw)).to eq('<a href="https://www.eviltrout.com" class="onebox" target="_blank">https://www.eviltrout.com</a><br>')
|
|
end
|
|
|
|
it "autolinks without the beginning of a line" do
|
|
raw = plaintext("my site: https://www.eviltrout.com")
|
|
expect(cook(raw)).to eq('my site: <a href="https://www.eviltrout.com">https://www.eviltrout.com</a><br>')
|
|
end
|
|
|
|
it "autolinks without the end of a line" do
|
|
raw = plaintext("https://www.eviltrout.com is my site")
|
|
expect(cook(raw)).to eq('<a href="https://www.eviltrout.com">https://www.eviltrout.com</a> is my site<br>')
|
|
end
|
|
|
|
it "links even within a quote" do
|
|
raw = plaintext("> https://www.eviltrout.com is my site")
|
|
expect(cook(raw)).to eq('<blockquote><a href="https://www.eviltrout.com">https://www.eviltrout.com</a> is my site<br></blockquote>')
|
|
end
|
|
|
|
it "it works and does not interpret Markdown in plaintext and elided" do
|
|
long = <<~LONG_EMAIL
|
|
[plaintext]
|
|
*Lorem ipsum* dolor sit amet, consectetur adipiscing elit.
|
|
[/plaintext]
|
|
[attachments]
|
|
<img src='some_image.png' width='100' height='100'>
|
|
[/attachments]
|
|
[elided]
|
|
At vero eos *et accusam* et justo duo dolores et ea rebum.
|
|
[/elided]
|
|
LONG_EMAIL
|
|
|
|
long_cooked = <<~LONG_COOKED
|
|
*Lorem ipsum* dolor sit amet, consectetur adipiscing elit.<br>
|
|
<br><img src='some_image.png' width='100' height='100'>
|
|
<br><br>
|
|
|
|
<details class='elided'>
|
|
<summary title='Show trimmed content'>···</summary>
|
|
|
|
At vero eos *et accusam* et justo duo dolores et ea rebum.<br>
|
|
|
|
</details>
|
|
LONG_COOKED
|
|
|
|
expect(cook(long)).to eq(long_cooked)
|
|
end
|
|
|
|
it "works without attachments" do
|
|
long = <<~LONG_EMAIL
|
|
[plaintext]
|
|
*Lorem ipsum* dolor sit amet, consectetur adipiscing elit.
|
|
[/plaintext]
|
|
[elided]
|
|
At vero eos *et accusam* et justo duo dolores et ea rebum.
|
|
[/elided]
|
|
LONG_EMAIL
|
|
|
|
long_cooked = <<~LONG_COOKED
|
|
*Lorem ipsum* dolor sit amet, consectetur adipiscing elit.<br>
|
|
<br><br>
|
|
|
|
<details class='elided'>
|
|
<summary title='Show trimmed content'>···</summary>
|
|
|
|
At vero eos *et accusam* et justo duo dolores et ea rebum.<br>
|
|
|
|
</details>
|
|
LONG_COOKED
|
|
|
|
expect(cook(long)).to eq(long_cooked)
|
|
end
|
|
|
|
def cook(raw)
|
|
EmailCook.new(raw).cook
|
|
end
|
|
|
|
def plaintext(text)
|
|
"[plaintext]\n#{text}\n[/plaintext]"
|
|
end
|
|
end
|