discourse/spec/helpers/user_notifications_helper_s...

171 lines
5.3 KiB
Ruby

# frozen_string_literal: true
require 'rails_helper'
describe UserNotificationsHelper do
let(:upload_path) { Discourse.store.upload_path }
describe '#email_excerpt' do
let(:paragraphs) { [
"<p>This is the first paragraph, but you should read more.</p>",
"<p>And here is its friend, the second paragraph.</p>"
] }
let(:cooked) do
paragraphs.join("\n")
end
let(:post_quote) do
<<~HTML
<aside class="quote no-group" data-post="859" data-topic="30">
<div class="title">
<div class="quote-controls"></div>
<img alt width="20" height="20" src="https://example.com/m.png" class="avatar"> modman:</div>
<blockquote>
<p>This is a post quote</p>
</blockquote>
</aside>
HTML
end
it "can return the first paragraph" do
SiteSetting.digest_min_excerpt_length = 50
expect(helper.email_excerpt(cooked)).to eq(paragraphs[0])
end
it "can return another paragraph to satisfy digest_min_excerpt_length" do
SiteSetting.digest_min_excerpt_length = 100
expect(helper.email_excerpt(cooked)).to eq(paragraphs.join)
end
it "doesn't count emoji images" do
with_emoji = "<p>Hi <img src=\"/images/emoji/twitter/smile.png?v=#{Emoji::EMOJI_VERSION}\" title=\":smile:\" class=\"emoji\" alt=\":smile:\"></p>"
arg = ([with_emoji] + paragraphs).join("\n")
SiteSetting.digest_min_excerpt_length = 50
expect(helper.email_excerpt(arg)).to eq([with_emoji, paragraphs[0]].join)
end
it "only counts link text" do
with_link = "<p>Hi <a href=\"https://really-long.essays.com/essay/number/9000/this-one-is-about-friends-and-got-a-C-minus-in-grade-9\">friends</a>!</p>"
arg = ([with_link] + paragraphs).join("\n")
SiteSetting.digest_min_excerpt_length = 50
expect(helper.email_excerpt(arg)).to eq([with_link, paragraphs[0]].join)
end
it "uses user quotes but not post quotes" do
cooked = <<~HTML
<p>BEFORE</p>
<blockquote>
<p>This is a user quote</p>
</blockquote>
<aside class="quote" data-post="3" data-topic="87369">
<div class="title">A Title</div>
<blockquote>
<p>This is a post quote</p>
</blockquote>
</aside>
<p>AFTER</p>
HTML
expect(helper.email_excerpt(cooked)).to eq "<p>BEFORE</p><blockquote>\n <p>This is a user quote</p>\n</blockquote><p>AFTER</p>"
end
it "defaults to content after post quote (image w/ no text)" do
image_paragraph = '<p><img src="//localhost:3000/uploads/b9.png" width="300" height="300"></p>'
cooked = <<~HTML
#{post_quote}
#{image_paragraph}
HTML
expect(helper.email_excerpt(cooked)).to eq(image_paragraph)
end
it "defaults to content after post quote (onebox)" do
aside_onebox = '<aside class="onebox wikipedia"><article class="onebox-body"><p>Onebox excerpt here</p></article><div class="onebox-metadata"></div></aside>'
cooked = <<~HTML
#{post_quote}
#{aside_onebox}
HTML
expect(helper.email_excerpt(cooked)).to eq(aside_onebox)
end
end
describe '#logo_url' do
describe 'local store' do
let(:upload) { Fabricate(:upload, sha1: "somesha1") }
before do
SiteSetting.logo = upload
end
it 'should return the right URL' do
expect(helper.logo_url).to eq(
"http://test.localhost/#{upload_path}/original/1X/somesha1.png"
)
end
describe 'when cdn path is configured' do
before do
GlobalSetting.expects(:cdn_url)
.returns('https://some.localcdn.com')
.at_least_once
end
it 'should return the right URL' do
expect(helper.logo_url).to eq(
"https://some.localcdn.com/#{upload_path}/original/1X/somesha1.png"
)
end
end
describe 'when logo is an SVG' do
let(:upload) { Fabricate(:upload, extension: "svg") }
it 'should return nil' do
expect(helper.logo_url).to eq(nil)
end
end
end
describe 's3 store' do
let(:upload) { Fabricate(:upload_s3, sha1: "somesha1") }
before do
SiteSetting.enable_s3_uploads = true
SiteSetting.s3_upload_bucket = "s3-upload-bucket"
SiteSetting.s3_access_key_id = "some key"
SiteSetting.s3_secret_access_key = "some secret key"
SiteSetting.logo = upload
end
it 'should return the right URL' do
expect(helper.logo_url).to eq(
"http://s3-upload-bucket.s3.dualstack.us-east-1.amazonaws.com/original/1X/somesha1.png"
)
end
describe 'when global cdn path is configured' do
it 'should return the right url' do
GlobalSetting.stubs(:cdn_url).returns('https://some.cdn.com/cluster')
expect(helper.logo_url).to eq(
"http://s3-upload-bucket.s3.dualstack.us-east-1.amazonaws.com/original/1X/somesha1.png"
)
end
end
describe 'when cdn path is configured' do
before do
SiteSetting.s3_cdn_url = 'https://some.cdn.com'
end
it 'should return the right url' do
expect(helper.logo_url).to eq(
"https://some.cdn.com/original/1X/somesha1.png"
)
end
end
end
end
end