PageRenderTime 42ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/jira-project/jira-functional-tests/jira-webdriver-tests/src/main/java/com/atlassian/jira/webtest/webdriver/tests/issue/TestCreateIssueWithDefaultValuesForCustomFields.java

https://bitbucket.org/ahmed_bilal_360factors/jira7-core
Java | 221 lines | 162 code | 54 blank | 5 comment | 2 complexity | b51ea216d8644bf4f213d423eb49f1bf MD5 | raw file
Possible License(s): Apache-2.0
  1. package com.atlassian.jira.webtest.webdriver.tests.issue;
  2. import com.atlassian.integrationtesting.runner.restore.Restore;
  3. import com.atlassian.jira.functest.framework.suite.Category;
  4. import com.atlassian.jira.functest.framework.suite.WebTest;
  5. import com.atlassian.jira.pageobjects.BaseJiraWebTest;
  6. import com.atlassian.jira.pageobjects.components.JiraHeader;
  7. import com.atlassian.jira.pageobjects.dialogs.quickedit.CreateIssueDialog;
  8. import com.atlassian.jira.pageobjects.framework.fields.CustomField;
  9. import com.atlassian.pageobjects.PageBinder;
  10. import com.atlassian.pageobjects.elements.Option;
  11. import com.atlassian.pageobjects.elements.PageElement;
  12. import com.atlassian.pageobjects.elements.WebDriverSelectElement;
  13. import com.atlassian.pageobjects.elements.query.Poller;
  14. import com.google.common.base.Function;
  15. import com.google.common.base.Predicate;
  16. import com.google.common.collect.Iterables;
  17. import com.google.common.collect.Lists;
  18. import org.junit.Test;
  19. import org.openqa.selenium.By;
  20. import javax.inject.Inject;
  21. import static org.hamcrest.Matchers.containsString;
  22. import static org.hamcrest.Matchers.hasItems;
  23. import static org.hamcrest.Matchers.hasSize;
  24. import static org.hamcrest.Matchers.is;
  25. import static org.junit.Assert.assertEquals;
  26. import static org.junit.Assert.assertThat;
  27. @WebTest({Category.WEBDRIVER_TEST, Category.ISSUES})
  28. public class TestCreateIssueWithDefaultValuesForCustomFields extends BaseJiraWebTest {
  29. @Inject
  30. private PageBinder pageBinder;
  31. @Test
  32. @Restore("xml/JRA-30942.xml")
  33. public void testTogglingProjectSetDefaultValuesForCustoFieldsProperly() {
  34. jira.gotoHomePage();
  35. final CreateIssueDialog createIssueDialog = pageBinder.bind(JiraHeader.class).createIssue();
  36. Poller.waitUntilTrue("CreateIssueDialog was not opened.", createIssueDialog.isOpen());
  37. createIssueDialog.fill("summary", "summmary retain");
  38. createIssueDialog.selectProject("P1");
  39. MultiSelectCustomField customField = createIssueDialog.getCustomField("customfield_10000", MultiSelectCustomField.class);
  40. Iterable<String> selectedOptions = customField.getSelectedOptions();
  41. assertThat(selectedOptions, hasItems("AAA", "BBB"));
  42. assertThat(Lists.newArrayList(selectedOptions), hasSize(2));
  43. assertThat(createIssueDialog.getFieldValue("customfield_10001"), is("CONTEXT 1"));
  44. createIssueDialog.selectProject("P2");
  45. customField = createIssueDialog.getCustomField("customfield_10000", MultiSelectCustomField.class);
  46. selectedOptions = customField.getSelectedOptions();
  47. assertThat(selectedOptions, hasItems("BBB", "CCC"));
  48. assertThat(Lists.newArrayList(selectedOptions), hasSize(2));
  49. assertThat(createIssueDialog.getFieldValue("customfield_10001"), is("CONTEXT 2"));
  50. assertThat(createIssueDialog.getFieldValue("summary"), is("summmary retain"));
  51. }
  52. @Test
  53. @Restore("xml/JRA-30942.xml")
  54. public void testCreateAnotherShouldRetainDirtyCustomFieldValues() {
  55. jira.gotoHomePage();
  56. CreateIssueDialog createIssueDialog = pageBinder.bind(JiraHeader.class).createIssue();
  57. Poller.waitUntilTrue("CreateIssueDialog was not opened.", createIssueDialog.isOpen());
  58. createIssueDialog.checkCreateMultiple();
  59. createIssueDialog.fill("summary", "summmary retain");
  60. PageElement textCustomfield = createIssueDialog.getCustomFieldElement("customfield_10001");
  61. textCustomfield.select().clear().type("value");
  62. createIssueDialog = createIssueDialog.submit(CreateIssueDialog.class, CreateIssueDialog.Type.ISSUE);
  63. assertEquals("Field value was retained", createIssueDialog.getFieldValue("customfield_10001"), "value");
  64. createIssueDialog.close();
  65. createIssueDialog = pageBinder.bind(JiraHeader.class).createIssue();
  66. Poller.waitUntilTrue("CreateIssueDialog was not opened.", createIssueDialog.isOpen());
  67. assertThat("Field value is default after dialog reopen", createIssueDialog.getFieldValue("customfield_10001"), is("CONTEXT 1"));
  68. }
  69. @Test
  70. @Restore("xml/JRA-33997.xml")
  71. public void testToggleIssueTypeShouldRetainDirtyCustomFieldValues() throws Exception {
  72. jira.gotoHomePage();
  73. CreateIssueDialog createIssueDialog = pageBinder.bind(JiraHeader.class).createIssue();
  74. Poller.waitUntilTrue("CreateIssueDialog was not opened.", createIssueDialog.isOpen());
  75. createIssueDialog.selectProject("P1");
  76. // TODO uncomment once JRA-41586 is resolved, until then it is ok to have it like this, because P1/Bug is the defaault
  77. // createIssueDialog.selectIssueType("Bug");
  78. // instead assert that these are defaults
  79. assertThat("P1 is selected project", createIssueDialog.getProject(), containsString("P1"));
  80. assertEquals("Bug is selected issue type", createIssueDialog.getIssueType(), "Bug");
  81. createIssueDialog.switchToCustomMode().addFields("customfield_10001");
  82. PageElement textCustomfield = createIssueDialog.getCustomFieldElement("customfield_10001");
  83. textCustomfield.select().clear().type("value");
  84. createIssueDialog.selectIssueType("Task");
  85. assertEquals("Field value was retained after issue type change", createIssueDialog.getFieldValue("customfield_10001"), "value");
  86. createIssueDialog.selectProject("P2");
  87. assertEquals("Field value was retained after project change", createIssueDialog.getFieldValue("customfield_10001"), "value");
  88. }
  89. @Test
  90. @Restore("xml/JRA-33997.xml")
  91. public void testToggleIssueTypeShouldRetainDirtyCustomCascadingSelect() throws Exception {
  92. final String CUSTOM_FIELD_ID = "customfield_10100";
  93. final String CUSTOM_FIELD_CHILD_ID = "customfield_10100:1";
  94. jira.gotoHomePage();
  95. CreateIssueDialog createIssueDialog = pageBinder.bind(JiraHeader.class).createIssue();
  96. Poller.waitUntilTrue("CreateIssueDialog was not opened.", createIssueDialog.isOpen());
  97. createIssueDialog.fill("summary", "summmary retain");
  98. createIssueDialog.selectProject("P1");
  99. assertThat("P1 is selected project", createIssueDialog.getProject(), containsString("P1"));
  100. assertEquals("Bug is selected issue type", createIssueDialog.getIssueType(), "Bug");
  101. createIssueDialog.switchToCustomMode().addFields(CUSTOM_FIELD_ID);
  102. SelectCustomField parentCombo = createIssueDialog.getCustomField(CUSTOM_FIELD_ID, SelectCustomField.class);
  103. SelectCustomField childCombo = createIssueDialog.getCustomField(CUSTOM_FIELD_CHILD_ID, SelectCustomField.class);
  104. childCombo.selectOption("Sub-option A 2");
  105. createIssueDialog.selectIssueType("Task");
  106. assertEquals("Child field value was retained after issue type change", createIssueDialog.getCustomField(CUSTOM_FIELD_CHILD_ID, SelectCustomField.class).getSelectedText(), "Sub-option A 2");
  107. parentCombo.selectOption("Option B");
  108. childCombo.selectOption("Sub-option B 2");
  109. createIssueDialog.selectIssueType("Bug");
  110. assertEquals("Parent field value was retained after issue type change", createIssueDialog.getCustomField(CUSTOM_FIELD_ID, SelectCustomField.class).getSelectedText(), "Option B");
  111. assertEquals("Child field value was retained after issue type change", createIssueDialog.getCustomField(CUSTOM_FIELD_CHILD_ID, SelectCustomField.class).getSelectedText(), "Sub-option B 2");
  112. createIssueDialog.selectProject("P2");
  113. assertEquals("Parent field value was retained after issue type change", createIssueDialog.getCustomField(CUSTOM_FIELD_ID, SelectCustomField.class).getSelectedText(), "Option B");
  114. assertEquals("Child field value was retained after issue type change", createIssueDialog.getCustomField(CUSTOM_FIELD_CHILD_ID, SelectCustomField.class).getSelectedText(), "Sub-option B 2");
  115. // check if change to child field only will be retained
  116. childCombo.selectOption("Sub-option B 1");
  117. createIssueDialog.selectProject("P1");
  118. assertEquals("Child field value was retained after project change", createIssueDialog.getCustomField(CUSTOM_FIELD_CHILD_ID, SelectCustomField.class).getSelectedText(), "Sub-option B 1");
  119. createIssueDialog.selectIssueType("Task");
  120. assertEquals("Child field value was retained after issue type change", createIssueDialog.getCustomField(CUSTOM_FIELD_CHILD_ID, SelectCustomField.class).getSelectedText(), "Sub-option B 1");
  121. // after create mutiple it should retain its value, I'm very sorry for such a long test, but this stuff tends to be broken very often :)
  122. createIssueDialog.checkCreateMultiple();
  123. createIssueDialog = createIssueDialog.submit(CreateIssueDialog.class, CreateIssueDialog.Type.ISSUE);
  124. assertEquals("Field value was retained", createIssueDialog.getCustomField(CUSTOM_FIELD_ID, SelectCustomField.class).getSelectedText(), "Option B");
  125. assertEquals("Child field value was retained after submit", createIssueDialog.getCustomField(CUSTOM_FIELD_CHILD_ID, SelectCustomField.class).getSelectedText(), "Sub-option B 1");
  126. }
  127. public static class SelectCustomField implements CustomField {
  128. private WebDriverSelectElement field;
  129. public SelectCustomField(PageElement form, String id) {
  130. this.field = form.find(By.id(id), WebDriverSelectElement.class);
  131. }
  132. public void selectOption(final String value) {
  133. final Option option = Iterables.find(field.getAllOptions(), new Predicate<Option>() {
  134. @Override
  135. public boolean apply(final Option option) {
  136. return option.text().equals(value);
  137. }
  138. });
  139. if (option != null) {
  140. field.select(option);
  141. }
  142. }
  143. public String getSelectedText() {
  144. return field.getSelected().text();
  145. }
  146. }
  147. public static class MultiSelectCustomField implements CustomField {
  148. private PageElement field;
  149. public MultiSelectCustomField(PageElement form, String id) {
  150. this.field = form.find(By.id(id));
  151. }
  152. private Iterable<String> getSelectedOptions() {
  153. Iterable<PageElement> selectedOptions = Iterables.filter(field.findAll(By.tagName("option")), new Predicate<PageElement>() {
  154. @Override
  155. public boolean apply(PageElement option) {
  156. return option.isSelected();
  157. }
  158. });
  159. return Iterables.transform(selectedOptions, new Function<PageElement, String>() {
  160. @Override
  161. public String apply(PageElement option) {
  162. return option.getText();
  163. }
  164. });
  165. }
  166. }
  167. }