_ = require('underscore') fs = require('fs') path = require 'path' QuotedHTMLTransformer = require('../../src/services/quoted-html-transformer').default describe "QuotedHTMLTransformer", -> readFile = (fname) -> emailPath = path.resolve(__dirname, '..', 'fixtures', 'emails', fname) return fs.readFileSync(emailPath, 'utf8') hideQuotedHTML = (fname) -> return QuotedHTMLTransformer.hideQuotedHTML(readFile(fname)) removeQuotedHTML = (fname, opts={}) -> return QuotedHTMLTransformer.removeQuotedHTML(readFile(fname), opts) numQuotes = (html) -> re = new RegExp(QuotedHTMLTransformer.annotationClass, 'g') html.match(re)?.length ? 0 [1..23].forEach (n) -> it "properly parses email_#{n}", -> opts = keepIfWholeBodyIsQuote: true expect(removeQuotedHTML("email_#{n}.html", opts).trim()).toEqual(readFile("email_#{n}_stripped.html").trim()) describe 'manual quote detection tests', -> clean = (str) -> str.replace(/[\n\r]/g, "").replace(/\s{2,}/g, " ") # The key is the inHTML. The value is the outHTML tests = [] # Test 1 tests.push before: """
More text
ParentSubSub SubSub
The last quote!
More text
ParentSubSub SubSub
Nothing but quotes
Nothing but quotes
Nothing but quotes
Inline quoteWorld """ after: """ Hello
Inline quoteWorld """ # Test 6: No quoted elements at all tests.push before: """ Hello World """ after: """ Hello World """ # Test 7: Common ancestor is a quoted node tests.push before: """
Some content""" after: """More contentOther content
Some contentMore contentOther content
Some text quoteSome text
A quote
Another quote
More quotes!""" after: """
Some contentMore contentOther content
Some text quoteSome text
I'm inlineContent
Remove me
Foo
Bar
Baz""" after: """
I'm inlineContent
Nothing but quotes
Nothing but quotes
A | B |
C | SAVE ME |
E | F |
A | B |
C | SAVE ME |
E | F |
QUOTED TEXT
QUOTED TEXT
# is not completely stripped. tests.push before: """On Wed, Dec 14, 2016 at 02:05:44PM +0100, Bálint Réczey wrote: > I have uploaded a dpkg NMU with bindnow enabled to DELAYED/10 > according to current NMU rules. If the Release Team increases the > severity of #835146 it can reach unstable earlier. Thanks! -- WBR, wRAR""" after: """On Wed, Dec 14, 2016 at 02:05:44PM +0100, Bálint Réczey wrote: > I have uploaded a dpkg NMU with bindnow enabled to DELAYED/10 > according to current NMU rules. If the Release Team increases the > severity of #835146 it can reach unstable earlier. Thanks! -- WBR, wRAR""" it 'works with these manual test cases', -> for {before, after, options} in tests if not options options = {keepIfWholeBodyIsQuote: true} test = clean(QuotedHTMLTransformer.removeQuotedHTML(before, options)) expect(test).toEqual clean(after) it 'removes all trailing
tags except one', -> input0 = "hello worldfoolololol" expect0 = "hello world
" expect(QuotedHTMLTransformer.removeQuotedHTML(input0)).toEqual expect0 it 'preserves
tags in the middle and only chops off tail', -> input0 = "hello
worldfoolololol" expect0 = "hello
world
" expect(QuotedHTMLTransformer.removeQuotedHTML(input0)).toEqual expect0 it 'works as expected when body tag inside the html', -> input0 = """On Dec 16 2015, at 7:08 pm, Juan Tejada <juan@nylas.com> wrote:""" expect0 = "
h2
he he hehehehehehe
dufjcasc
" expect(QuotedHTMLTransformer.removeQuotedHTML(input0, {keepIfWholeBodyIsQuote: false})).toEqual expect0 # We have a little utility method that you can manually uncomment to # generate what the current iteration of the QuotedHTMLTransformer things the # `removeQuotedHTML` should look like. These can be manually inspected in # a browser before getting their filename changed to # `email_#{n}_stripped.html". The actually tests will run the current # iteration of the `removeQuotedHTML` against these files to catch if # anything has changed in the parser. # # It's inside of the specs here instaed of its own script because the # `QuotedHTMLTransformer` needs Electron booted up in order to work because # of the DOMParser. xit "Run this simple function to generate output files", -> [18, 20].forEach (n) -> newHTML = QuotedHTMLTransformer.removeQuotedHTML(readFile("email_#{n}.html")) outPath = path.resolve(__dirname, '..', 'fixtures', 'emails', "email_#{n}_raw_stripped.html") fs.writeFileSync(outPath, newHTML)