/src/test/java/com/atlassian/confluence/extra/impresence2/TestAbstractPresenceMacro.java

https://bitbucket.org/xiaobguo/confluence-impresence-plugin · Java · 171 lines · 137 code · 34 blank · 0 comment · 0 complexity · 090c53875bc3ecb013eaa3c6563fe79d MD5 · raw file

  1. package com.atlassian.confluence.extra.impresence2;
  2. import com.atlassian.confluence.extra.impresence2.reporter.PresenceException;
  3. import com.atlassian.confluence.extra.impresence2.reporter.PresenceReporter;
  4. import com.atlassian.confluence.languages.LocaleManager;
  5. import com.atlassian.confluence.pages.Page;
  6. import com.atlassian.confluence.plugin.services.VelocityHelperService;
  7. import com.atlassian.confluence.security.PermissionManager;
  8. import com.atlassian.confluence.util.i18n.I18NBean;
  9. import com.atlassian.confluence.util.i18n.I18NBeanFactory;
  10. import com.atlassian.renderer.RenderContext;
  11. import com.atlassian.renderer.v2.macro.MacroException;
  12. import com.atlassian.user.User;
  13. import junit.framework.TestCase;
  14. import org.apache.commons.lang.StringUtils;
  15. import org.mockito.Matchers;
  16. import org.mockito.Mock;
  17. import org.mockito.MockitoAnnotations;
  18. import org.mockito.invocation.InvocationOnMock;
  19. import org.mockito.stubbing.Answer;
  20. import java.io.IOException;
  21. import java.util.HashMap;
  22. import java.util.Locale;
  23. import java.util.Map;
  24. import static org.mockito.Mockito.*;
  25. public class TestAbstractPresenceMacro extends TestCase
  26. {
  27. private static final String SERVICE_TEST = "test";
  28. private TestPresenceMacro presenceMacro;
  29. @Mock
  30. private LocaleManager localeManager;
  31. @Mock
  32. private I18NBeanFactory i18NBeanFactory;
  33. @Mock
  34. private I18NBean i18NBean;
  35. @Mock
  36. private PresenceManager presenceManager;
  37. @Mock
  38. private PermissionManager permissionManager;
  39. @Mock
  40. private PresenceReporter presenceReporter;
  41. @Mock
  42. private VelocityHelperService velocityHelperService;
  43. private Map<String, String> macroParameters;
  44. private RenderContext renderContext;
  45. protected void setUp() throws Exception
  46. {
  47. super.setUp();
  48. MockitoAnnotations.initMocks(this);
  49. when(localeManager.getLocale(Matchers.<User>anyObject())).thenReturn(Locale.getDefault());
  50. when(i18NBeanFactory.getI18NBean(Matchers.<Locale>anyObject())).thenReturn(i18NBean);
  51. when(i18NBean.getText(anyString(), Matchers.<Object[]>anyObject())).thenAnswer(
  52. new Answer<String>()
  53. {
  54. public String answer(InvocationOnMock invocationOnMock) throws Throwable
  55. {
  56. return invocationOnMock.getArguments()[0].toString();
  57. }
  58. }
  59. );
  60. presenceMacro = new TestPresenceMacro(localeManager, i18NBeanFactory, presenceManager, permissionManager, velocityHelperService);
  61. macroParameters = new HashMap<String, String>();
  62. renderContext = new Page().toPageContext();
  63. }
  64. public void testExecuteWhenServiceNotSupported()
  65. {
  66. try
  67. {
  68. presenceMacro.execute(macroParameters, StringUtils.EMPTY, renderContext);
  69. fail("Control should not get to this point");
  70. }
  71. catch (final MacroException me)
  72. {
  73. assertEquals("com.atlassian.confluence.macro.MacroExecutionException: error.macro.unsupportedservice", me.getMessage());
  74. }
  75. }
  76. public void testExecuteWhenInvalidServiceIsSpecifiedByTheDefaultMacroParameter()
  77. {
  78. try
  79. {
  80. macroParameters.put("1", "fooservice");
  81. presenceMacro.execute(macroParameters, StringUtils.EMPTY, renderContext);
  82. fail("Control should not get to this point");
  83. }
  84. catch (final MacroException me)
  85. {
  86. assertEquals("com.atlassian.confluence.macro.MacroExecutionException: error.macro.unsupportedservice", me.getMessage());
  87. }
  88. }
  89. public void testExecuteWhenInvalidServiceIsSpecifiedByTheServiceParameter()
  90. {
  91. try
  92. {
  93. macroParameters.put("service", "fooservice");
  94. presenceMacro.execute(macroParameters, StringUtils.EMPTY, renderContext);
  95. fail("Control should not get to this point");
  96. }
  97. catch (final MacroException me)
  98. {
  99. assertEquals("com.atlassian.confluence.macro.MacroExecutionException: error.macro.unsupportedservice", me.getMessage());
  100. }
  101. }
  102. public void testExecuteWhenServiceSpecifiedRequiresConfiguration() throws MacroException, IOException, PresenceException
  103. {
  104. macroParameters.put("service", "fooservice");
  105. when(presenceManager.getReporter(SERVICE_TEST)).thenReturn(presenceReporter);
  106. when(presenceReporter.requiresConfig()).thenReturn(true);
  107. assertEquals("html", new TestPresenceMacro(localeManager, i18NBeanFactory, presenceManager, permissionManager, velocityHelperService)
  108. {
  109. @Override
  110. protected String getRenderedHtml(PresenceReporter reporter)
  111. {
  112. return "html";
  113. }
  114. }.execute(macroParameters, StringUtils.EMPTY, renderContext));
  115. verify(presenceReporter, never()).getPresenceXHTML(anyString(), anyBoolean());
  116. }
  117. public void testExecuteWhenServiceSpecifiedReturnsPresenceXhtml() throws MacroException, PresenceException, IOException
  118. {
  119. macroParameters.put("0", "fooid");
  120. macroParameters.put("service", "fooservice");
  121. when(presenceManager.getReporter(SERVICE_TEST)).thenReturn(presenceReporter);
  122. when(presenceReporter.getPresenceXHTML("fooid", true)).thenReturn("fooxhtml");
  123. assertEquals("fooxhtml", presenceMacro.execute(macroParameters, StringUtils.EMPTY, renderContext));
  124. }
  125. private static class TestPresenceMacro extends AbstractPresenceMacro
  126. {
  127. private TestPresenceMacro(LocaleManager localeManager, I18NBeanFactory i18NBeanFactory, PresenceManager presenceManager, PermissionManager permissionManager, VelocityHelperService velocityHelperService)
  128. {
  129. super(localeManager, i18NBeanFactory, presenceManager, permissionManager, velocityHelperService);
  130. }
  131. @Override
  132. protected String getImService(Map<String, String> parameters)
  133. {
  134. return SERVICE_TEST;
  135. }
  136. }
  137. }