package org.appfuse.webapp;
import net.sourceforge.jwebunit.html.Table;
import net.sourceforge.jwebunit.html.Row;
import net.sourceforge.jwebunit.html.Cell;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.ResourceBundle;
import static net.sourceforge.jwebunit.junit.JWebUnit.*;
public class UserWebTest {
private ResourceBundle messages;
@Before
public void setUp() {
setScriptingEnabled(false);
getTestContext().setBaseUrl(
"http://" + System.getProperty("cargo.host") + ":" + System.getProperty("cargo.port"));
getTestContext().setResourceBundleName("messages");
messages = ResourceBundle.getBundle("messages");
}
@Test
public void welcomePage() {
beginAt("/");
assertTitleKeyMatches("index.title");
}
@Before
public void addUser() {
beginAt("/userform");
assertTitleKeyMatches("userForm.title");
setTextField("username", "suser");
setTextField("password", "spass");
setTextField("firstName", "Spring");
setTextField("lastName", "User");
setTextField("email", "suser@appfuse.org");
clickElementByXPath("//button[@name=\"save\"]");
assertTitleKeyMatches("userList.title");
}
@Test
public void listUsers() {
beginAt("/users");
assertTitleKeyMatches("userList.title");
// check that table is present
assertTablePresent("userList");
//check that a set of strings are present somewhere in table
assertTextInTable("userList", new String[] {"Spring", "User"});
}
@Test
public void editUser() {
beginAt("/users");
assertTitleKeyMatches("userList.title");
clickLinkWithText("Spring");
assertTextFieldEquals("firstName", "Spring");
clickElementByXPath("//button[@name=\"save\"]");
assertTitleKeyMatches("userList.title");
}
@After
public void removeUser() {
beginAt("/users");
assertTitleKeyMatches("userList.title");
clickLinkWithText("Spring");
assertTitleKeyMatches("userForm.title");
clickElementByXPath("//button[@name=\"delete\"]");
assertTitleKeyMatches("userList.title");
}
private void assertTitleKeyMatches(String title) {
assertTitleEquals(messages.getString(title) + " | " + messages.getString("webapp.name"));
}
}