View Javadoc
1   package it.com.atlassian.activeobjects;
2   
3   import com.atlassian.activeobjects.pageobjects.ActiveObjectsAdminPage;
4   import com.atlassian.activeobjects.pageobjects.ActiveObjectsBackupPage;
5   import com.atlassian.activeobjects.pageobjects.ActiveObjectsDeleteDatabasePage;
6   import com.atlassian.activeobjects.pageobjects.AoTable;
7   import com.atlassian.pageobjects.Page;
8   import com.atlassian.pageobjects.TestedProduct;
9   import com.atlassian.pageobjects.TestedProductFactory;
10  import com.atlassian.pageobjects.Tester;
11  import com.atlassian.pageobjects.page.HomePage;
12  import com.atlassian.pageobjects.page.LoginPage;
13  import com.atlassian.webdriver.refapp.RefappTestedProduct;
14  import com.google.common.base.Predicate;
15  import com.google.common.collect.Collections2;
16  import com.google.common.collect.Lists;
17  import org.junit.Before;
18  import org.junit.Test;
19  
20  import java.util.List;
21  
22  import static com.atlassian.activeobjects.pageobjects.AoTable.table;
23  import static com.google.common.collect.Lists.newArrayList;
24  import static org.hamcrest.CoreMatchers.containsString;
25  import static org.junit.Assert.assertEquals;
26  import static org.junit.Assert.assertThat;
27  import static org.junit.Assert.assertTrue;
28  
29  public final class ActiveObjectsAdminFunctionalTest {
30      private static final String TEST_PLUGIN_NAME = "ActiveObjects Plugin - Test Plugin";
31      private static final Predicate<AoTable> MATCHES_TEST_PLUGIN = table -> TEST_PLUGIN_NAME.equals(table.plugin);
32  
33      private TestedProduct<? extends Tester> product;
34  
35      @Before
36      public final void setUp() {
37          product = TestedProductFactory.create(System.getProperty("tested.app", RefappTestedProduct.class.getName()));
38          //delete the database before starting the test
39          loginAsSysAdmin(product, ActiveObjectsDeleteDatabasePage.class);
40      }
41  
42      @Test
43      public final void testAdmin() {
44          final ActiveObjectsAdminPage admin = loginAsSysAdmin(product, ActiveObjectsAdminPage.class);
45          assertThat(admin.getTitle(), containsString("Plugin Data Storage"));
46  
47          // this will create the data
48          product.visit(ActiveObjectsBackupPage.class);
49  
50          assertTables(
51                  newArrayList(
52                          table(TEST_PLUGIN_NAME, "AO_0F732C_LONG_NAME_TO_AUTHOR", "9"),
53                          table(TEST_PLUGIN_NAME, "AO_0F732C_AUTHORSHIP", "10"),
54                          table(TEST_PLUGIN_NAME, "AO_0F732C_BOOK", "3")),
55                  Lists.newArrayList(Collections2.filter(product.visit(ActiveObjectsAdminPage.class).getTables(), MATCHES_TEST_PLUGIN)));
56      }
57  
58      private void assertTables(List<AoTable> expected, List<AoTable> actual) {
59          assertEquals(expected.size(), actual.size());
60          for (AoTable e : expected) {
61              assertTrue("Didn't find " + e + " in " + actual, actual.contains(e));
62          }
63      }
64  
65      private <P extends Page> P loginAsSysAdmin(TestedProduct<? extends Tester> product, Class<P> nextPage) {
66          if (!product.visit(HomePage.class).getHeader().isLoggedIn()) {
67              return product.visit(LoginPage.class).loginAsSysAdmin(nextPage);
68          } else {
69              return product.visit(nextPage);
70          }
71      }
72  }