PageRenderTime 40ms CodeModel.GetById 11ms RepoModel.GetById 1ms app.codeStats 0ms

/jira-project/jira-functional-tests/jira-func-tests/src/main/java/com/atlassian/jira/functest/framework/ScreensImpl.java

https://bitbucket.org/ahmed_bilal_360factors/jira7-core
Java | 225 lines | 194 code | 27 blank | 4 comment | 7 complexity | 7b8bcafa2d66f65333e079001f2f71a0 MD5 | raw file
Possible License(s): Apache-2.0
  1. package com.atlassian.jira.functest.framework;
  2. import com.atlassian.jira.functest.framework.assertions.TextAssertions;
  3. import com.atlassian.jira.testkit.client.log.FuncTestLogger;
  4. import com.atlassian.jira.testkit.client.log.FuncTestLoggerImpl;
  5. import com.atlassian.jira.webtests.util.JIRAEnvironmentData;
  6. import com.meterware.httpunit.WebTable;
  7. import net.sourceforge.jwebunit.WebTester;
  8. import org.xml.sax.SAXException;
  9. import javax.inject.Inject;
  10. import java.util.Map;
  11. import java.util.TreeMap;
  12. import java.util.stream.IntStream;
  13. import static com.atlassian.jira.functest.framework.FunctTestConstants.DEFAULT_SCREEN_SCHEME;
  14. import static com.atlassian.jira.functest.framework.FunctTestConstants.FIELD_TABLE_ID;
  15. import static com.atlassian.jira.functest.framework.FunctTestConstants.SCREEN_TABLE_NAME_COLUMN_INDEX;
  16. import static com.atlassian.jira.functest.framework.Navigation.AdminSection.FIELD_SCREENS;
  17. import static com.atlassian.jira.functest.framework.Navigation.AdminSection.FIELD_SCREEN_SCHEME;
  18. import static com.atlassian.jira.functest.framework.Navigation.AdminSection.ISSUE_TYPE_SCREEN_SCHEME;
  19. import static java.util.function.Function.identity;
  20. import static java.util.stream.Collectors.toMap;
  21. import static org.junit.Assert.fail;
  22. /**
  23. * @since 7.2
  24. */
  25. public class ScreensImpl implements Screens {
  26. private final Navigation navigation;
  27. private final WebTester tester;
  28. private final TextAssertions textAssertions;
  29. private final FuncTestLogger logger;
  30. @Inject
  31. public ScreensImpl(JIRAEnvironmentData environmentData, Navigation navigation, WebTester tester, TextAssertions textAssertions) {
  32. this.navigation = navigation;
  33. this.tester = tester;
  34. this.textAssertions = textAssertions;
  35. this.logger = new FuncTestLoggerImpl(2);
  36. }
  37. @Override
  38. public void addScreen(String screenName, String screenDescription) {
  39. navigation.gotoPage(FIELD_SCREENS.getUrl());
  40. tester.clickLink("add-field-screen");
  41. tester.setWorkingForm("field-screen-add");
  42. tester.setFormElement("fieldScreenName", screenName);
  43. tester.setFormElement("fieldScreenDescription", screenDescription);
  44. tester.submit("Add");
  45. }
  46. @Override
  47. public void deleteScreen(String screenName) {
  48. navigation.gotoPage(FIELD_SCREENS.getUrl());
  49. tester.clickLink("delete_fieldscreen_" + screenName);
  50. tester.submit("Delete");
  51. }
  52. @Override
  53. public void addFieldScreenScheme(String schemeName, String schemeDescription) {
  54. navigation.gotoPage(FIELD_SCREEN_SCHEME.getUrl());
  55. tester.clickLink("add-field-screen-scheme");
  56. tester.setWorkingForm("field-screen-scheme-add");
  57. tester.setFormElement("fieldScreenSchemeName", schemeName);
  58. tester.setFormElement("fieldScreenSchemeDescription", schemeDescription);
  59. tester.submit("Add");
  60. }
  61. @Override
  62. public void copyFieldScreenScheme(String copiedSchemeName, String schemeName, String schemeDescription) {
  63. navigation.gotoPage(FIELD_SCREEN_SCHEME.getUrl());
  64. tester.clickLink("copy_fieldscreenscheme_" + copiedSchemeName);
  65. tester.setFormElement("fieldScreenSchemeName", schemeName);
  66. tester.setFormElement("fieldScreenSchemeDescription", schemeDescription);
  67. tester.submit("Copy");
  68. }
  69. @Override
  70. public void deleteFieldScreenScheme(String schemeName) {
  71. navigation.gotoPage(FIELD_SCREEN_SCHEME.getUrl());
  72. try {
  73. tester.assertLinkPresent("configure_fieldscreenscheme_" + schemeName);
  74. } catch (AssertionError e) {
  75. logger.log("Scheme does not exist");
  76. }
  77. tester.clickLink("delete_fieldscreenscheme_" + schemeName);
  78. tester.submit("Delete");
  79. }
  80. @Override
  81. public void removeAllRemainingScreenAssociationsFromDefault() {
  82. navigation.gotoPage(FIELD_SCREEN_SCHEME.getUrl());
  83. tester.clickLink("configure_fieldscreenscheme_" + DEFAULT_SCREEN_SCHEME);
  84. if (tester.getDialog().isLinkPresentWithText("Delete")) {
  85. tester.clickLinkWithText("Delete");
  86. removeAllRemainingScreenAssociationsFromDefault();
  87. }
  88. }
  89. @Override
  90. public void removeAllRemainingFieldScreens() {
  91. navigation.gotoPage(FIELD_SCREENS.getUrl());
  92. if (tester.getDialog().isLinkPresentWithText("Delete")) {
  93. tester.clickLinkWithText("Delete");
  94. tester.submit("Delete");
  95. removeAllRemainingFieldScreens();
  96. }
  97. }
  98. @Override
  99. public void addIssueTypeFieldScreenScheme(String schemeName, String schemeDescription, String defaultScreenScheme) {
  100. navigation.gotoPage(ISSUE_TYPE_SCREEN_SCHEME.getUrl());
  101. tester.clickLink("add-issue-type-screen-scheme");
  102. tester.setFormElement("schemeName", schemeName);
  103. tester.setFormElement("schemeDescription", schemeDescription);
  104. tester.selectOption("fieldScreenSchemeId", defaultScreenScheme);
  105. tester.submit("Add");
  106. }
  107. @Override
  108. public void deleteIssueTypeFieldScreenScheme(String schemeId) {
  109. navigation.gotoPage(ISSUE_TYPE_SCREEN_SCHEME.getUrl());
  110. tester.clickLink("delete_issuetypescreenscheme_" + schemeId);
  111. tester.submit("Delete");
  112. }
  113. @Override
  114. public void copyIssueTypeFieldScreenSchemeName(String copiedSchemeId, String schemeName, String schemeDescription) {
  115. navigation.gotoPage(ISSUE_TYPE_SCREEN_SCHEME.getUrl());
  116. tester.clickLink("copy_issuetypescreenscheme_" + copiedSchemeId);
  117. tester.setFormElement("schemeName", schemeName);
  118. tester.setFormElement("schemeDescription", schemeDescription);
  119. tester.submit("Copy");
  120. }
  121. @Override
  122. public void addIssueOperationToScreenAssociation(String schemeName, String issueOperation, String screenName) {
  123. logger.log("Adding screen " + screenName + " to operation '" + issueOperation + "'.");
  124. gotoFieldScreenScheme(schemeName);
  125. tester.clickLink("add-screen-scheme-item");
  126. tester.selectOption("issueOperationId", issueOperation);
  127. tester.selectOption("fieldScreenId", screenName);
  128. tester.submit("Add");
  129. }
  130. @Override
  131. public void deleteIssueOperationFromScreenAssociation(String schemeName, String issueOperation) {
  132. logger.log("Deleting operation '" + issueOperation + "' from scheme " + schemeName + ".");
  133. gotoFieldScreenScheme(schemeName);
  134. try {
  135. tester.clickLink("delete_fieldscreenscheme_" + issueOperation);
  136. } catch (AssertionError e) {
  137. logger.log("Issue Operation not configured");
  138. }
  139. // assertLinkNotPresent("delete_fieldscreenscheme_" + issueOperation);
  140. }
  141. @Override
  142. public void deleteTabFromScreen(String screenName, String tabName) {
  143. gotoFieldScreenTab(screenName, tabName);
  144. tester.clickLinkWithText("Delete");
  145. tester.submit("Delete");
  146. }
  147. private String findRowWithName(final String fieldTableName, final int column, final String fieldName) {
  148. try {
  149. final WebTable fieldTable = tester.getDialog().getResponse().getTableWithID(fieldTableName);
  150. return fieldTable == null ? null : IntStream.range(1, fieldTable.getRowCount()).boxed()
  151. .collect(toMap(identity(), i -> fieldTable.getCellAsText(i, column), (x, y) -> x, TreeMap::new))
  152. .entrySet().stream()
  153. .filter(entry -> entry.getValue().contains(fieldName))
  154. .map(Map.Entry::getKey)
  155. .map(i -> i - 1)
  156. .map(Object::toString)
  157. .findFirst().orElse(null);
  158. } catch (final SAXException ignored) {
  159. fail("Cannot find table with id '" + FIELD_TABLE_ID + "'.");
  160. return null;
  161. }
  162. }
  163. @Override
  164. public void removeFieldFromFieldScreenTab(String screenName, String tabName, String[] fieldNames) {
  165. gotoFieldScreenTab(screenName, tabName);
  166. tester.assertTextPresent("Configure Screen");
  167. for (String fieldName : fieldNames) {
  168. String indexName = findRowWithName(FIELD_TABLE_ID, SCREEN_TABLE_NAME_COLUMN_INDEX, fieldName);
  169. if (indexName != null) {
  170. int index = Integer.parseInt(indexName);
  171. tester.checkCheckbox("removeField_" + index);
  172. tester.assertCheckboxSelected("removeField_" + index);
  173. } else {
  174. logger.log("Field " + fieldName + " not present");
  175. }
  176. }
  177. tester.submit("deleteFieldsFromTab");
  178. }
  179. private void gotoFieldScreenScheme(String schemeName) {
  180. navigation.gotoPage(FIELD_SCREEN_SCHEME.getUrl());
  181. tester.clickLink("configure_fieldscreenscheme_" + schemeName);
  182. }
  183. private void gotoFieldScreenTab(String screenName, String tabName) {
  184. gotoFieldScreen(screenName);
  185. try {
  186. tester.assertTextPresent("Add one or more fields to the");
  187. textAssertions.assertTextSequence("<b>" + tabName + "</b>", "tab.");
  188. } catch (AssertionError e) {
  189. tester.clickLinkWithText(tabName);
  190. }
  191. }
  192. private void gotoFieldScreen(String screenName) {
  193. navigation.gotoPage(FIELD_SCREENS.getUrl());
  194. tester.assertTextPresent("View Screens");
  195. tester.assertLinkPresent("configure_fieldscreen_" + screenName);
  196. tester.clickLink("configure_fieldscreen_" + screenName);
  197. }
  198. }