Package com.alibaba.citrus.service.mail

Source Code of com.alibaba.citrus.service.mail.HTMLTemplateContentTests

/*
* Copyright 2010 Alibaba Group Holding Limited.
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*    http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.alibaba.citrus.service.mail;

import static com.alibaba.citrus.test.TestUtil.*;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;

import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.junit.Test;

import com.alibaba.citrus.service.mail.builder.MailBuilderException;
import com.alibaba.citrus.service.mail.builder.content.HTMLTemplateContent;
import com.alibaba.citrus.util.StringUtil;

/**
* ���Ի���ģ���html content��
*
* @author Michael Zhou
*/
public class HTMLTemplateContentTests extends AbstractTemplateContentTests<HTMLTemplateContent> {
    @Test
    public void getContentType() {
        assertEquals("text/html", content.getContentType());

        content.setContentType("  text/xhtml ");
        assertEquals("text/xhtml", content.getContentType());
    }

    @Test
    public void addInlineResource() throws Exception {
        initContent(new HTMLTemplateContent("mail/mytemplate.vm"), true, true);

        // id is null
        try {
            content.addInlineResource(null, null);
            fail();
        } catch (IllegalArgumentException e) {
            assertThat(e, exception("The ID of inline resource was not specified"));
        }

        try {
            content.addInlineResource("  ", null);
            fail();
        } catch (IllegalArgumentException e) {
            assertThat(e, exception("The ID of inline resource was not specified"));
        }

        // prefix is null
        try {
            content.addInlineResource("id", null);
            fail();
        } catch (IllegalArgumentException e) {
            assertThat(e, exception("The prefix of inline resource was not specified"));
        }

        try {
            content.addInlineResource("id", "  ");
            fail();
        } catch (IllegalArgumentException e) {
            assertThat(e, exception("The prefix of inline resource was not specified"));
        }

        // dup ids
        content.addInlineResource(" id ", "  prefix/ ");

        try {
            content.addInlineResource("id", "prefix2");
            fail();
        } catch (IllegalArgumentException e) {
            assertThat(e, exception("Duplicated ID \"id\" of inline resource"));
        }

        // normal case
        content.addInlineResource("id2", "prefix2");

        @SuppressWarnings("unchecked")
        Map<String, String> inlineResourceMap = (Map<String, String>) getFieldValue(content, "inlineResourceMap",
                Map.class);

        assertEquals(2, inlineResourceMap.size());
        assertEquals("prefix/", inlineResourceMap.get("id"));
        assertEquals("prefix2", inlineResourceMap.get("id2"));
    }

    @Test
    public void toString_() {
        // empty content
        String result = "";

        result += "HTMLTemplateContent {\n";
        result += "  contentType     = text/html\n";
        result += "  templateName    = <null>\n";
        result += "  inlineResources = {}\n";
        result += "}";

        assertEquals(result, content.toString());

        // with template, contentType, and inlineResources
        result = "";

        result += "HTMLTemplateContent {\n";
        result += "  contentType     = text/xhtml\n";
        result += "  templateName    = mytemplate.vm\n";
        result += "  inlineResources = {\n";
        result += "                      [1/1] img = images/\n";
        result += "                    }\n";
        result += "}";

        content.setContentType("text/xhtml");
        content.setTemplate("mytemplate.vm");
        content.addInlineResource("img", "images/");

        assertEquals(result, content.toString());
    }

    @Test
    public void simpleHtml_vm() throws Exception {
        initContent(new HTMLTemplateContent("mail/mytemplate.vm"), true, false);
        assert_TextHtml_mytemplate_noPullTools("velocity");
    }

    @Test
    public void simpleHtml_ftl() throws Exception {
        initContent(new HTMLTemplateContent("mail/mytemplate.ftl"), true, false);
        assert_TextHtml_mytemplate_noPullTools("freemarker");
    }

    @Test
    public void simpleHtml_vm_contentType() throws Exception {
        initContent(new HTMLTemplateContent("mail/mytemplate.vm", "text/plain"), true, false);
        assert_TextPlain_mytemplate_noPullTools("velocity");
    }

    @Test
    public void simpleHtml_ftl_contentType() throws Exception {
        initContent(new HTMLTemplateContent("mail/mytemplate.ftl", "text/plain"), true, false);
        assert_TextPlain_mytemplate_noPullTools("freemarker");
    }

    @Test
    public void simpleHtml_vm_pull() throws Exception {
        initContent(new HTMLTemplateContent("mail/mytemplate.vm"), true, true);
        builder.setAttribute("hello", "world");
        assert_TextHtml_mytemplate_pullTools_and_vars("velocity");
    }

    @Test
    public void simpleHtml_ftl_pull() throws Exception {
        initContent(new HTMLTemplateContent("mail/mytemplate.ftl"), true, true);
        builder.setAttribute("hello", "world");
        assert_TextHtml_mytemplate_pullTools_and_vars("freemarker");
    }

    @Test
    public void complexHtml_noResourceLoader() throws Exception {
        initContent(new HTMLTemplateContent("mail/complexhtml.vm"), true, true);
        content.addInlineResource("image", "/");

        try {
            getMessageAsText();
            fail();
        } catch (IllegalArgumentException e) {
            assertThat(e, exception("no resourceLoader"));
        }
    }

    @Test
    public void complexHtml_vm() throws Exception {
        initContent(new HTMLTemplateContent("mail/complexhtml.vm"), true, true);
        content.setResourceLoader(factory);
        content.addInlineResource("image", "/");

        assert_TextHtml_complex("velocity");
    }

    @Test
    public void complexHtml_ftl() throws Exception {
        initContent(new HTMLTemplateContent("mail/complexhtml.ftl"), true, true);
        content.setResourceLoader(factory);
        content.addInlineResource("image", "/");

        assert_TextHtml_complex("freemarker");
    }

    @Test
    public void complexHtml_imageNotFound() throws Exception {
        initContent(new HTMLTemplateContent("mail/imageNotFound.vm"), true, true);
        content.setResourceLoader(factory);
        content.addInlineResource("image", "/");

        try {
            getMessageAsText();
            fail();
        } catch (MailBuilderException e) {
            assertThat(e, exception("Could not find resource \"/notExist.gif\""));
        }
    }

    @Test
    public void complexHtml_streamOnlyResource() throws Exception {
        initContent(new HTMLTemplateContent("mail/streamOnlyResource.vm"), true, true);
        content.setResourceLoader(factory);
        content.addInlineResource("image", "/asStream");

        assert_TextHtml_streamOnlyResource();
    }

    @Test
    public void complexHtml_dup_fileNames() throws Exception {
        initContent(new HTMLTemplateContent("mail/dup_fileNames.vm"), true, true);
        content.setResourceLoader(factory);
        content.addInlineResource("image1", "/");
        content.addInlineResource("image2", "/mailres");

        String eml = getMessageAsText();

        assertThat(eml, containsRegex("Content-Type: multipart/related;"));
        assertThat(eml, containsRegex("Content-Type: text/html; charset=UTF-8" + REGEX_EOL));
        assertThat(eml, containsRegex("Content-Transfer-Encoding: 8bit" + REGEX_EOL));
        assertThat(eml, containsRegex("cid:"));
        assertThat(eml, containsRegex("Content-Disposition: inline; filename=java.gif" + REGEX_EOL));
        assertThat(eml, containsRegex("Content-Disposition: inline; filename=java1.gif" + REGEX_EOL)); // dup names
        assertThat(eml, containsRegex("Content-Disposition: inline; filename=emptyfile" + REGEX_EOL));
        assertThat(eml, containsRegex("Content-Disposition: inline; filename=emptyfile1" + REGEX_EOL)); // dup names, no ext
    }

    private void assert_TextHtml_mytemplate_noPullTools(String extra) throws Exception {
        String eml = getMessageAsText();

        assertThat(eml, containsRegex("Content-Type: text/html; charset=UTF-8" + REGEX_EOL));
        assertThat(eml, containsRegex("Content-Transfer-Encoding: 8bit" + REGEX_EOL));
        assertThat(eml, containsRegex("1  2  3  4  5  6  7  8  9  10"));
        assertThat(eml, containsRegex("\\$myconst" + REGEX_EOL));
        assertThat(eml, containsRegex("\\$stringUtil" + REGEX_EOL));
        assertThat(eml, containsRegex("\\$hello" + REGEX_EOL));
        assertThat(eml, containsRegex(extra + REGEX_EOL));
    }

    private void assert_TextPlain_mytemplate_noPullTools(String extra) throws Exception {
        String eml = getMessageAsText();

        assertThat(eml, containsRegex("Content-Type: text/plain; charset=UTF-8" + REGEX_EOL));
        assertThat(eml, containsRegex("Content-Transfer-Encoding: 8bit" + REGEX_EOL));
        assertThat(eml, containsRegex("1  2  3  4  5  6  7  8  9  10"));
        assertThat(eml, containsRegex("\\$myconst" + REGEX_EOL));
        assertThat(eml, containsRegex("\\$stringUtil" + REGEX_EOL));
        assertThat(eml, containsRegex("\\$hello" + REGEX_EOL));
        assertThat(eml, containsRegex(extra + REGEX_EOL));
    }

    private void assert_TextHtml_mytemplate_pullTools_and_vars(String extra) throws Exception {
        String eml = getMessageAsText();

        assertThat(eml, containsRegex("Content-Type: text/html; charset=UTF-8" + REGEX_EOL));
        assertThat(eml, containsRegex("Content-Transfer-Encoding: 8bit" + REGEX_EOL));
        assertThat(eml, containsRegex("1  2  3  4  5  6  7  8  9  10"));
        assertThat(eml, containsRegex("Constant\\[MailConstant\\]"));
        assertThat(eml, containsRegex("com.alibaba.citrus.util.StringUtil@"));
        assertThat(eml, containsRegex("world" + REGEX_EOL));
        assertThat(eml, containsRegex(extra + REGEX_EOL));
    }

    private void assert_TextHtml_complex(String extra) throws Exception {
        String eml = getMessageAsText();

        assertThat(eml, containsRegex("Content-Type: multipart/related;"));
        assertThat(eml, containsRegex("Content-Type: text/html; charset=UTF-8" + REGEX_EOL));
        assertThat(eml, containsRegex("Content-Transfer-Encoding: 8bit" + REGEX_EOL));
        assertThat(eml, containsRegex("1  2  3  4  5  6  7  8  9  10"));
        assertThat(eml, containsRegex("Content-Type: image/gif"));
        assertThat(eml, containsRegex("Content-Disposition: inline; filename=java.gif"));
        assertThat(eml, containsRegex("Content-Type: image/jpeg"));
        assertThat(eml, containsRegex("Content-Disposition: inline; filename=bible.jpg"));
        assertThat(eml, containsRegex(extra + REGEX_EOL));

        // ���ҽ���4��content type
        assertEquals(4, StringUtil.countMatches(eml, "Content-Type:"));

        // url1��url2ָ��ͬһ��image����url3��ͬ
        Pattern pattern = Pattern.compile("<img src=\"cid:([^\"]+)\"/>");
        Matcher matcher = pattern.matcher(eml);

        assertTrue(matcher.find());
        String cid1 = matcher.group(1);

        assertTrue(matcher.find());
        String cid2 = matcher.group(1);

        assertTrue(matcher.find());
        String cid3 = matcher.group(1);

        assertFalse(matcher.find());
        assertEquals(cid1, cid2);
        assertThat(cid1, not(equalTo(cid3)));
    }

    private void assert_TextHtml_streamOnlyResource() throws Exception {
        String eml = getMessageAsText();

        assertThat(eml, containsRegex("Content-Type: multipart/related;"));
        assertThat(eml, containsRegex("Content-Type: text/html; charset=UTF-8" + REGEX_EOL));
        assertThat(eml, containsRegex("Content-Transfer-Encoding: 8bit" + REGEX_EOL));
        assertThat(eml, containsRegex("cid:"));
        assertThat(eml, containsRegex("Content-Type: application/octet-stream")); // ��֧��url������ȡ����content type
        assertThat(eml, containsRegex("Content-Disposition: inline; filename=java.gif"));

        // ���ҽ���3��content type
        assertEquals(3, StringUtil.countMatches(eml, "Content-Type:"));
    }

    @Override
    protected HTMLTemplateContent createContent() {
        return new HTMLTemplateContent();
    }
}
TOP

Related Classes of com.alibaba.citrus.service.mail.HTMLTemplateContentTests

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.