From 4df2087774119bfb1858e1e4e58a07c429dafad5 Mon Sep 17 00:00:00 2001 From: David Grayson Date: Thu, 8 Mar 2018 10:33:07 -0500 Subject: [PATCH 1/4] initial commit --- ...rProjectsAndAccountsBlueSourceReports.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/test/java/com/bluesource/reports/SelectAllForProjectsAndAccountsBlueSourceReports.java diff --git a/src/test/java/com/bluesource/reports/SelectAllForProjectsAndAccountsBlueSourceReports.java b/src/test/java/com/bluesource/reports/SelectAllForProjectsAndAccountsBlueSourceReports.java new file mode 100644 index 0000000..f636a2d --- /dev/null +++ b/src/test/java/com/bluesource/reports/SelectAllForProjectsAndAccountsBlueSourceReports.java @@ -0,0 +1,44 @@ +package com.bluesource.reports; + +import com.orasi.bluesource.Accounts; +import com.orasi.bluesource.Header; +import com.orasi.bluesource.LoginPage; +import com.orasi.web.WebBaseTest; +import org.testng.ITestContext; +import org.testng.annotations.*; + +public class SelectAllForProjectsAndAccountsBlueSourceReports extends WebBaseTest { + @BeforeMethod + @Parameters({"runLocation", "browserUnderTest", "browserVersion", + "operatingSystem", "environment"}) + public void setup(@Optional String runLocation, String browserUnderTest, + String browserVersion, String operatingSystem, String environment) { + setApplicationUnderTest("BLUESOURCE"); + setBrowserUnderTest(browserUnderTest); + setBrowserVersion(browserVersion); + setOperatingSystem(operatingSystem); + setRunLocation(runLocation); + setEnvironment(environment); + setThreadDriver(true); + testStart(""); + } + + @AfterMethod + public void close(ITestContext testResults) { + endTest("TestAlert", testResults); + } + + @Test + public void selectAllForProjectsAndAccountsBlueSourceReports() { + //Test Variables + String strAccount = ""; + String strProject = ""; + + //Page Models + LoginPage loginPage = new LoginPage(getDriver()); + Header header = new Header(getDriver()); + Accounts accounts = new Accounts(getDriver()); + + + } +} \ No newline at end of file From 6ac069239e305ea4243297a3b44ea649d159a186 Mon Sep 17 00:00:00 2001 From: David Grayson Date: Thu, 8 Mar 2018 13:34:29 -0500 Subject: [PATCH 2/4] found bug, shelving until it's addressed --- .../AccountBurndownDataReportForm.java | 61 ++++++++++++++++++ .../java/com/orasi/bluesource/Header.java | 10 +++ .../java/com/orasi/bluesource/Report.java | 64 +++++++++++++++++++ .../com/orasi/bluesource/ReportingNavBar.java | 58 +++++++++++++++++ ...rProjectsAndAccountsBlueSourceReports.java | 63 ++++++++++++++++-- src/test/resources/sandbox.xml | 2 +- 6 files changed, 251 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/orasi/bluesource/AccountBurndownDataReportForm.java create mode 100644 src/main/java/com/orasi/bluesource/Report.java create mode 100644 src/main/java/com/orasi/bluesource/ReportingNavBar.java diff --git a/src/main/java/com/orasi/bluesource/AccountBurndownDataReportForm.java b/src/main/java/com/orasi/bluesource/AccountBurndownDataReportForm.java new file mode 100644 index 0000000..feaa3f6 --- /dev/null +++ b/src/main/java/com/orasi/bluesource/AccountBurndownDataReportForm.java @@ -0,0 +1,61 @@ +package com.orasi.bluesource; + +import com.orasi.web.OrasiDriver; +import com.orasi.web.PageLoaded; +import com.orasi.web.webelements.Element; +import com.orasi.web.webelements.Listbox; +import com.orasi.web.webelements.impl.internal.ElementFactory; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; + +import java.util.ArrayList; +import java.util.List; + +public class AccountBurndownDataReportForm { + private OrasiDriver driver = null; + + /**Page Elements**/ + @FindBy(xpath = "//div[contains(text(),'Select All')]") private Element elmSelectAll; + @FindBy(xpath = "//input[@name='commit']") private Element elmGenerateReport; + @FindBy(xpath = "//select[@id='account_select']") private Listbox lstAccountSelect; + + /** + * Constructor + **/ + public AccountBurndownDataReportForm(OrasiDriver driver) { + this.driver = driver; + ElementFactory.initElements(driver, this); + } + + /**Page Interactions**/ + + public boolean verifyFormLoaded(){ + return PageLoaded.isElementLoaded(this.getClass(),driver,elmGenerateReport,5) && + PageLoaded.isElementLoaded(this.getClass(),driver,lstAccountSelect,5) && + PageLoaded.isElementLoaded(this.getClass(),driver,elmSelectAll,5); + } + + public void clickGenerateReport(){ + if (canInteract(elmGenerateReport)) + elmGenerateReport.click(); + } + + public List getAllAccounts(){ + ArrayList allAccounts = new ArrayList<>(); + if (canInteract(lstAccountSelect)){ + for(WebElement elm:lstAccountSelect.getOptions()){ + allAccounts.add(elm.getText()); + } + } + return allAccounts; + } + + public void clickSelectAll(){ + if (canInteract(elmSelectAll)) + elmSelectAll.click(); + } + + private boolean canInteract(Element elm){ + return elm.syncEnabled(5) && elm.syncVisible(5); + } +} \ No newline at end of file diff --git a/src/main/java/com/orasi/bluesource/Header.java b/src/main/java/com/orasi/bluesource/Header.java index 3522250..05794ac 100644 --- a/src/main/java/com/orasi/bluesource/Header.java +++ b/src/main/java/com/orasi/bluesource/Header.java @@ -27,6 +27,16 @@ public Header(OrasiDriver driver){ /**Page Interactions**/ + /** + * This method navigates to the Reporting login page + * @author David Grayson + */ + public void navigateReporting(){ + MessageCenter messageCenter = new MessageCenter(driver); + messageCenter.closeMessageCenter(); + driver.get("http://10.238.243.127:8080/reporting/login"); + } + /** * This method navigates to Accounts page * @author Paul diff --git a/src/main/java/com/orasi/bluesource/Report.java b/src/main/java/com/orasi/bluesource/Report.java new file mode 100644 index 0000000..5021065 --- /dev/null +++ b/src/main/java/com/orasi/bluesource/Report.java @@ -0,0 +1,64 @@ +package com.orasi.bluesource; + +import com.orasi.utils.TestReporter; +import com.orasi.web.OrasiDriver; +import com.orasi.web.PageLoaded; +import com.orasi.web.webelements.Element; +import com.orasi.web.webelements.Webtable; +import com.orasi.web.webelements.impl.internal.ElementFactory; +import org.openqa.selenium.support.FindBy; + +import java.util.ArrayList; +import java.util.List; + +public class Report { + private OrasiDriver driver = null; + + /**Page Elements**/ + @FindBy(xpath = "//h3[@class='report-title']") private Element elmReportTitle; + @FindBy(xpath = "//table") private Webtable tblReport; + + /** + * Constructor + **/ + public Report(OrasiDriver driver) { + this.driver = driver; + ElementFactory.initElements(driver, this); + } + + /**Page Interactions**/ + + /** + * @author David Grayson + * @return {@link Boolean} Returns true if the report is loaded, false otherwise. + */ + public boolean verifyReportIsLoaded(){ + return PageLoaded.isElementLoaded(this.getClass(),driver,elmReportTitle,5) && + PageLoaded.isElementLoaded(this.getClass(),driver,tblReport,5); + } + + /** + * @author David Grayson + * @return {@link String} Returns the title of the report + */ + public String getTitle(){ + return elmReportTitle.getText(); + } + + public boolean doesColumnHaveEmptyValues(int column){ + for (int i = 1; i <= tblReport.getRowCount(); i++){ + if (tblReport.getCell(i,column).getText().isEmpty()) + return true; + } + return false; + } + + public List getAllAccounts(){ + ArrayList accounts = new ArrayList<>(); + for (int i = 1; i <= tblReport.getRowCount(); i++){ + if (!accounts.contains(tblReport.getCell(i,1).getText())) + accounts.add(tblReport.getCell(i,1).getText()); + } + return accounts; + } +} \ No newline at end of file diff --git a/src/main/java/com/orasi/bluesource/ReportingNavBar.java b/src/main/java/com/orasi/bluesource/ReportingNavBar.java new file mode 100644 index 0000000..d7e5dcc --- /dev/null +++ b/src/main/java/com/orasi/bluesource/ReportingNavBar.java @@ -0,0 +1,58 @@ +package com.orasi.bluesource; + +import com.orasi.web.OrasiDriver; +import com.orasi.web.webelements.Element; +import com.orasi.web.webelements.Link; +import com.orasi.web.webelements.impl.internal.ElementFactory; +import org.openqa.selenium.support.FindBy; + +public class ReportingNavBar { + private OrasiDriver driver = null; + + /**Page Elements**/ + @FindBy(xpath = "//h1[text()='Welcome']") private Element elmWelcome; + @FindBy(xpath = "//span[contains(text(),'Account Reports')]/..") private Link lnkAccountReportsDropdown; + @FindBy(xpath = "//span[contains(text(),'Account Reports')]/../..//a[contains(text(),'Burn Down Data')]") private Link lnkAccountReportsBurnDownData; + + /** + * Constructor + **/ + public ReportingNavBar(OrasiDriver driver) { + this.driver = driver; + ElementFactory.initElements(driver, this); + } + + /**Page Interactions**/ + + /** + * @author David Grayson + * @return {@link Boolean} Returns true if on the Reporting Home page. + */ + public boolean verifyHomePageIsDisplayed(){ + return elmWelcome.syncVisible(5,false); + } + + public void clickBurnDownData(){ + if (canInteract(lnkAccountReportsBurnDownData)) + lnkAccountReportsBurnDownData.click(); + } + + /** + * This method expands the Projects Reports drop down + * @author David Grayson + */ + public void clickAccountReports(){ + if (canInteract(lnkAccountReportsDropdown)) + lnkAccountReportsDropdown.click(); + } + + /** + * This method provides standard checks that an element can be interacted with + * @author David Grayson + * @param elm {@link Element} Element to check + * @return {@link Boolean} Returns true if the element is enabled and visible, false otherwise + */ + private boolean canInteract(Element elm){ + return elm.syncEnabled(5) && elm.syncVisible(5); + } +} \ No newline at end of file diff --git a/src/test/java/com/bluesource/reports/SelectAllForProjectsAndAccountsBlueSourceReports.java b/src/test/java/com/bluesource/reports/SelectAllForProjectsAndAccountsBlueSourceReports.java index f636a2d..e77847d 100644 --- a/src/test/java/com/bluesource/reports/SelectAllForProjectsAndAccountsBlueSourceReports.java +++ b/src/test/java/com/bluesource/reports/SelectAllForProjectsAndAccountsBlueSourceReports.java @@ -1,12 +1,15 @@ package com.bluesource.reports; -import com.orasi.bluesource.Accounts; -import com.orasi.bluesource.Header; -import com.orasi.bluesource.LoginPage; +import com.orasi.bluesource.*; +import com.orasi.utils.TestReporter; import com.orasi.web.WebBaseTest; import org.testng.ITestContext; import org.testng.annotations.*; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + public class SelectAllForProjectsAndAccountsBlueSourceReports extends WebBaseTest { @BeforeMethod @Parameters({"runLocation", "browserUnderTest", "browserVersion", @@ -31,14 +34,62 @@ public void close(ITestContext testResults) { @Test public void selectAllForProjectsAndAccountsBlueSourceReports() { //Test Variables - String strAccount = ""; - String strProject = ""; + SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); + String reportTitle = "Account Burndown Data Report: " + sdf.format(new Date()); //comparison title with current date + List allAccounts; //Page Models LoginPage loginPage = new LoginPage(getDriver()); Header header = new Header(getDriver()); - Accounts accounts = new Accounts(getDriver()); + ReportingNavBar reportingNavBar = new ReportingNavBar(getDriver()); + AccountBurndownDataReportForm form = new AccountBurndownDataReportForm(getDriver()); + Report report = new Report(getDriver()); + + header.navigateReporting(); + + TestReporter.assertTrue(loginPage.verifyPageIsLoaded(),"Verifying login page is loaded"); + + loginPage.AdminLogin(); + + TestReporter.assertTrue(reportingNavBar.verifyHomePageIsDisplayed(),"Verifying BlueSource Reporting home page is displayed"); + + reportingNavBar.clickAccountReports(); + + reportingNavBar.clickBurnDownData(); + + TestReporter.assertTrue(form.verifyFormLoaded(),"Verifying Account Burndown Data Report form loaded"); + allAccounts = form.getAllAccounts(); + + form.clickSelectAll(); + + form.clickGenerateReport(); + + TestReporter.assertTrue(report.verifyReportIsLoaded(),"Verifying report is loaded"); + + TestReporter.assertEquals(reportTitle,report.getTitle(),"Verifying report title"); + + TestReporter.assertFalse(report.doesColumnHaveEmptyValues(7),"Verifying 'Reported $' column has no empty values"); + + TestReporter.assertFalse(report.doesColumnHaveEmptyValues(6),"Verifying 'Budget $' column has no empty values"); + + TestReporter.assertTrue(checkAccounts(allAccounts,report.getAllAccounts()),"Verifying all accounts are displayed"); + } + private boolean checkAccounts(List reference, List displayed){ + if (reference.size() == displayed.size()){ + for (String s:reference){ + if (!displayed.contains(s)){ + TestReporter.log("displayed didn't contain: " + s); + return false; + } + } + return true; + } else { + TestReporter.log("The reference and displayed sizes are different"); + TestReporter.log("reference size = " + reference.size()); + TestReporter.log("displayed size = " + displayed.size()); + return false; + } } } \ No newline at end of file diff --git a/src/test/resources/sandbox.xml b/src/test/resources/sandbox.xml index 37bb0d4..86e397c 100644 --- a/src/test/resources/sandbox.xml +++ b/src/test/resources/sandbox.xml @@ -13,7 +13,7 @@ - + From 65729a4f5f58ed73258b28c2044fe4523c595533 Mon Sep 17 00:00:00 2001 From: David Grayson Date: Fri, 9 Mar 2018 12:11:50 -0500 Subject: [PATCH 3/4] test now passes, was not a bug --- .../java/com/orasi/bluesource/Accounts.java | 23 +++++++- .../java/com/orasi/bluesource/Report.java | 1 + ...rProjectsAndAccountsBlueSourceReports.java | 57 ++++++++++++++----- 3 files changed, 65 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/orasi/bluesource/Accounts.java b/src/main/java/com/orasi/bluesource/Accounts.java index e24471f..c741b94 100644 --- a/src/main/java/com/orasi/bluesource/Accounts.java +++ b/src/main/java/com/orasi/bluesource/Accounts.java @@ -55,6 +55,27 @@ public Accounts(OrasiDriver driver){ /**Page Interactions**/ + public boolean doesAccountHaveActiveProjects(String strAccount){ + clickAccountLink(strAccount); + + if (PageLoaded.isDomComplete(driver) && tblProjects.getRowCount() == 0 || tblProjects.findElements(By.xpath("//tr[@class='closed-project']")).size() == tblProjects.getRowCount()){ + driver.navigate().back(); + return false; + } else { + driver.navigate().back(); + PageLoaded.isDomComplete(driver); + return true; + } + } + + /** + * @author David Grayson + * @return {@link Boolean} Returns true if the Accounts table is loaded, false otherwise. + */ + public boolean verifyAccountsPageIsLoaded(){ + return PageLoaded.isElementLoaded(this.getClass(),driver,tblAccounts,5); + } + /* * Click on accounts tab * Make sure that the correct page loads @@ -155,7 +176,7 @@ public void sort_by_industry() public void clickAccountLink(String strAccount){ String xpathExpression; - xpathExpression = "//td//a[contains(text(),'" + strAccount + "')]"; + xpathExpression = "//td//a[text()='" + strAccount + "']"; Link lnkAccount = driver.findLink(By.xpath(xpathExpression)); lnkAccount.click(); } diff --git a/src/main/java/com/orasi/bluesource/Report.java b/src/main/java/com/orasi/bluesource/Report.java index 5021065..44bcb0d 100644 --- a/src/main/java/com/orasi/bluesource/Report.java +++ b/src/main/java/com/orasi/bluesource/Report.java @@ -59,6 +59,7 @@ public List getAllAccounts(){ if (!accounts.contains(tblReport.getCell(i,1).getText())) accounts.add(tblReport.getCell(i,1).getText()); } + TestReporter.log(accounts.toString()); return accounts; } } \ No newline at end of file diff --git a/src/test/java/com/bluesource/reports/SelectAllForProjectsAndAccountsBlueSourceReports.java b/src/test/java/com/bluesource/reports/SelectAllForProjectsAndAccountsBlueSourceReports.java index e77847d..6659549 100644 --- a/src/test/java/com/bluesource/reports/SelectAllForProjectsAndAccountsBlueSourceReports.java +++ b/src/test/java/com/bluesource/reports/SelectAllForProjectsAndAccountsBlueSourceReports.java @@ -7,6 +7,7 @@ import org.testng.annotations.*; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -23,7 +24,7 @@ public void setup(@Optional String runLocation, String browserUnderTest, setRunLocation(runLocation); setEnvironment(environment); setThreadDriver(true); - testStart(""); + testStart("Select all for Projects and Accounts BlueSource Reports"); } @AfterMethod @@ -37,6 +38,8 @@ public void selectAllForProjectsAndAccountsBlueSourceReports() { SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); String reportTitle = "Account Burndown Data Report: " + sdf.format(new Date()); //comparison title with current date List allAccounts; + int columnBudget = 6; + int columnReported = 7; //Page Models LoginPage loginPage = new LoginPage(getDriver()); @@ -69,27 +72,51 @@ public void selectAllForProjectsAndAccountsBlueSourceReports() { TestReporter.assertEquals(reportTitle,report.getTitle(),"Verifying report title"); - TestReporter.assertFalse(report.doesColumnHaveEmptyValues(7),"Verifying 'Reported $' column has no empty values"); + TestReporter.assertFalse(report.doesColumnHaveEmptyValues(columnReported),"Verifying 'Reported $' column has no empty values"); - TestReporter.assertFalse(report.doesColumnHaveEmptyValues(6),"Verifying 'Budget $' column has no empty values"); + TestReporter.assertFalse(report.doesColumnHaveEmptyValues(columnBudget),"Verifying 'Budget $' column has no empty values"); TestReporter.assertTrue(checkAccounts(allAccounts,report.getAllAccounts()),"Verifying all accounts are displayed"); } private boolean checkAccounts(List reference, List displayed){ - if (reference.size() == displayed.size()){ - for (String s:reference){ - if (!displayed.contains(s)){ - TestReporter.log("displayed didn't contain: " + s); - return false; - } + ArrayList missing = new ArrayList<>(); + for (String s:reference){ + if (!displayed.contains(s)){ + TestReporter.log("displayed didn't contain: " + s); + missing.add(s); } - return true; - } else { - TestReporter.log("The reference and displayed sizes are different"); - TestReporter.log("reference size = " + reference.size()); - TestReporter.log("displayed size = " + displayed.size()); - return false; } + return checkMissing(missing); + } + + private boolean checkMissing(ArrayList missing) { + TestReporter.logStep("Checking that missing Accounts don't have Projects"); + + Accounts accounts = goToBlueSource(); + + TestReporter.assertTrue(accounts.verifyAccountsPageIsLoaded(), "Verifying Accounts page is loaded"); + + for (String s:missing){ + TestReporter.assertTrue(accounts.verifyAccountLink(s),"Verifying account ["+s+"] link"); + + TestReporter.assertFalse(accounts.doesAccountHaveActiveProjects(s),"Verifying account ["+s+"] doesn't have projects"); + } + + return true; + } + + private Accounts goToBlueSource() { + getDriver().get("http://10.238.243.127/login"); + LoginPage loginPage = new LoginPage(getDriver()); + Header header = new Header(getDriver()); + + TestReporter.assertTrue(loginPage.verifyPageIsLoaded(),"Verifying BlueSource login page is loaded"); + + loginPage.AdminLogin(); + + header.navigateAccounts(); + + return new Accounts(getDriver()); } } \ No newline at end of file From 16d41a7e47bc1e8acefadc626373fe3f41b5aaf0 Mon Sep 17 00:00:00 2001 From: David Grayson Date: Fri, 9 Mar 2018 12:37:49 -0500 Subject: [PATCH 4/4] added comments/documentation and cleaned up the code a little bit --- .../AccountBurndownDataReportForm.java | 13 ++++ .../java/com/orasi/bluesource/Accounts.java | 8 ++- .../java/com/orasi/bluesource/Report.java | 9 +++ .../com/orasi/bluesource/ReportingNavBar.java | 6 +- ...rProjectsAndAccountsBlueSourceReports.java | 61 ++++++++++++------- 5 files changed, 73 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/orasi/bluesource/AccountBurndownDataReportForm.java b/src/main/java/com/orasi/bluesource/AccountBurndownDataReportForm.java index feaa3f6..bdf0ceb 100644 --- a/src/main/java/com/orasi/bluesource/AccountBurndownDataReportForm.java +++ b/src/main/java/com/orasi/bluesource/AccountBurndownDataReportForm.java @@ -29,6 +29,10 @@ public AccountBurndownDataReportForm(OrasiDriver driver) { /**Page Interactions**/ + /** + * @author David Grayson + * @return {@link Boolean} Returns true if key elements of the form are loaded + */ public boolean verifyFormLoaded(){ return PageLoaded.isElementLoaded(this.getClass(),driver,elmGenerateReport,5) && PageLoaded.isElementLoaded(this.getClass(),driver,lstAccountSelect,5) && @@ -40,6 +44,10 @@ public void clickGenerateReport(){ elmGenerateReport.click(); } + /** + * @author David Grayson + * @return {@link List} Returns a List of all the accounts that can be selected + */ public List getAllAccounts(){ ArrayList allAccounts = new ArrayList<>(); if (canInteract(lstAccountSelect)){ @@ -55,6 +63,11 @@ public void clickSelectAll(){ elmSelectAll.click(); } + /** + * @author David Grayson + * @param elm {@link Element} The element to check + * @return {@link Boolean} Returns true if it can be interacted with, throws an error otherwise + */ private boolean canInteract(Element elm){ return elm.syncEnabled(5) && elm.syncVisible(5); } diff --git a/src/main/java/com/orasi/bluesource/Accounts.java b/src/main/java/com/orasi/bluesource/Accounts.java index c741b94..ca417f8 100644 --- a/src/main/java/com/orasi/bluesource/Accounts.java +++ b/src/main/java/com/orasi/bluesource/Accounts.java @@ -55,15 +55,19 @@ public Accounts(OrasiDriver driver){ /**Page Interactions**/ + /** + * @author David Grayson + * @param strAccount {@link String} The name of the account to check + * @return {@link Boolean} Returns true if the Account passed has active projects, false otherwise + */ public boolean doesAccountHaveActiveProjects(String strAccount){ clickAccountLink(strAccount); - if (PageLoaded.isDomComplete(driver) && tblProjects.getRowCount() == 0 || tblProjects.findElements(By.xpath("//tr[@class='closed-project']")).size() == tblProjects.getRowCount()){ + if (tblProjects.getRowCount() == 0 || tblProjects.findElements(By.xpath("//tr[@class='closed-project']")).size() == tblProjects.getRowCount()){ driver.navigate().back(); return false; } else { driver.navigate().back(); - PageLoaded.isDomComplete(driver); return true; } } diff --git a/src/main/java/com/orasi/bluesource/Report.java b/src/main/java/com/orasi/bluesource/Report.java index 44bcb0d..c301fee 100644 --- a/src/main/java/com/orasi/bluesource/Report.java +++ b/src/main/java/com/orasi/bluesource/Report.java @@ -45,6 +45,11 @@ public String getTitle(){ return elmReportTitle.getText(); } + /** + * @author David Grayson + * @param column {@link Integer} the column to check + * @return {@link Boolean} Returns true if the specified column has empty values, false otherwise + */ public boolean doesColumnHaveEmptyValues(int column){ for (int i = 1; i <= tblReport.getRowCount(); i++){ if (tblReport.getCell(i,column).getText().isEmpty()) @@ -53,6 +58,10 @@ public boolean doesColumnHaveEmptyValues(int column){ return false; } + /** + * @author David Grayson + * @return {@link List} Returns a List of all Accounts in the report + */ public List getAllAccounts(){ ArrayList accounts = new ArrayList<>(); for (int i = 1; i <= tblReport.getRowCount(); i++){ diff --git a/src/main/java/com/orasi/bluesource/ReportingNavBar.java b/src/main/java/com/orasi/bluesource/ReportingNavBar.java index d7e5dcc..353444f 100644 --- a/src/main/java/com/orasi/bluesource/ReportingNavBar.java +++ b/src/main/java/com/orasi/bluesource/ReportingNavBar.java @@ -32,7 +32,11 @@ public boolean verifyHomePageIsDisplayed(){ return elmWelcome.syncVisible(5,false); } - public void clickBurnDownData(){ + /** + * This method clicks Burn Down Data link under the Account Reports drop down menu + * @author David Grayson + */ + public void clickAccountBurnDownData(){ if (canInteract(lnkAccountReportsBurnDownData)) lnkAccountReportsBurnDownData.click(); } diff --git a/src/test/java/com/bluesource/reports/SelectAllForProjectsAndAccountsBlueSourceReports.java b/src/test/java/com/bluesource/reports/SelectAllForProjectsAndAccountsBlueSourceReports.java index 6659549..e6b6390 100644 --- a/src/test/java/com/bluesource/reports/SelectAllForProjectsAndAccountsBlueSourceReports.java +++ b/src/test/java/com/bluesource/reports/SelectAllForProjectsAndAccountsBlueSourceReports.java @@ -3,6 +3,7 @@ import com.orasi.bluesource.*; import com.orasi.utils.TestReporter; import com.orasi.web.WebBaseTest; +import org.bouncycastle.jce.provider.symmetric.TEA; import org.testng.ITestContext; import org.testng.annotations.*; @@ -48,24 +49,31 @@ public void selectAllForProjectsAndAccountsBlueSourceReports() { AccountBurndownDataReportForm form = new AccountBurndownDataReportForm(getDriver()); Report report = new Report(getDriver()); + TestReporter.logStep("Navigating to BlueSource Reporting"); header.navigateReporting(); TestReporter.assertTrue(loginPage.verifyPageIsLoaded(),"Verifying login page is loaded"); + TestReporter.logStep("Logging in as Admin"); loginPage.AdminLogin(); TestReporter.assertTrue(reportingNavBar.verifyHomePageIsDisplayed(),"Verifying BlueSource Reporting home page is displayed"); + TestReporter.logStep("Clicking 'Account Reports'"); reportingNavBar.clickAccountReports(); - reportingNavBar.clickBurnDownData(); + TestReporter.logStep("Clicking 'Burn Down Data'"); + reportingNavBar.clickAccountBurnDownData(); TestReporter.assertTrue(form.verifyFormLoaded(),"Verifying Account Burndown Data Report form loaded"); + TestReporter.logStep("Storing all selectable accounts"); allAccounts = form.getAllAccounts(); + TestReporter.logStep("Clicking Select All"); form.clickSelectAll(); + TestReporter.logStep("Clicking Generate Report"); form.clickGenerateReport(); TestReporter.assertTrue(report.verifyReportIsLoaded(),"Verifying report is loaded"); @@ -79,44 +87,55 @@ public void selectAllForProjectsAndAccountsBlueSourceReports() { TestReporter.assertTrue(checkAccounts(allAccounts,report.getAllAccounts()),"Verifying all accounts are displayed"); } - private boolean checkAccounts(List reference, List displayed){ + /** + * @author David Grayson + * @param reference {@link List} The selectable accounts + * @param displayed {@link List} The account displayed in the report + * @return {@link Boolean} Returns true if no accounts were missing from the report + * OR if all the missing accounts don't have active projects + */ + private boolean checkAccounts(List reference, List displayed) { ArrayList missing = new ArrayList<>(); - for (String s:reference){ - if (!displayed.contains(s)){ + for (String s : reference) { + if (!displayed.contains(s)) { TestReporter.log("displayed didn't contain: " + s); missing.add(s); } } - return checkMissing(missing); + return missing.size() <= 0 || checkMissing(missing); } + /** + * @author David Grayson + * @param missing {@link ArrayList} the Accounts that were selectable but not displayed in the burn down report + * @return {@link Boolean} Returns true if the missing accounts don't have active projects + */ private boolean checkMissing(ArrayList missing) { TestReporter.logStep("Checking that missing Accounts don't have Projects"); - Accounts accounts = goToBlueSource(); - - TestReporter.assertTrue(accounts.verifyAccountsPageIsLoaded(), "Verifying Accounts page is loaded"); - - for (String s:missing){ - TestReporter.assertTrue(accounts.verifyAccountLink(s),"Verifying account ["+s+"] link"); - - TestReporter.assertFalse(accounts.doesAccountHaveActiveProjects(s),"Verifying account ["+s+"] doesn't have projects"); - } - - return true; - } - - private Accounts goToBlueSource() { - getDriver().get("http://10.238.243.127/login"); + //Page Models LoginPage loginPage = new LoginPage(getDriver()); Header header = new Header(getDriver()); + Accounts accounts = new Accounts(getDriver()); + + TestReporter.logStep("Navigating to BlueSource"); + getDriver().get("http://10.238.243.127/login"); TestReporter.assertTrue(loginPage.verifyPageIsLoaded(),"Verifying BlueSource login page is loaded"); + TestReporter.logStep("Logging in as Admin"); loginPage.AdminLogin(); + TestReporter.logStep("Navigating to Accounts"); header.navigateAccounts(); - return new Accounts(getDriver()); + TestReporter.assertTrue(accounts.verifyAccountsPageIsLoaded(), "Verifying Accounts page is loaded"); + + for (String s:missing){ + TestReporter.assertTrue(accounts.verifyAccountLink(s),"Verifying account ["+s+"] link"); + TestReporter.assertFalse(accounts.doesAccountHaveActiveProjects(s),"Verifying account ["+s+"] doesn't have projects"); + } + + return true; } } \ No newline at end of file