Integration test and setValue
rtirserio Feb 10, 2009 8:44 PMI am trying to use setValue in an integration test to set a value of an injected object that comes from the selection in a drop down menu, but when I debug the test, the value is always null.
Here is my component
@Name("directoryHome")
public class DirectoryHome extends EntityHome<Directory> {
/* Persistence Accounting Fields */
/** @see java.io.Serializable */
private static final long serialVersionUID = -7944607543874301481L;
/* DirectoryHome Fields */
/** Unique identifier for Directory. */
@RequestParameter
private Long directoryId;
/** Directory to which this Directory should move all its contents to before being removed. */
@In(required = false)
@Out(required = false)
private Directory directoryToMoveTo;
/* Java/Seam Persistence API Method Overrides */
/** @return Directory */
@Override
@Factory("directory")
public Directory getInstance() {
return super.getInstance();
}
/** @return list of Directory objects that the contents of a directory can be moved to before being removed. */
@DataModel(value = "directories")
public List<Directory> getDirectories() {
return getEntityManager().createQuery("from Directory directory where directory.id != #{directory.id}").getResultList();
}
/**
* @see org.jboss.seam.framework.Home.getId()
* @return Id of Directory
*/
@Override
public Object getId() {
if (directoryId == null) {
return super.getId();
} else {
return directoryId;
}
}
/**
* Remove the directory after removing it from the repository.
* @return Result String
*/
@Override
public String remove() {
String result = "error";
Directory directory = getInstance();
if (directoryToMoveTo != null) {
for (Document d : getInstance().getDocuments()) {
d.setComments(d.getComments() + "\nMoved to " + directoryToMoveTo.getName() + " on " + new Date().toString());
}
directoryToMoveTo.addAllDocumentsFromDirectory(directory);
}
result = super.remove();
return result;
}
and the test method
@Test
public void testRemoveWithCopyDirectory() throws Exception {
login();
new SmartFacesRequest("/directoryRemove.xhtml") {
@Override
protected void applyRequestValues() throws Exception {
super.applyRequestValues();
setParameter("directoryId", "1");
}
protected void updateModelValues() throws Exception {
super.updateModelValues();
DirectoryHome directoryHome = (DirectoryHome) getValue("#{directoryHome}");
assert directoryHome != null;
EntityManager em = (EntityManager) getValue("#{entityManager}");
Directory dir = em.find(Directory.class, 2L);
setValue("#{directoryToMoveTo}", dir);
}
@Override
protected void invokeApplication() throws Exception {
super.invokeApplication();
assert invokeMethod("#{directoryHome.remove}").equals("removed");
}
}
.run();
and finally the xhtml
<h:selectOneMenu id="directoryToMoveTo" value="#{directoryToMoveTo}">
<s:selectItems var="_directory" value="#{directories}" label="#{_directory.name}" noSelectionLabel="None"/>
<s:convertEntity />
</h:selectOneMenu>
any help is appreciated.