package test; import static org.junit.Assert.*; import java.io.IOException; import java.net.MalformedURLException; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.List; import org.junit.AfterClass; import org.junit.Ignore; import org.junit.Test; import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; import com.gargoylesoftware.htmlunit.WebAssert; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.DomElement; import com.gargoylesoftware.htmlunit.html.HtmlAnchor; import com.gargoylesoftware.htmlunit.html.HtmlForm; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlPasswordInput; import com.gargoylesoftware.htmlunit.html.HtmlRadioButtonInput; import com.gargoylesoftware.htmlunit.html.HtmlSelect; import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; import com.gargoylesoftware.htmlunit.html.HtmlTextInput; public class TidrapporteringTest extends PussTest{ private HtmlPage addStandardTimeReport(HtmlPage page, String week) throws IOException{ HtmlPage newPage = switchPage(page, "TimeReporting?function=new"); HtmlForm form = newPage.getFormByName("input"); HtmlSubmitInput button = form.getInputByValue("Submit"); HtmlTextInput weekField = form.getInputByName("week"); weekField.setValueAttribute(week); page = button.click(); if (newPage.toString().equals(page.toString())){ return newPage; } form = page.getForms().get(0); HtmlSubmitInput reportButton = form.getInputByValue("Save"); HtmlTextInput inputField = form.getInputByName("SVVR_U"); inputField.setValueAttribute("30"); page = reportButton.click(); return page; } private HtmlPage addTimeReport(HtmlPage page, String week, String input) throws IOException{ HtmlPage newPage = switchPage(page, "TimeReporting?function=new"); HtmlForm form = newPage.getFormByName("input"); HtmlSubmitInput button = form.getInputByValue("Submit"); HtmlTextInput weekField = form.getInputByName("week"); weekField.setValueAttribute(week); page = button.click(); form = page.getForms().get(0); HtmlSubmitInput reportButton = form.getInputByValue("Save"); HtmlTextInput inputField = form.getInputByName("SVVR_U"); inputField.setValueAttribute(input); page = reportButton.click(); return page; } private void newUserAddTimeReport(String name, String password, String groupName, Boolean newGroup, String role) throws SQLException, FailingHttpStatusCodeException, MalformedURLException, IOException{ int groupId; HtmlPage page; if (newGroup){ groupId = addGroup(groupName); } else{ ResultSet rs = sendSQLQuery("select id from groups where name = '" + groupName + "';"); rs.next(); groupId = rs.getInt(1); } int userId =addUser(name,password, 0); assignGroup(userId, groupId, role); page = login(name, password, groupName); page = addStandardTimeReport(page, "5"); switchPage(page, "LogIn"); } private int addMemberA(String groupName, Boolean newGroup) throws SQLException{ int groupId; if (newGroup){ groupId = addGroup(groupName); } else{ ResultSet rs = sendSQLQuery("select id from groups where name = '" + groupName + "';"); rs.next(); groupId = rs.getInt(1); } int userId =addUser("kallekal","kallekal", 0); int userGroupId = assignGroup(userId, groupId, "t1"); return userGroupId; } private void addMember(String name, String password, String groupName, Boolean newGroup) throws SQLException{ int groupId; if (newGroup){ groupId = addGroup(groupName); } else{ ResultSet rs = sendSQLQuery("select id from groups where name = '" + groupName + "';"); rs.next(); groupId = rs.getInt(1); } int userId =addUser(name,password, 0); assignGroup(userId, groupId, "t1"); } private void addLeaderA(String groupName, Boolean newGroup) throws SQLException{ int groupId; if (newGroup){ groupId = addGroup(groupName); } else{ ResultSet rs = sendSQLQuery("select id from groups where name = '" + groupName + "';"); rs.next(); groupId = rs.getInt(1); } int userId =addUser("leaderal","leaderal", 0); assignGroup(userId, groupId, "Project Leader"); } private HtmlPage loginMemberA() throws FailingHttpStatusCodeException, MalformedURLException, IOException{ return login("kallekal", "kallekal", "Projekt1"); } private HtmlPage loginLeaderA() throws FailingHttpStatusCodeException, MalformedURLException, IOException{ return login("leaderal", "leaderal", "Projekt1"); } private void logOut(HtmlPage page) throws IOException{ switchPage(page, "LogIn"); } @Test public void FT3_1_1() throws FailingHttpStatusCodeException, MalformedURLException, IOException, SQLException{ //Projektmedlem lyckas skapa en egen osignerad tidrapport //MySQL skapa projektmedlem A: kallekal String name = "kallekal"; String password = "kallekal"; String groupName = "Project1"; //int groupId = 302; int userId =addUser(name,password, 0); int groupId = addGroup(groupName); int userGroupId = assignGroup(userId, groupId, "t1"); //Projektmedlem A loggar in HtmlPage page =null; HtmlPage page2 = login(name, password, groupName); HtmlAnchor tidrapportpage = page2.getAnchorByHref("TimeReporting?function=view"); final HtmlPage page3 = tidrapportpage.click(); assertEquals("A could not access Tidrapportering", TIMEREPORTING_URL, page3.getUrl().toString()); //Starttillstånd färdigt //Testfall inleds //////////////// //////////////// final HtmlPage page4 = page3.getAnchorByHref("TimeReporting?function=new").click(); final HtmlForm form2 = page4.getFormByName("input"); final HtmlSubmitInput button2 = form2.getInputByValue("Submit"); final HtmlTextInput weekField = form2.getInputByName("week"); weekField.setValueAttribute("5"); final HtmlPage page5 = button2.click(); final HtmlForm form3 = page5.getForms().get(0); final HtmlSubmitInput button3 = form3.getInputByValue("Save"); button3.click(); //Mysql kod kolla att tidrapport skapad //Mysql kolla att tidrapport är osignerad ResultSet rs= signedReports(userGroupId); rs.next(); assertTrue("Tidrapport ej skapad", rs.getInt(1)== 0); /////////////////// //////////////////// //////////////////// //Testfall avslutad // reports = sendSQLQuery("Select * from reports where user_group_id = " + userGroupId); // while(reports.next()){ // sendSQLQuery("Delete from report_times where report_id = " + reports.getInt("id")); // } // sendSQLQuery("Delete from reports where user_group_id = " + userGroupId); // // deleteUser("kallekal"); webClient.closeAllWindows(); } @Test public void FT3_1_2() throws FailingHttpStatusCodeException, MalformedURLException, IOException, SQLException{ //Projektmedlem lyckas uppdatera sin egen osignerade tidrapport //MySQL skapa projektmedlem A: kallekal clearDatabase(); String name = "kallekal"; String password = "kallekal"; String groupName = "Projekt1"; int userId =addUser(name,password, 0); int groupId = addGroup(groupName); int userGroupId = assignGroup(userId, groupId, "t1"); //Projektmedlem A loggar in HtmlPage page =null; HtmlPage page2 = login(name, password, groupName); HtmlPage newTid = switchPage(page2, "TimeReporting?function=new"); HtmlForm weekForm = newTid.getFormByName("input"); HtmlSubmitInput button2 = weekForm.getInputByValue("Submit"); HtmlTextInput weekField = weekForm.getInputByName("week"); weekField.setValueAttribute("5"); HtmlPage newRapport = button2.click(); //Redigera tidrapport HtmlForm editForm = newRapport.getForms().get(0); HtmlSubmitInput reportButton = editForm.getInputByValue("Save"); HtmlTextInput inputField = editForm.getInputByName("SVVR_U"); inputField.setValueAttribute("30"); reportButton.click(); ResultSet rs = sendSQLQuery("select id from reports where user_group_id = " + userGroupId + ";"); rs.next(); int reportId = rs.getInt(1); ResultSet rs2 = sendSQLQuery("select count(*) from report_times where SVVR_U=30 and report_id = " + reportId + ";"); rs2.next(); assertTrue("Tidrapport ej ändrad", rs2.getInt(1)== 1); webClient.closeAllWindows(); } @Test public void FT3_1_3() throws FailingHttpStatusCodeException, MalformedURLException, IOException, SQLException{ //Projektmedlem lyckas ta bort sin egna tidrappport //MySQL skapa projektmedlem A: kallekal //MySQL skapa projektmedlem A: kallekal clearDatabase(); String name = "kallekal"; String password = "kallekal"; String groupName = "Projekt1"; int userId =addUser(name,password, 0); int groupId = addGroup(groupName); int userGroupId = assignGroup(userId, groupId, "t1"); //Projektmedlem A loggar in HtmlPage page =null; HtmlPage page2 = login(name, password, groupName); HtmlPage newTid = switchPage(page2, "TimeReporting?function=new"); HtmlForm weekForm = newTid.getFormByName("input"); HtmlSubmitInput button2 = weekForm.getInputByValue("Submit"); HtmlTextInput weekField = weekForm.getInputByName("week"); weekField.setValueAttribute("5"); HtmlPage newRapport = button2.click(); //Redigera tidrapport HtmlForm editForm = newRapport.getForms().get(0); HtmlSubmitInput reportButton = editForm.getInputByValue("Save"); HtmlTextInput inputField = editForm.getInputByName("SVVR_U"); inputField.setValueAttribute("30"); HtmlPage page3 = reportButton.click(); HtmlPage updatePage = switchPage(page3, "TimeReporting?function=update"); HtmlForm updateForm = updatePage.getFormByName("input"); //List<HtmlRadioButtonInput> radioList = updateForm.getRadioButtonsByName("reportID"); List<DomElement> radioList = updatePage.getElementsByIdAndOrName("reportID"); HtmlRadioButtonInput radio = null; DomElement dom = radioList.get(0); radio = (HtmlRadioButtonInput) dom; radio.click(); System.out.println(updatePage.asXml());//TODO remove HtmlSubmitInput deleteButton = updateForm.getInputByValue("Delete"); ResultSet rs = sendSQLQuery("select count(*) from reports where user_group_id = " + userGroupId + ";"); rs.next(); assertTrue("blabla", rs.getInt(1) != 0 ); deleteButton.click(); System.out.println(updatePage.asXml()); //TODO remove ResultSet rs2 = sendSQLQuery("select count(*) from reports where user_group_id = " + userGroupId + ";"); rs2.next(); assertTrue("blabla", rs2.getInt(1) == 0 ); // ResultSet rs = sendSQLQuery("select id from reports where user_group_id = " + userGroupId + ";"); // rs.next(); webClient.closeAllWindows(); } @Test public void FT3_1_4() throws FailingHttpStatusCodeException, MalformedURLException, IOException, SQLException{ //En projektmedlem kan endast se sina egna tidrapporter clearDatabase(); //Skapa Projektmedlem A kallekal i ny projekt "Projekt1" String name = "kallekal"; String password = "kallekal"; String groupName = "Projekt1"; int userId =addUser(name,password, 0); int groupId = addGroup(groupName); int userGroupId = assignGroup(userId, groupId, "t1"); newUserAddTimeReport("sallesal", "sallesal", "Projekt2", true, "t1"); newUserAddTimeReport("talletal", "talletal", "Projekt1", false, "t1"); //Projektmedlem A loggar in HtmlPage page =null; HtmlForm form = null; page = login(name, password, groupName); page = addStandardTimeReport(page, "4"); page = addStandardTimeReport(page, "5"); page = addStandardTimeReport(page, "6"); page = addStandardTimeReport(page, "7"); //Kolla vilka rapporter kallekal kan se page = switchPage(page, "TimeReporting?function=view"); form = page.getFormByName("input"); List<DomElement> radioList = page.getElementsByIdAndOrName("reportID"); int size = radioList.size(); assertTrue("A kan inte se endast sina egna tidrapporter", size == 4); webClient.closeAllWindows(); } //MANUELLT @Ignore public void FT3_1_5() throws FailingHttpStatusCodeException, MalformedURLException, IOException, SQLException{ //Projektmedlem A försöker ta bort en av sina signerade tidrapporter addMemberA("Projekt1", true); addLeaderA("Projekt1", false); HtmlPage page = loginMemberA(); page = addStandardTimeReport(page,"4"); switchPage(page, "TimeReporting?function=update"); //TODO remove WebAssert.assertFormPresent(page, "input"); //TODO remove logOut(page); page = loginLeaderA(); page = switchPage(page, "ReportHandling"); HtmlForm form = page.getFormByName("input"); List<DomElement> radioList = page.getElementsByIdAndOrName("reportID"); HtmlRadioButtonInput radio; DomElement dom = radioList.get(0); radio = (HtmlRadioButtonInput) dom; radio.click(); System.out.print(page.asText()); //TODO remove HtmlSubmitInput button = form.getInputByValue("View"); System.out.println(page.toString()); page = button.click(); System.out.print(page.asText()); //TODO remove System.out.println(page.toString()); WebAssert.assertFormPresent(page, "input"); //TODO remove form = page.getFormByName("input"); System.out.print(page.asXml()); //TODO remove System.out.print(page.asText()); //TODO remove HtmlSubmitInput button2 = form.getInputByValue("Sign"); page = button2.click(); logOut(page); page = loginMemberA(); page = switchPage(page, "TimeReporting?function=update"); WebAssert.assertFormNotPresent(page, "input"); } //MANUELLT @Ignore public void FT3_1_6() throws FailingHttpStatusCodeException, MalformedURLException, IOException, SQLException{ //Projektmedlem försöker redigera en signerad tidrapport addMemberA("Projekt1", true); addLeaderA("Projekt1", false); HtmlPage page = loginMemberA(); page = addStandardTimeReport(page,"4"); switchPage(page, "TimeReporting?function=update"); //TODO remove WebAssert.assertFormPresent(page, "input"); //TODO remove logOut(page); page = loginLeaderA(); page = switchPage(page, "ReportHandling"); HtmlForm form = page.getFormByName("input"); List<DomElement> radioList = page.getElementsByIdAndOrName("reportID"); HtmlRadioButtonInput radio; DomElement dom = radioList.get(0); radio = (HtmlRadioButtonInput) dom; radio.click(); HtmlSubmitInput button = form.getInputByValue("View"); page = button.click(); System.out.println(page.toString()); //TODO remove WebAssert.assertFormPresent(page, "input"); //TODO remove form = page.getFormByName("input"); HtmlSubmitInput button2 = form.getInputByValue("Sign"); page = button2.click(); logOut(page); page = loginMemberA(); page = switchPage(page, "TimeReporting?function=update"); WebAssert.assertFormNotPresent(page, "input"); } @Test public void FT3_2_1() throws FailingHttpStatusCodeException, MalformedURLException, IOException, SQLException{ //Projektledaren har tillgång till samtliga projektmedlemmars tidrapporter i sin projekt- //grupp addLeaderA("Projekt1", true); addMember("asdfgh", "asdfgh", "Projekt1", false); addMember("qwerty", "qwerty", "Projekt1", false); addMember("zxcvbn", "zxcvbn", "Projekt1", false); HtmlPage page = login("qwerty", "qwerty", "Projekt1"); page = addStandardTimeReport(page,"4"); logOut(page); page = login("asdfgh", "asdfgh", "Projekt1"); page = addStandardTimeReport(page,"4"); logOut(page); page = login("zxcvbn", "zxcvbn", "Projekt1"); page = addStandardTimeReport(page,"4"); logOut(page); page = loginLeaderA(); page = switchPage(page, "ReportHandling"); List<DomElement> radioList = page.getElementsByIdAndOrName("reportID"); int size = radioList.size(); assertTrue("A kan inte se alla tidrapporter", size==3); } //MANUELLT @Ignore public void FT3_2_2() throws FailingHttpStatusCodeException, MalformedURLException, IOException, SQLException{ //Projektledaren lyckas godkänna en ej tidigare signerad tidrapport från en medlem i sin //projektgrupp int userGroupId = addMemberA("Projekt1", true); addLeaderA("Projekt1", false); HtmlPage page = loginMemberA(); page = addStandardTimeReport(page,"4"); switchPage(page, "TimeReporting?function=update"); //TODO remove WebAssert.assertFormPresent(page, "input"); //TODO remove logOut(page); page = loginLeaderA(); page = switchPage(page, "ReportHandling"); HtmlForm form = page.getFormByName("input"); List<DomElement> radioList = page.getElementsByIdAndOrName("reportID"); HtmlRadioButtonInput radio; DomElement dom = radioList.get(0); radio = (HtmlRadioButtonInput) dom; radio.click(); HtmlSubmitInput button = form.getInputByValue("View"); page = button.click(); System.out.println(page.toString()); //TODO remove WebAssert.assertFormPresent(page, "input"); //TODO remove form = page.getFormByName("input"); HtmlSubmitInput button2 = form.getInputByValue("Sign"); page = button2.click(); ResultSet rs = sendSQLQuery("select count(*) from reports where user_group_id = " + userGroupId + ";"); rs.next(); assertTrue("ble", rs.getInt(1)==0); } ////////////////////////// //FT3.2.3-13 GÖRS MANUELLT ////////////////////////// //FT3.3.1 MANUELLT @Test public void FT3_3_2() throws FailingHttpStatusCodeException, MalformedURLException, IOException, SQLException{ //Ogiltig tidinformation int userGroupId = addMemberA("Projekt1", true); HtmlPage page = loginMemberA(); page = addTimeReport(page, "4", "123456"); page = addTimeReport(page, "5", "123:5"); page = addTimeReport(page, "5", "/"); ResultSet rs = sendSQLQuery("select count(*) from reports where user_group_id = " + userGroupId + ";"); rs.next(); assertTrue("SDs", rs.getInt(1)==0); } @Test public void FT3_3_3() throws FailingHttpStatusCodeException, MalformedURLException, IOException, SQLException{ //Giltig tidinformation int userGroupId = addMemberA("Projekt1", true); HtmlPage page = loginMemberA(); page = addTimeReport(page, "4", "01239"); page = addTimeReport(page, "5", "0"); ResultSet rs = sendSQLQuery("select count(*) from reports where user_group_id = " + userGroupId + ";"); rs.next(); assertTrue("SDs", rs.getInt(1)==2); } @Test public void FT3_3_4() throws FailingHttpStatusCodeException, MalformedURLException, IOException, SQLException{ //Ogiltig vecka int userGroupId = addMemberA("Projekt1", true); HtmlPage page = loginMemberA(); page = addStandardTimeReport(page, "123"); page = addStandardTimeReport(page, "1:" ); page = addStandardTimeReport(page, "/"); ResultSet rs = sendSQLQuery("select count(*) from reports where user_group_id = " + userGroupId + ";"); rs.next(); assertTrue("SDs", rs.getInt(1)==0); } @Test public void FT3_3_5() throws FailingHttpStatusCodeException, MalformedURLException, IOException, SQLException{ } @Test public void FT3_3_6() throws FailingHttpStatusCodeException, MalformedURLException, IOException, SQLException{ } @Test public void FT3_3_7() throws FailingHttpStatusCodeException, MalformedURLException, IOException, SQLException{ } @Test public void FT3_3_8() throws FailingHttpStatusCodeException, MalformedURLException, IOException, SQLException{ } @Test public void FT3_3_9() throws FailingHttpStatusCodeException, MalformedURLException, IOException, SQLException{ } }