de.blizzy.documentr.markdown.macro.impl.FlattrMacroTest.java Source code

Java tutorial

Introduction

Here is the source code for de.blizzy.documentr.markdown.macro.impl.FlattrMacroTest.java

Source

/*
documentr - Edit, maintain, and present software documentation on the web.
Copyright (C) 2012-2013 Maik Schreiber
    
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
    
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
    
You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package de.blizzy.documentr.markdown.macro.impl;

import static de.blizzy.documentr.TestUtil.*;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;

import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang3.StringEscapeUtils;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.springframework.util.MultiValueMap;
import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UriComponentsBuilder;

import com.google.common.collect.Sets;

import de.blizzy.documentr.AbstractDocumentrTest;
import de.blizzy.documentr.markdown.HtmlSerializerContext;
import de.blizzy.documentr.markdown.macro.IMacroContext;
import de.blizzy.documentr.markdown.macro.IMacroSettings;
import de.blizzy.documentr.page.IPageStore;
import de.blizzy.documentr.page.Page;

public class FlattrMacroTest extends AbstractDocumentrTest {
    private static final String FLATTR_USER_ID = "flattrUserId"; //$NON-NLS-1$
    private static final String PAGE_TITLE = "pageTitle"; //$NON-NLS-1$
    private static final String PROJECT = "project"; //$NON-NLS-1$
    private static final String BRANCH = "branch"; //$NON-NLS-1$
    private static final String PAGE = "page"; //$NON-NLS-1$
    private static final String TAG_1 = "tag1"; //$NON-NLS-1$
    private static final String TAG_2 = "tag2"; //$NON-NLS-1$
    private static final String PAGE_URI = "pageUri"; //$NON-NLS-1$
    private static final String PAGE_URL = "pageUrl"; //$NON-NLS-1$

    @Mock
    private IMacroContext macroContext;
    @Mock
    private HtmlSerializerContext htmlSerializerContext;
    @Mock
    private IPageStore pageStore;
    @Mock
    private IMacroSettings macroSettings;
    @InjectMocks
    private FlattrMacro macro;

    @Before
    public void setUp() throws IOException {
        when(htmlSerializerContext.getPageStore()).thenReturn(pageStore);
        when(macroContext.getHtmlSerializerContext()).thenReturn(htmlSerializerContext);
        when(macroContext.getSettings()).thenReturn(macroSettings);
        when(macroSettings.getSetting("userId")).thenReturn(FLATTR_USER_ID); //$NON-NLS-1$

        when(htmlSerializerContext.getProjectName()).thenReturn(PROJECT);
        when(htmlSerializerContext.getBranchName()).thenReturn(BRANCH);
        when(htmlSerializerContext.getPagePath()).thenReturn(PAGE);
        when(htmlSerializerContext.getPageUri(PAGE)).thenReturn(PAGE_URI);
        when(htmlSerializerContext.getUrl(PAGE_URI)).thenReturn(PAGE_URL);

        Page page = Page.fromText(PAGE_TITLE, "text"); //$NON-NLS-1$
        page.setTags(Sets.newHashSet(TAG_1, TAG_2));
        when(pageStore.getPage(PROJECT, BRANCH, PAGE, false)).thenReturn(page);
    }

    @Test
    public void getHtml() {
        String html = macro.getHtml(macroContext);
        @SuppressWarnings("nls")
        String re = "^<a href=\"([^\"]+)\">"
                + "<img src=\"https://api\\.flattr\\.com/button/flattr-badge-large\\.png\"/>" + "</a>$"; //$NON-NLS-2$
        assertRE(re, html);

        Matcher matcher = Pattern.compile(re, Pattern.DOTALL).matcher(html);
        matcher.find();
        String url = StringEscapeUtils.unescapeHtml4(matcher.group(1));
        UriComponents components = UriComponentsBuilder.fromHttpUrl(url).build();
        assertEquals("https", components.getScheme()); //$NON-NLS-1$
        assertEquals("flattr.com", components.getHost()); //$NON-NLS-1$
        assertEquals(-1, components.getPort());
        assertEquals("/submit/auto", components.getPath()); //$NON-NLS-1$
        MultiValueMap<String, String> params = components.getQueryParams();
        assertEquals(FLATTR_USER_ID, params.getFirst("user_id")); //$NON-NLS-1$
        assertEquals(PAGE_URL, params.getFirst("url")); //$NON-NLS-1$
        assertEquals(PAGE_TITLE, params.getFirst("title")); //$NON-NLS-1$
        assertEquals("text", params.getFirst("category")); //$NON-NLS-1$ //$NON-NLS-2$
        assertTrue(params.getFirst("tags").equals(TAG_1 + "," + TAG_2) || //$NON-NLS-1$ //$NON-NLS-2$
                params.getFirst("tags").equals(TAG_2 + "," + TAG_1)); //$NON-NLS-1$ //$NON-NLS-2$
    }
}