PageRenderTime 45ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/integration-tests/src/test/java/it/com/atlassian/jira/plugins/dnd/attachment/TestCreateIssue.java

https://bitbucket.org/atlassian/jira-drag-drop-attachments-plugin
Java | 163 lines | 127 code | 35 blank | 1 comment | 0 complexity | c00a89751231e2b3fb39bd14706d642b MD5 | raw file
  1. package it.com.atlassian.jira.plugins.dnd.attachment;
  2. import com.atlassian.jira.functest.framework.suite.WebTest;
  3. import com.atlassian.jira.pageobjects.components.JiraHeader;
  4. import com.atlassian.jira.pageobjects.components.fields.AutoComplete;
  5. import com.atlassian.jira.pageobjects.components.fields.MultiSelectSuggestion;
  6. import com.atlassian.jira.pageobjects.dialogs.quickedit.CreateIssueDialog;
  7. import com.atlassian.jira.pageobjects.dialogs.quickedit.FieldPicker;
  8. import com.atlassian.jira.pageobjects.framework.util.TimedQueryFactory;
  9. import com.atlassian.jira.pageobjects.pages.CreateIssuePage;
  10. import com.atlassian.jira.pageobjects.util.TraceContext;
  11. import com.atlassian.jira.pageobjects.util.Tracer;
  12. import com.atlassian.jira.plugins.dnd.attachment.pageobjects.AttachmentsSection;
  13. import com.atlassian.jira.plugins.dnd.attachment.pageobjects.CreateIssueDetailsPage;
  14. import com.atlassian.jira.plugins.dnd.attachment.pageobjects.CreateIssueDialogDropZone;
  15. import com.atlassian.jira.plugins.dnd.attachment.pageobjects.CreateIssuePageDropZone;
  16. import com.atlassian.jira.plugins.dnd.attachment.pageobjects.DropZone;
  17. import com.atlassian.pageobjects.elements.PageElementFinder;
  18. import com.atlassian.test.categories.OnDemandAcceptanceTest;
  19. import com.google.common.io.Files;
  20. import it.com.atlassian.AuiUtils;
  21. import org.junit.Test;
  22. import org.junit.experimental.categories.Category;
  23. import javax.inject.Inject;
  24. import java.util.List;
  25. import static com.atlassian.jira.functest.framework.suite.Category.WEBDRIVER_TEST;
  26. import static com.atlassian.jira.pageobjects.framework.util.JiraLocators.body;
  27. import static com.atlassian.jira.plugins.dnd.attachment.pageobjects.DropZone.DRAGOVER_CLASS;
  28. import static com.atlassian.pageobjects.elements.query.Poller.waitUntil;
  29. import static com.atlassian.pageobjects.elements.query.Poller.waitUntilTrue;
  30. import static org.hamcrest.Matchers.hasSize;
  31. import static org.junit.Assert.assertEquals;
  32. import static org.junit.Assert.assertFalse;
  33. import static org.junit.Assert.assertTrue;
  34. @WebTest({WEBDRIVER_TEST})
  35. @Category({OnDemandAcceptanceTest.class})
  36. public class TestCreateIssue extends BaseWebdriverTest {
  37. @Inject
  38. private TraceContext traceContext;
  39. @Inject
  40. private PageElementFinder elementFinder;
  41. @Inject
  42. private TimedQueryFactory timedQueryFactory;
  43. @Test
  44. public void testCreateIssueDialogRetainAttachmentsOnIssueTypeChange() throws Exception {
  45. final CreateIssueDialog createIssueDialog = pageBinder.bind(JiraHeader.class).createIssue();
  46. createIssueDialog.selectProject(PROJECT_NAME);
  47. waitUntilTrue("CreateIssueDialog was not opened.", createIssueDialog.isOpen());
  48. DropZone dropZone = pageBinder.bind(CreateIssueDialogDropZone.class);
  49. dropZone.dropImage(TEST_FILE_NAME);
  50. assertFalse("Body does not have dragover class", elementFinder.find(body()).hasClass(DRAGOVER_CLASS));
  51. List<String> images = waitUntil("One image on upload list", timedQueryFactory.forSupplier(dropZone::getFileNames), hasSize(1));
  52. assertEquals("One image on upload list", 1, images.size());
  53. assertTrue("File name starts with '" + Files.getNameWithoutExtension(TEST_FILE_NAME) + "'", images.get(0).startsWith(Files.getNameWithoutExtension(TEST_FILE_NAME)));
  54. assertTrue("File name ends with '" + Files.getFileExtension(TEST_FILE_NAME) + "'", images.get(0).endsWith(Files.getFileExtension(TEST_FILE_NAME)));
  55. final Tracer tracer = traceContext.checkpoint();
  56. createIssueDialog.selectIssueType(secondaryIssueType.getName());
  57. traceContext.waitFor(tracer, "jira.issue.dnd.issuedropzone.render");
  58. CreateIssueDialogDropZone dropZoneAfterTypeChange = pageBinder.bind(CreateIssueDialogDropZone.class);
  59. images = waitUntil("One image on upload list", timedQueryFactory.forSupplier(dropZoneAfterTypeChange::getFileNames), hasSize(1));
  60. assertEquals("One image on upload list", 1, images.size());
  61. assertTrue("File name starts with '" + Files.getNameWithoutExtension(TEST_FILE_NAME) + "'", images.get(0).startsWith(Files.getNameWithoutExtension(TEST_FILE_NAME)));
  62. assertTrue("File name ends with '" + Files.getFileExtension(TEST_FILE_NAME) + "'", images.get(0).endsWith(Files.getFileExtension(TEST_FILE_NAME)));
  63. }
  64. @Test
  65. public void testCreateIssueDialogRetainAttachmentsOnModeToggle() throws Exception {
  66. final CreateIssueDialog createIssueDialog = pageBinder.bind(JiraHeader.class).createIssue();
  67. waitUntilTrue("CreateIssueDialog was not opened.", createIssueDialog.isOpen());
  68. DropZone dropZone = pageBinder.bind(CreateIssueDialogDropZone.class);
  69. dropZone.dropImage(TEST_FILE_NAME);
  70. AuiUtils.closeAllAuiFlags(jira);
  71. createIssueDialog.switchToCustomMode().addFields("attachment");
  72. FieldPicker.clickApplyIfFound(elementFinder);
  73. List<String> images = waitUntil("One image on upload list", timedQueryFactory.forSupplier(dropZone::getFileNames), hasSize(1));
  74. assertEquals("One image on upload list", 1, images.size());
  75. assertTrue("File name starts with '" + Files.getNameWithoutExtension(TEST_FILE_NAME) + "'", images.get(0).startsWith(Files.getNameWithoutExtension(TEST_FILE_NAME)));
  76. assertTrue("File name ends with '" + Files.getFileExtension(TEST_FILE_NAME) + "'", images.get(0).endsWith(Files.getFileExtension(TEST_FILE_NAME)));
  77. Tracer tracer = traceContext.checkpoint();
  78. createIssueDialog.switchToFullMode();
  79. traceContext.waitFor(tracer, "jira.issue.dnd.issuedropzone.render");
  80. CreateIssueDialogDropZone dropZoneAfterToggle = pageBinder.bind(CreateIssueDialogDropZone.class);
  81. images = waitUntil("One image on upload list", timedQueryFactory.forSupplier(dropZoneAfterToggle::getFileNames), hasSize(1));
  82. assertEquals("There is still only one image on upload list", 1, images.size());
  83. assertTrue("File name starts with '" + Files.getNameWithoutExtension(TEST_FILE_NAME) + "'", images.get(0).startsWith(Files.getNameWithoutExtension(TEST_FILE_NAME)));
  84. assertTrue("File name ends with '" + Files.getFileExtension(TEST_FILE_NAME) + "'", images.get(0).endsWith(Files.getFileExtension(TEST_FILE_NAME)));
  85. }
  86. @Test
  87. public void testCreateIssuePage() throws Exception {
  88. final CreateIssuePage createIssuePage = JIRA.goTo(CreateIssuePage.class);
  89. final AutoComplete projectQuickSearch = createIssuePage.getProjectQuickSearch();
  90. final MultiSelectSuggestion testProjectOption =
  91. projectQuickSearch.clearQuery().query(PROJECT_NAME).getActiveSuggestion();
  92. projectQuickSearch.acceptUsingKeyboard(testProjectOption);
  93. createIssuePage.submit();
  94. final CreateIssueDetailsPage createIssueDetailsPage = pageBinder.bind(CreateIssueDetailsPage.class);
  95. final DropZone dropZone = pageBinder.bind(CreateIssuePageDropZone.class);
  96. dropZone.dropImage(TEST_FILE_NAME);
  97. List<String> images = waitUntil("One image on upload list", timedQueryFactory.forSupplier(dropZone::getFileNames), hasSize(1));
  98. assertEquals("One image on upload list", 1, images.size());
  99. assertTrue("File name starts with '" + Files.getNameWithoutExtension(TEST_FILE_NAME) + "'", images.get(0).startsWith(Files.getNameWithoutExtension(TEST_FILE_NAME)));
  100. assertTrue("File name ends with '" + Files.getFileExtension(TEST_FILE_NAME) + "'", images.get(0).endsWith(Files.getFileExtension(TEST_FILE_NAME)));
  101. // submit page and check if attachments persisted after page reload
  102. createIssueDetailsPage.submit();
  103. final DropZone dropZoneAfterSubmit = pageBinder.bind(CreateIssuePageDropZone.class);
  104. images = waitUntil("One image on upload list", timedQueryFactory.forSupplier(dropZoneAfterSubmit::getFileNames), hasSize(1));
  105. assertTrue("File name starts with '" + Files.getNameWithoutExtension(TEST_FILE_NAME) + "'", images.get(0).startsWith(Files.getNameWithoutExtension(TEST_FILE_NAME)));
  106. assertTrue("File name ends with '" + Files.getFileExtension(TEST_FILE_NAME) + "'", images.get(0).endsWith(Files.getFileExtension(TEST_FILE_NAME)));
  107. createIssueDetailsPage.setSummary("Please add d&d to create issue page.");
  108. createIssueDetailsPage.submit();
  109. AttachmentsSection attachmentsSection = pageBinder.bind(AttachmentsSection.class);
  110. final List<String> fileNames = waitUntil("There is one attachment", timedQueryFactory.forSupplier(attachmentsSection::getFileNames), hasSize(1));
  111. assertTrue("File name starts with '" + Files.getNameWithoutExtension(TEST_FILE_NAME) + "'", fileNames.get(0).startsWith(Files.getNameWithoutExtension(TEST_FILE_NAME)));
  112. assertTrue("File name ends with '" + Files.getFileExtension(TEST_FILE_NAME) + "'", fileNames.get(0).endsWith(Files.getFileExtension(TEST_FILE_NAME)));
  113. }
  114. @Test
  115. public void testCancelAttachment() {
  116. final CreateIssuePage createIssuePage = JIRA.goTo(CreateIssuePage.class);
  117. createIssuePage.getProjectQuickSearch().clearQuery().query(PROJECT_NAME).getActiveSuggestion().click();
  118. createIssuePage.submit();
  119. final CreateIssueDetailsPage createIssueDetailsPage = pageBinder.bind(CreateIssueDetailsPage.class);
  120. createIssueDetailsPage.setSummary("Please add d&d to create issue page.");
  121. final DropZone dropZone = pageBinder.bind(CreateIssuePageDropZone.class);
  122. dropZone.dropImage(TEST_FILE_NAME);
  123. dropZone.getProgressBar(TEST_FILE_NAME).cancel();
  124. createIssueDetailsPage.submit();
  125. final List<String> fileNames = pageBinder.bind(AttachmentsSection.class).getFileNames();
  126. assertEquals("There are attachments", 0, fileNames.size());
  127. }
  128. }