1 package com.atlassian.webdriver.jira;
2
3 import com.atlassian.pageobjects.Defaults;
4 import com.atlassian.pageobjects.Page;
5 import com.atlassian.pageobjects.PageBinder;
6 import com.atlassian.pageobjects.ProductInstance;
7 import com.atlassian.pageobjects.TestedProduct;
8 import com.atlassian.pageobjects.TestedProductFactory;
9 import com.atlassian.pageobjects.binder.InjectPageBinder;
10 import com.atlassian.pageobjects.binder.PostInjectionProcessor;
11 import com.atlassian.pageobjects.binder.StandardModule;
12 import com.atlassian.pageobjects.component.Header;
13 import com.atlassian.pageobjects.elements.ElementModule;
14 import com.atlassian.pageobjects.elements.timeout.TimeoutsModule;
15 import com.atlassian.pageobjects.page.AdminHomePage;
16 import com.atlassian.pageobjects.page.HomePage;
17 import com.atlassian.pageobjects.page.LoginPage;
18 import com.atlassian.pageobjects.page.WebSudoPage;
19 import com.atlassian.webdriver.AtlassianWebDriverModule;
20 import com.atlassian.webdriver.jira.component.header.JiraHeader;
21 import com.atlassian.webdriver.jira.page.DashboardPage;
22 import com.atlassian.webdriver.jira.page.JiraAdminHomePage;
23 import com.atlassian.webdriver.jira.page.JiraLoginPage;
24 import com.atlassian.webdriver.jira.page.JiraWebSudoPage;
25 import com.atlassian.webdriver.pageobjects.DefaultWebDriverTester;
26 import com.atlassian.webdriver.pageobjects.WebDriverTester;
27 import com.google.inject.Binder;
28 import com.google.inject.Module;
29
30 import static com.google.common.base.Preconditions.checkNotNull;
31
32
33
34
35 @Defaults(instanceId = "jira", contextPath = "/jira", httpPort = 2990)
36 public class JiraTestedProduct implements TestedProduct<WebDriverTester>
37 {
38 private final WebDriverTester webDriverTester;
39 private final ProductInstance productInstance;
40 private final PageBinder pageBinder;
41
42 public JiraTestedProduct(TestedProductFactory.TesterFactory<WebDriverTester> testerFactory, ProductInstance productInstance)
43 {
44 checkNotNull(productInstance);
45 WebDriverTester tester = null;
46 if (testerFactory == null)
47 {
48 tester = new DefaultWebDriverTester();
49 }
50 else
51 {
52 tester = testerFactory.create();
53 }
54 this.webDriverTester = tester;
55 this.productInstance = productInstance;
56 this.pageBinder = new InjectPageBinder(productInstance, webDriverTester, new StandardModule(this), new AtlassianWebDriverModule(this),
57 new ElementModule(), new TimeoutsModule(),
58 new Module()
59 {
60 public void configure(Binder binder)
61 {
62 binder.bind(PostInjectionProcessor.class).to(ClickableLinkPostInjectionProcessor.class);
63 }
64 });
65
66 this.pageBinder.override(Header.class, JiraHeader.class);
67 this.pageBinder.override(HomePage.class, DashboardPage.class);
68 this.pageBinder.override(AdminHomePage.class, JiraAdminHomePage.class);
69 this.pageBinder.override(LoginPage.class, JiraLoginPage.class);
70 this.pageBinder.override(WebSudoPage.class, JiraWebSudoPage.class);
71 }
72
73 public DashboardPage gotoHomePage()
74 {
75 return pageBinder.navigateToAndBind(DashboardPage.class);
76 }
77
78 public JiraAdminHomePage gotoAdminHomePage()
79 {
80 return pageBinder.navigateToAndBind(JiraAdminHomePage.class);
81 }
82
83 public JiraLoginPage gotoLoginPage()
84 {
85 return pageBinder.navigateToAndBind(JiraLoginPage.class);
86 }
87
88 public <P extends Page> P visit(Class<P> pageClass, Object... args)
89 {
90 return pageBinder.navigateToAndBind(pageClass, args);
91 }
92
93 public PageBinder getPageBinder()
94 {
95 return pageBinder;
96 }
97
98 public ProductInstance getProductInstance()
99 {
100 return productInstance;
101 }
102
103 public WebDriverTester getTester()
104 {
105 return webDriverTester;
106 }
107 }