/** * */ package org.jboss.seam.example.seamdiscs.test; import static org.jboss.seam.example.seamdiscs.test.TestStrings.ARTIST1_NAME; import static org.jboss.seam.example.seamdiscs.test.TestStrings.ARTIST4_NAME; import static org.jboss.seam.example.seamdiscs.test.TestStrings.ARTIST_NEW_DESCRIPTION; import static org.jboss.seam.example.seamdiscs.test.TestStrings.BANDMEMBER3_VALUE; import static org.jboss.seam.example.seamdiscs.test.TestStrings.NEW_ARTIST_NAME; import static org.jboss.seam.example.seamdiscs.test.TestStrings.NEW_BANDMEMBER_NAME; import static org.jboss.seam.example.seamdiscs.test.TestStrings.NEW_BAND_NAME; import static org.jboss.seam.example.seamdiscs.test.TestStrings.PASSWORD; import static org.jboss.seam.example.seamdiscs.test.TestStrings.PERSISTED; import static org.jboss.seam.example.seamdiscs.test.TestStrings.UPDATED; import static org.jboss.seam.example.seamdiscs.test.TestStrings.USERNAME; import java.util.List; import javax.el.PropertyNotFoundException; import org.jboss.seam.example.seamdiscs.model.BandMember; import org.jboss.seam.mock.DBUnitSeamTest; import org.testng.annotations.Test; /** * @author Pete Muir * */ public class EditArtistTest extends DBUnitSeamTest { @Override protected void prepareDBUnitOperations() { beforeTestOperations.add( new DataSetOperation("org/jboss/seam/example/seamdiscs/test/BaseData.xml") ); } @Test public void testEditArtist() throws Exception { final String cid = new FacesRequest("/artist.xhtml") { @Override protected void beforeRequest() { setParameter("artistId", "1"); setParameter("conversationPropagation", "join"); } @Override protected void updateModelValues() throws Exception { setValue("#{identity.username}", USERNAME); setValue("#{identity.password}", PASSWORD); } @Override protected void invokeApplication() throws Exception { invokeAction("#{identity.login}"); } @Override protected void renderResponse() throws Exception { assert (Boolean) getValue("#{identity.loggedIn}"); assert ((Integer) 1).equals(getValue("#{artistHome.id}")); assert ARTIST1_NAME.equals(getValue("#{artist.name}")); assert getValue("#{artist.description}") == null; assert isLongRunningConversation(); assert (Boolean) getValue("#{artistHome.managed}"); } }.run(); new FacesRequest("/artist.xhtml", cid) { @Override protected void updateModelValues() throws Exception { setValue("#{artist.description}", ARTIST_NEW_DESCRIPTION); assert isLongRunningConversation(); assert cid.equals(getConversationId()); } @Override protected void invokeApplication() throws Exception { assert UPDATED.equals(invokeAction("#{artistHome.update}")); } @Override protected void renderResponse() throws Exception { assert ARTIST_NEW_DESCRIPTION.equals(getValue("#{artist.description")); assert isLongRunningConversation(); } }.run(); } @Test public void testAddArtist() throws Exception { final String cid = new FacesRequest("/artist.xhtml") { @Override protected void beforeRequest() { setParameter("conversationPropagation", "join"); } @Override protected void updateModelValues() throws Exception { setValue("#{identity.username}", USERNAME); setValue("#{identity.password}", PASSWORD); } @Override protected void invokeApplication() throws Exception { invokeAction("#{identity.login}"); } @Override protected void renderResponse() throws Exception { assert (Boolean) getValue("#{identity.loggedIn}"); assert null == getValue("#{artistHome.id}"); assert null == getValue("#{artist.name}"); assert isLongRunningConversation(); assert (!(Boolean) getValue("#{artistHome.managed}")); } }.run(); new FacesRequest("/artist.xhtml", cid) { @Override protected void updateModelValues() throws Exception { setValue("#{artistHome.instance.name}", NEW_ARTIST_NAME); assert isLongRunningConversation(); } @Override protected void invokeApplication() throws Exception { assert PERSISTED.equals(invokeAction("#{artistHome.persist}")); } }.run(); new FacesRequest("/artists.xhtml", cid) { @Override protected void renderResponse() throws Exception { assert new Long("7").equals(getValue("#{artists.resultCount}")); assert NEW_ARTIST_NAME.equals(getValue("#{artists.resultList[3].name}")); assert ARTIST4_NAME.equals(getValue("#{artists.resultList[4].name}")); } }.run(); } @Test public void testAddBand() throws Exception { final String cid = new FacesRequest("/artist.xhtml") { @Override protected void beforeRequest() { setParameter("conversationPropagation", "join"); } @Override protected void updateModelValues() throws Exception { setValue("#{identity.username}", USERNAME); setValue("#{identity.password}", PASSWORD); setValue("#{artistHome.type}", "band"); } @Override protected void invokeApplication() throws Exception { invokeAction("#{identity.login}"); } @Override protected void renderResponse() throws Exception { assert (Boolean) getValue("#{identity.loggedIn}"); assert null == getValue("#{artistHome.id}"); assert null == getValue("#{artist.name}"); try { assert ((Integer) 0).equals(getValue("#{artist.bandMembers.size}")); } catch (PropertyNotFoundException e) { assert false; } assert isLongRunningConversation(); assert (!(Boolean) getValue("#{artistHome.managed}")); } }.run(); new FacesRequest("/artist.xhtml", cid) { @Override protected void updateModelValues() throws Exception { setValue("#{artistHome.instance.name}", NEW_BAND_NAME); assert isLongRunningConversation(); } @Override protected void invokeApplication() throws Exception { assert PERSISTED.equals(invokeAction("#{artistHome.persist}")); assert ((Integer) 0).equals(getValue("#{artistHome.instance.bandMembers.size}")); } }.run(); new FacesRequest("/artists.xhtml", cid) { @Override protected void renderResponse() throws Exception { assert new Long("7").equals(getValue("#{artists.resultCount}")); assert NEW_BAND_NAME.equals(getValue("#{artists.resultList[3].name}")); assert ARTIST4_NAME.equals(getValue("#{artists.resultList[4].name}")); } }.run(); } @Test public void testAddBandMember() throws Exception { final String cid = new FacesRequest("/artist.xhtml") { @Override protected void beforeRequest() { setParameter("artistId", "1"); setParameter("conversationPropagation", "join"); } @Override protected void updateModelValues() throws Exception { setValue("#{identity.username}", USERNAME); setValue("#{identity.password}", PASSWORD); } @Override protected void invokeApplication() throws Exception { invokeAction("#{identity.login}"); } @Override protected void renderResponse() throws Exception { assert ARTIST1_NAME.equals(getValue("#{artist.name}")); assert ((Integer) 3).equals(getValue("#{artist.bandMembers.size}")); } }.run(); new FacesRequest("/artist.xhtml", cid) { @Override protected void invokeApplication() throws Exception { assert null == invokeAction("#{artistHome.addBandMember}"); } @Override protected void renderResponse() throws Exception { assert ((Integer) 4).equals(getValue("#{artist.bandMembers.size}")); } }.run(); new FacesRequest("/artist.xhtml", cid) { @Override protected void updateModelValues() throws Exception { setValue("#{artist.bandMembers[3].name}", NEW_BANDMEMBER_NAME); } @Override protected void invokeApplication() throws Exception { assert "updated" == invokeAction("#{artistHome.update}"); } @Override protected void renderResponse() throws Exception { assert ((Integer) 4).equals(getValue("#{artist.size}")); assert NEW_BANDMEMBER_NAME.equals(getValue("#{artist.bandMembers[3].name}")); } }.run(); } @Test public void testBandMemberFinder() throws Exception { new NonFacesRequest("/artist.xhtml") { @Override protected void renderResponse() throws Exception { List<BandMember> bandMembers = (List<BandMember>) invokeMethod("#{bandMemberFinder.getBandMembers('R')}"); assert bandMembers.size() == 1; assert BANDMEMBER3_VALUE.equals(bandMembers.get(0).getName()); } }.run(); } }