/auiplugin-tests/src/test/java/it/com/atlassian/aui/javascript/integrationTests/experimental/AUITableSortableTest.java

https://bitbucket.org/nurdiansyah/dbox-aui · Java · 157 lines · 131 code · 20 blank · 6 comment · 3 complexity · b26995b005c8ebad958e1ad28d5cf0be MD5 · raw file

  1. package it.com.atlassian.aui.javascript.integrationTests.experimental;
  2. import com.atlassian.pageobjects.elements.PageElement;
  3. import com.atlassian.pageobjects.elements.PageElementFinder;
  4. import it.com.atlassian.aui.javascript.AbstractAuiIntegrationTest;
  5. import it.com.atlassian.aui.javascript.pages.TableSortableTestPage;
  6. import org.junit.Before;
  7. import org.junit.Test;
  8. import org.openqa.selenium.By;
  9. import java.lang.Comparable;import java.lang.Integer;import java.lang.String;import java.util.ArrayList;
  10. import java.util.Arrays;
  11. import java.util.Collections;
  12. import java.util.List;
  13. import static org.junit.Assert.assertEquals;
  14. import static org.junit.Assert.assertTrue;
  15. /**
  16. * Written by Jaiden Ashmore 21/Jan/2013
  17. */
  18. public class AUITableSortableTest extends AbstractAuiIntegrationTest
  19. {
  20. private PageElementFinder elementFinder = null;
  21. private static final String ORIGINAL_TABLE_ID = "sortableTable";
  22. private static final int ISSUE_KEY_INDEX = 0;
  23. private static final int ISSUE_NAME_INDEX = 1;
  24. private static final int WATCHER_INDEX = 2;
  25. private static final String DELAYED_TABLE_ID = "delayedSortedTable";
  26. private static final int DELAYED_NAME_INDEX = 0;
  27. @Before
  28. public void openTestPage()
  29. {
  30. TableSortableTestPage tableSortableTestPage = product.visit(TableSortableTestPage.class);
  31. elementFinder = tableSortableTestPage.getElementFinder();
  32. }
  33. @Test
  34. public void issueKeySortAscendingOrderTest()
  35. {
  36. PageElement originalTable = getTable(ORIGINAL_TABLE_ID);
  37. clickHeader(originalTable, ISSUE_KEY_INDEX, 1);
  38. List<String> issueKeyContent = getColumnRowsContentAsString(originalTable, ISSUE_KEY_INDEX);
  39. assertEquals("Issue keys are not in the correct descending order", issueKeyContent, new ArrayList<String>(Arrays.asList("BAT-4", "BAT-11", "BATA-8", "BATA-14", "KAR-4", "KAR-87", "KAR-1123", "KAR-1133")));
  40. }
  41. @Test
  42. public void issueKeySortDescendingOrderTest()
  43. {
  44. PageElement originalTable = getTable(ORIGINAL_TABLE_ID);
  45. clickHeader(originalTable, ISSUE_KEY_INDEX, 2);
  46. List<String> issueKeyContent = getColumnRowsContentAsString(originalTable, ISSUE_KEY_INDEX);
  47. assertEquals("Issue keys are not in the correct descending order", issueKeyContent, new ArrayList<String>(Arrays.asList("KAR-1133", "KAR-1123", "KAR-87", "KAR-4", "BATA-14", "BATA-8", "BAT-11", "BAT-4")));
  48. }
  49. @Test
  50. public void textSortAscendingOrderTest()
  51. {
  52. PageElement originalTable = getTable(ORIGINAL_TABLE_ID);
  53. clickHeader(originalTable, ISSUE_NAME_INDEX, 1);
  54. List<String> issueNameContent = getColumnRowsContentAsString(originalTable, ISSUE_NAME_INDEX);
  55. assertTrue("String column in sortable table is not in the correct descending order", inAscendingOrder(issueNameContent));
  56. }
  57. @Test
  58. public void textSortDescendingOrderTest()
  59. {
  60. PageElement originalTable = getTable(ORIGINAL_TABLE_ID);
  61. clickHeader(originalTable, ISSUE_NAME_INDEX, 2);
  62. List<String> issueNameContent = getColumnRowsContentAsString(originalTable, ISSUE_NAME_INDEX);
  63. assertTrue("Text column in sortable table is not in the correct descending order", inDescendingOrder(issueNameContent));
  64. }
  65. @Test
  66. public void numberSortAscendingOrderTest()
  67. {
  68. PageElement originalTable = getTable(ORIGINAL_TABLE_ID);
  69. clickHeader(originalTable, WATCHER_INDEX, 1);
  70. List<Integer> watchers = getColumnRowsContentAsInteger(originalTable, WATCHER_INDEX);
  71. assertTrue("Number column (watchers) in sortable table is not in the correct ascending order", inAscendingOrder(watchers));
  72. }
  73. @Test
  74. public void numberSortDescendingOrderTest()
  75. {
  76. PageElement originalTable = getTable(ORIGINAL_TABLE_ID);
  77. clickHeader(originalTable, WATCHER_INDEX, 2);
  78. List<Integer> watchers = getColumnRowsContentAsInteger(originalTable, WATCHER_INDEX);
  79. assertTrue("Number column (watchers) in sortable table is not in the correct descending order", inDescendingOrder(watchers));
  80. }
  81. /**
  82. * Tests when a table is added after the page DOM and js has been executed and wants to be sorted
  83. */
  84. @Test
  85. public void sortableTableAddedViaJavascriptTest()
  86. {
  87. PageElement delayedTable = getTable(DELAYED_TABLE_ID);
  88. clickHeader(delayedTable, DELAYED_NAME_INDEX, 1);
  89. List<String> nameContent = getColumnRowsContentAsString(delayedTable, DELAYED_NAME_INDEX);
  90. assertEquals(nameContent, new ArrayList<String>(Arrays.asList("Ben", "Jaiden", "Timmy")));
  91. }
  92. private PageElement getTable(String tableId)
  93. {
  94. return elementFinder.find(By.id(tableId));
  95. }
  96. private void clickHeader(PageElement table, int headerIndex, int numberClicks)
  97. {
  98. PageElement header = table.findAll(By.tagName("th")).get(headerIndex);
  99. for (int click = 0; click < numberClicks; ++click)
  100. {
  101. header.click();
  102. }
  103. }
  104. private List<String> getColumnRowsContentAsString(PageElement table, int columnIndex)
  105. {
  106. List<String> columnRowsContent = new ArrayList<String>();
  107. PageElement body = table.find(By.tagName("tbody"));
  108. List<PageElement> rows = body.findAll(By.tagName("tr"));
  109. for (PageElement row : rows) {
  110. PageElement rowElement = (row.findAll(By.tagName("td")).get(columnIndex));
  111. columnRowsContent.add(rowElement.getText());
  112. }
  113. return columnRowsContent;
  114. }
  115. private List<Integer> getColumnRowsContentAsInteger(PageElement table, int columnIndex)
  116. {
  117. List<Integer> columnRowsContentAsInteger = new ArrayList<Integer>();
  118. for (String rowContent : getColumnRowsContentAsString(table, columnIndex))
  119. {
  120. columnRowsContentAsInteger.add(Integer.parseInt(rowContent));
  121. }
  122. return columnRowsContentAsInteger;
  123. }
  124. private <T extends Comparable<T>> boolean inAscendingOrder(List<T> list)
  125. {
  126. List<T> sortedList = new ArrayList<T>(list);
  127. Collections.sort(sortedList);
  128. return sortedList.equals(list);
  129. }
  130. private <T extends Comparable<T>> boolean inDescendingOrder(List<T> list)
  131. {
  132. List<T> sortedList = new ArrayList<T>(list);
  133. Collections.sort(sortedList);
  134. Collections.reverse(sortedList);
  135. return sortedList.equals(list);
  136. }
  137. }