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.util.LinkedList; import java.util.List; import org.junit.Test; import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; import com.gargoylesoftware.htmlunit.Page; import com.gargoylesoftware.htmlunit.WebResponse; import com.gargoylesoftware.htmlunit.html.DomElement; import com.gargoylesoftware.htmlunit.html.HtmlForm; import com.gargoylesoftware.htmlunit.html.HtmlInput; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlRadioButtonInput; import com.gargoylesoftware.htmlunit.html.HtmlSelect; import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; import com.gargoylesoftware.htmlunit.html.HtmlTextInput; import org.junit.*; public class GenerellaKravTest extends PussTest { private void checkMenuAs(String username, String password, String groupName, String[] userPages, String expectedMenu) throws FailingHttpStatusCodeException, IOException { HtmlPage page = null; page = login(username, password, groupName); for (int i = 0; i < userPages.length; i++) { page = switchPage(page, userPages[i]); WebResponse response = page.getWebResponse(); String content = response.getContentAsString(); int menuStartIndex = content.indexOf("<div class='menu'>"); int menuEndIndex = content.indexOf("</div>") + "</div>".length(); Assert.assertFalse("Menu not available on page: " + page.getUrl().toString() + " for user: " + username, menuStartIndex < 0 || menuEndIndex < "</div>".length()); String menu = content.substring(menuStartIndex, menuEndIndex); Assert.assertEquals("The menu does not look right at page: " + userPages[i] + "for user: " + username, expectedMenu, menu); } } /** * Alla typer av inloggade användare har tillgång till menyn på samtliga * sidor som visas av systemet [SRS krav 6.1.1] */ @Test public void FT1_1_1() throws SQLException, MalformedURLException, IOException { final String group = "menygrupp"; final String leader = "victor"; final String member = "mrsmith"; final String expectedAdminMenu = "<div class='menu'><ul><li><a href='Administration'>Administration</a><ul><li><a href='Administration'>Users</a></li><li><a href='ProjectGroupAdmin'>Group</a></li></ul></li><li><a href='ProjectLeader'>Project Management</a><ul><li><a href='ProjectLeader'>Users</a></li><li><a href='ReportHandling'>Reports</a></li><li><a href='Statistics'>Statistics</a></li></ul></li><li><a href='LogIn'>Logout</a></li></ul></div>"; final String expectedLeaderMenu = "<div class='menu'><ul><li><a href='ProjectLeader'>Project Management</a><ul><li><a href='ProjectLeader'>Users</a></li><li><a href='ReportHandling'>Reports</a></li><li><a href='Statistics'>Statistics</a></li></ul></li><li><a href='TimeReporting?function=view'>Time Reports</a><ul><li><a href='TimeReporting?function=view'>View</a></li><li><a href='TimeReporting?function=update'>Update</a></li><li><a href='TimeReporting?function=new'>New</a></li><li><a href='TimeReporting?function=statistics'>Statistics</a></li></ul></li><li><a href='ChangePassword'>Change Password</a></li><li><a href='LogIn'>Logout</a></li></ul></div>"; final String expectedMemberMenu = "<div class='menu'><ul><li><a href='ProjectLeader'>Project members</a><li><a href='TimeReporting?function=view'>Time Reports</a><ul><li><a href='TimeReporting?function=view'>View</a></li><li><a href='TimeReporting?function=update'>Update</a></li><li><a href='TimeReporting?function=new'>New</a></li><li><a href='TimeReporting?function=statistics'>Statistics</a></li></ul></li><li><a href='ChangePassword'>Change Password</a></li><li><a href='LogIn'>Logout</a></li></ul></div>"; addGroup(group); addUser(leader, leader, 0); addUser(member, member, 0); addUserToGroup(leader, group, "Project Leader"); addUserToGroup(member, group, "t1"); String[] adminPages = { GROUP_ADMIN, ADMINISTRATION, PROJECT_LEADER, REPORT_HANDLING, STATISTICS }; String[] leaderPages = { PROJECT_LEADER, TIMEREPORTING, TIMEREPORTING_UPDATE, TIMEREPORTING_NEW, REPORT_HANDLING, CHANGE_PASSWORD }; String[] memberPages = { TIMEREPORTING, TIMEREPORTING_UPDATE, TIMEREPORTING_NEW, TIMEREPORTING_STATISTICS, CHANGE_PASSWORD }; checkMenuAs(ADMIN_USERNAME, ADMIN_PASSWORD, ADMIN_GROUP, adminPages, expectedAdminMenu); checkMenuAs(leader, leader, group, leaderPages, expectedLeaderMenu); checkMenuAs(member, member, group, memberPages, expectedMemberMenu); } /** * Menyn ska ge tillgång till de funktionaliteter som en användare besitter * [SRS krav 6.1.2] */ @Test public void FT1_1_2() { // FT1_1_1 testar detta. } /** * Menyns innehåll ska vara samma på varje sida som visas av systemet [SRS * krav 6.1.3] */ @Test public void FT1_1_3() { // FT1_1_1 testar detta. } /** * Försök ge inkorrekt input till systemet (felaktiga tecken, * SQL-injections) [SRS krav 6.1.4] */ @Test public void FT1_1_4() throws FailingHttpStatusCodeException, MalformedURLException, IOException, SQLException { HtmlPage page = login(ADMIN_USERNAME, ADMIN_PASSWORD, ADMIN_GROUP); page = switchPage(page, ADMINISTRATION); webClient.getPage(ADMINISTRATION_URL + "?deletename=" + ADMIN_USERNAME + "&deleteid=1"); ResultSet rs = getUserByName(ADMIN_USERNAME); assertTrue("The admin was deleted.", rs.next()); } /** * I en projektgupp får det finnas max två stycken projektledare och tre * typer av roller: t1, t2, och t3. [SRS krav 6.1.6] */ @Ignore public void FT1_1_5() throws SQLException, MalformedURLException, IOException { final String group = "endast"; final String leader1 = "maxtva"; final String leader2 = "maxen"; final String member = "member"; String groupNbr = Integer.toString(addGroup(group)); addUser(leader1, leader1, 0); addUser(leader2, leader2, 0); String memberNbr = Integer.toString(addUser(member, member, 0)); addUserToGroup(leader1, group, "Project Leader"); addUserToGroup(leader2, group, "Project Leader"); HtmlPage page = login(ADMIN_USERNAME, ADMIN_PASSWORD, ADMIN_GROUP); page = switchPage(page, GROUP_ADMIN); page = switchPage(page, GROUP_ADMIN + "?editid=" + groupNbr); HtmlForm form = page.getFormByName("input"); HtmlInput radio = form.getInputByValue(memberNbr); radio.setChecked(true); HtmlSelect roleList = form.getSelectByName("role"); roleList.setSelectedAttribute("Project Leader", true); HtmlSubmitInput button = form.getInputByValue("Add user"); System.in.read(); button.click(); } /** * Varje projekt har minst en och max två användare som besitter rollen som * projektledare [SRS krav 6.1.8] * * @throws SQLException */ @Ignore public void FT1_2_1() throws SQLException, FailingHttpStatusCodeException, MalformedURLException, IOException { final String group = "thegroup"; final String user1 = "andreas"; final String user2 = "greger"; final String user3 = "fusroad"; String groupNbr = Integer.toString(addGroup(group)); String memberNbr1 = Integer.toString(addUser(user1, user1, 0)); String memberNbr2 = Integer.toString(addUser(user2, user2, 0)); String memberNbr3 = Integer.toString(addUser(user3, user3, 0)); HtmlPage page = login(ADMIN_USERNAME, ADMIN_PASSWORD, ADMIN_GROUP); page = switchPage(page, GROUP_ADMIN); HtmlForm form = page.getFormByName("input"); HtmlTextInput projectName = form.getInputByName("projectname"); projectName.setValueAttribute("watyoudo"); HtmlSubmitInput button = form.getInputByValue("Add project"); page = button.click(); assertEquals("Could not start adding a new group.", GROUP_HANDLING_URL, page.getUrl().toString()); form = page.getFormByName("input"); HtmlInput radio = form.getInputByName("selectedradiouser"); radio = form.getInputByValue(memberNbr1); radio.setChecked(true); HtmlSelect roleList = form.getSelectByName("role"); roleList.setSelectedAttribute("Project Leader", true); button = form.getInputByValue("Add user"); button.click(); System.in.read(); } /** * Försök lägga till administratören i en projektgrupp [SRS krav 6.1.11] */ @Ignore public void FT1_3_1() { } /** * När man tar bort en projektledare bekräftar man bortagningen genom en * dialogruta, väljer man “Ja” tas projektledaren bort och man dirigeras * till en uppdaterad lista av användarna [SRS krav 6.1.14] */ @Ignore public void FT1_4_1() { } /** * När man tar bort en vanlig användare bekräftar man bortagningen genom en * dialogruta, väljer man “Ja” tas den vanliga användaren bort och man * dirigeras till en uppdaterad lista av användarna [SRS krav 6.1.14] */ @Ignore public void FT1_4_2() { } /** * När man tar bort en projektledare bekräftar man bortagningen genom en * dialogruta, väljer man “Nej” tas projektledaren inte bort och man * dirigeras till listan av användarna [SRS krav 6.1.14] */ @Ignore public void FT1_4_3() { } /** * När man tar bort en vanlig användare bekräftar man bortagningen genom en * dialogruta, väljer man “Nej” tas den vanliga användaren inte bort och man * dirigeras till listan av användarna [SRS krav 6.1.14] */ @Ignore public void FT1_4_4() { } @Ignore public void ST1_2_1() { } }