Convert aaa_string_test to RSpec

This commit is contained in:
Ryan Lue 2018-12-06 12:39:16 +01:00
parent 2af6392172
commit ffb64d65d3
7 changed files with 2021 additions and 54441 deletions

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,186 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe HtmlSanitizer do
describe '.replace_inline_images' do
let(:body) { HtmlSanitizer.replace_inline_images(html).first }
let(:inline_attachments) { HtmlSanitizer.replace_inline_images(html).last }
context 'for image at absolute path' do
let(:html) { '<img src="/some_one.png" style="width: 181px; height: 125px" alt="abc">' }
it 'keeps src attr as-is' do
expect(body).to match(%r{<img src="/some_one.png" style="width: 181px; height: 125px" alt="abc">})
end
it 'extracts no attachments' do
expect(inline_attachments).to be_empty
end
end
context 'for base64-encoded inline images' do
context 'with src attr last' do
let(:html) { '<img style="width: 181px; height: 125px" src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/...">' }
it 'converts embedded image to cid' do
expect(body).to match(/<img style="width: 181px; height: 125px" src="cid:.+?">/)
end
it 'extracts one attachment' do
expect(inline_attachments).to be_one
end
it 'sets filename to image1.jpeg' do
expect(inline_attachments.first[:filename]).to eq('image1.jpeg')
end
it 'sets Content-Type to image/jpeg' do
expect(inline_attachments.first[:preferences]['Content-Type']).to eq('image/jpeg')
end
it 'sets Content-ID based on Zammad fqdn' do
expect(inline_attachments.first[:preferences]['Content-ID']).to match(/@#{Setting.get('fqdn')}/)
end
it 'sets Content-Disposition to inline' do
expect(inline_attachments.first[:preferences]['Content-Disposition']).to eq('inline')
end
end
context 'with src attr first' do
let(:html) { '<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/..." style="width: 181px; height: 125px" alt="abc">' }
it 'converts embedded image to cid' do
expect(body).to match(/<img src="cid:.+?" style="width: 181px; height: 125px" alt="abc">/)
end
it 'extracts one attachment' do
expect(inline_attachments).to be_one
end
it 'sets filename to image1.jpeg' do
expect(inline_attachments.first[:filename]).to eq('image1.jpeg')
end
it 'sets Content-Type to image/jpeg' do
expect(inline_attachments.first[:preferences]['Content-Type']).to eq('image/jpeg')
end
it 'sets Content-ID based on Zammad fqdn' do
expect(inline_attachments.first[:preferences]['Content-ID']).to match(/@#{Setting.get('fqdn')}/)
end
it 'sets Content-Disposition to inline' do
expect(inline_attachments.first[:preferences]['Content-Disposition']).to eq('inline')
end
end
context 'followed by an incomplete/invalid HTML tag' do
let(:html) { '<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/..." style="width: 181px; height: 125px" alt="abc"><invalid what ever' }
it 'converts embedded image to cid' do
expect(body).to match(/<img src="cid:.+?" style="width: 181px; height: 125px" alt="abc">/)
end
it 'extracts one attachment' do
expect(inline_attachments).to be_one
end
it 'sets filename to image1.jpeg' do
expect(inline_attachments.first[:filename]).to eq('image1.jpeg')
end
it 'sets Content-Type to image/jpeg' do
expect(inline_attachments.first[:preferences]['Content-Type']).to eq('image/jpeg')
end
it 'sets Content-ID based on Zammad fqdn' do
expect(inline_attachments.first[:preferences]['Content-ID']).to match(/@#{Setting.get('fqdn')}/)
end
it 'sets Content-Disposition to inline' do
expect(inline_attachments.first[:preferences]['Content-Disposition']).to eq('inline')
end
end
context 'nested in a <div>, mixed with other HTML elements' do
let(:html) { '<div><img style="width: 181px; height: 125px" src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/..."><p>123</p><img style="width: 181px; height: 125px" src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/..."></div>' }
it 'converts embedded image to cid' do
expect(body).to match(%r{<div>\s+<img style="width: 181px; height: 125px" src="cid:.+?"><p>123</p>\s+<img style="width: 181px; height: 125px" src="cid:.+?">\s+</div>})
end
it 'extracts two attachments' do
expect(inline_attachments.length).to be(2)
end
it 'sets filenames sequentially (as imageN.jpeg)' do
expect(inline_attachments.first[:filename]).to eq('image1.jpeg')
expect(inline_attachments.second[:filename]).to eq('image2.jpeg')
end
it 'sets Content-Types to image/jpeg' do
expect(inline_attachments.first[:preferences]['Content-Type']).to eq('image/jpeg')
expect(inline_attachments.second[:preferences]['Content-Type']).to eq('image/jpeg')
end
it 'sets Content-IDs based on Zammad fqdn' do
expect(inline_attachments.first[:preferences]['Content-ID']).to match(/@#{Setting.get('fqdn')}/)
expect(inline_attachments.second[:preferences]['Content-ID']).to match(/@#{Setting.get('fqdn')}/)
end
it 'sets Content-Dispositions to inline' do
expect(inline_attachments.first[:preferences]['Content-Disposition']).to eq('inline')
expect(inline_attachments.second[:preferences]['Content-Disposition']).to eq('inline')
end
end
end
end
describe '.dynamic_image_size' do
context 'for image at absolute path' do
context 'with src attr last' do
it 'add max-width: 100% rule to style attr' do
expect(HtmlSanitizer.dynamic_image_size(<<~HTML.chomp)).to match(Regexp.new(<<~REGEX.chomp))
<img style="width: 181px; height: 125px" src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/...">
HTML
<img style="max-width:100%;width: 181px;max-height: 125px;" src="data:image.+?">
REGEX
end
end
context 'with src attr first' do
it 'add max-width: 100% rule to style attr' do
expect(HtmlSanitizer.dynamic_image_size(<<~HTML.chomp)).to match(Regexp.new(<<~REGEX.chomp))
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/..." style="width: 181px; height: 125px" alt="abc">
HTML
<img src="data:image.+?" style="max-width:100%;width: 181px;max-height: 125px;" alt="abc">
REGEX
end
end
end
context 'for base64-encoded inline images' do
context 'with src attr last' do
it 'add max-width: 100% rule to style attr' do
expect(HtmlSanitizer.dynamic_image_size(<<~HTML.chomp)).to match(Regexp.new(<<~REGEX.chomp))
<img src="/some_one.png" style="width: 181px; height: 125px" alt="abc">
HTML
<img src="/some_one.png" style="max-width:100%;width: 181px;max-height: 125px;" alt="abc">
REGEX
end
end
context 'with src attr first' do
it 'add max-width: 100% rule to style attr' do
expect(HtmlSanitizer.dynamic_image_size(<<~HTML.chomp)).to match(Regexp.new(<<~REGEX.chomp))
<img src="/some_one.png" alt="abc">
HTML
<img src="/some_one.png" alt="abc" style="max-width:100%;">
REGEX
end
end
end
end
end

View file

@ -1,20 +0,0 @@
<html>
<title>some title</title>
<body>
<div>hello</div>
<p>some word <a href="http://example.com?domain?example.com">some url</a> and the end.</p>
<p>some word <a href="http://example.com?domain?example.com">some url</a> and the end.</p>
<p>some word <a href="http://example.com?domain?example.com">some url</a> and the end.</p>
<p>some word <a href="http://example.com?domain?example.com">some url</a> and the end.</p>
<p>some word <a href="http://example.com?domain?example.com">some url</a> and the end.</p>
<p>some word <a href="http://example.com?domain?example.com">some url</a> and the end.</p>
<p>some word <a href="http://example.com?domain?example.com">some url</a> and the end.</p>
<p>some word <a href="http://example.com?domain?example.com">some url</a> and the end.</p>
<p>some word <a href="http://example.com?domain?example.com">some url</a> and the end.</p>
<p>some word <a href="http://example.com?domain?example.com">some url</a> and the end.</p>
<p>some word <a href="http://example.com?domain?example.com">some url</a> and the end.</p>
</body>
</html>

View file

@ -1,26 +0,0 @@
some title
hello
some word [1] some url and the end.
some word [2] some url and the end.
some word [3] some url and the end.
some word [4] some url and the end.
some word [5] some url and the end.
some word [6] some url and the end.
some word [7] some url and the end.
some word [8] some url and the end.
some word [9] some url and the end.
some word [10] some url and the end.
some word [11] some url and the end.
[1] http://example.com?domain?example.com
[2] http://example.com?domain?example.com
[3] http://example.com?domain?example.com
[4] http://example.com?domain?example.com
[5] http://example.com?domain?example.com
[6] http://example.com?domain?example.com
[7] http://example.com?domain?example.com
[8] http://example.com?domain?example.com
[9] http://example.com?domain?example.com
[10] http://example.com?domain?example.com
[11] http://example.com?domain?example.com

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff