const should = require('should'); const {parseReplacements, renderEmailForSegment} = require('../../../../core/server/services/mega/post-email-serializer'); describe('Post Email Serializer', function () { it('creates replacement pattern for valid format and value', function () { const html = 'Hey %%{first_name}%%, what is up?'; const plaintext = 'Hey %%{first_name}%%, what is up?'; const replaced = parseReplacements({ html, plaintext }); replaced.length.should.equal(2); replaced[0].format.should.equal('html'); replaced[0].recipientProperty.should.equal('member_first_name'); replaced[1].format.should.equal('plaintext'); replaced[1].recipientProperty.should.equal('member_first_name'); }); it('does not create replacements for unsupported variable names', function () { const html = 'Hey %%{last_name}%%, what is up?'; const plaintext = 'Hey %%{age}%%, what is up?'; const replaced = parseReplacements({ html, plaintext }); replaced.length.should.equal(0); }); describe('renderEmailForSegment', function () { it('shouldn\'t change an email that has no member segment', function () { const email = { otherProperty: true, html: '
test
', plaintext: 'test' }; let output = renderEmailForSegment(email, 'status:free'); output.should.have.keys('html', 'plaintext', 'otherProperty'); output.html.should.eql('
test
'); output.plaintext.should.eql('test'); output.otherProperty.should.eql(true); // Make sure to keep other properties }); it('should hide non matching member segments', function () { const email = { otherProperty: true, html: 'hello
free users!
paid users!
', plaintext: 'test' }; Object.freeze(email); // Make sure we don't modify `email` let output = renderEmailForSegment(email, 'status:free'); output.should.have.keys('html', 'plaintext', 'otherProperty'); output.html.should.eql('hello
free users!
'); output.plaintext.should.eql('hello free users!'); output = renderEmailForSegment(email, 'status:-free'); output.should.have.keys('html', 'plaintext', 'otherProperty'); output.html.should.eql('hello
paid users!
'); output.plaintext.should.eql('hello paid users!'); }); it('should hide all segments when the segment filter is empty', function () { const email = { otherProperty: true, html: 'hello
free users!
paid users!
', plaintext: 'test' }; let output = renderEmailForSegment(email, null); output.html.should.equal('hello'); output.plaintext.should.equal('hello'); }); }); });