package org.jboss.seam.test.integration;
import java.util.ArrayList;
import java.util.List;
import javax.faces.model.SelectItem;
import org.jboss.seam.core.ConversationEntries;
import org.jboss.seam.core.ConversationEntry;
import org.jboss.seam.core.Manager;
import org.jboss.seam.faces.Switcher;
import org.jboss.seam.mock.SeamTest;
import org.testng.annotations.Test;
public class ConversationTest
extends SeamTest
{
@Test
public void conversationStack()
throws Exception
{
// no conversation, no stack
new FacesRequest("/pageWithDescription.xhtml") {
@Override
protected void renderResponse() throws Exception {
List<ConversationEntry> entries = (List<ConversationEntry>) getValue("#{conversationStack}");
assert entries.size() == 0;
}
}.run();
// no conversation, no stack
new FacesRequest("/pageWithoutDescription.xhtml") {
@Override
protected void invokeApplication() throws Exception {
Manager.instance().beginConversation();
}
@Override
protected void renderResponse() throws Exception {
List<ConversationEntry> entries = (List<ConversationEntry>) getValue("#{conversationStack}");
assert entries.size() == 0;
}
}.run();
// new conversation, stack = 1
String rootId = new FacesRequest("/pageWithDescription.xhtml") {
@Override
protected void invokeApplication() throws Exception {
Manager.instance().beginConversation();
}
@Override
protected void renderResponse() throws Exception {
List<ConversationEntry> entries = (List<ConversationEntry>) getValue("#{conversationStack}");
assert entries.size() == 1;
}
}.run();
// nested conversation, stack =2
String nested1 = new FacesRequest("/pageWithDescription.xhtml", rootId) {
@Override
protected void invokeApplication() throws Exception {
Manager.instance().beginNestedConversation();
}
@Override
protected void renderResponse() throws Exception {
List<ConversationEntry> entries = (List<ConversationEntry>) getValue("#{conversationStack}");
assert entries.size() == 2;
}
}.run();
// nested conversation without description, not added to stack
String nested2 = new FacesRequest("/pageWithoutDescription.xhtml", nested1) {
@Override
protected void invokeApplication() throws Exception {
Manager.instance().beginNestedConversation();
}
@Override
protected void renderResponse() throws Exception {
List<ConversationEntry> entries = (List<ConversationEntry>) getValue("#{conversationStack}");
assert entries.size() == 2;
}
}.run();
// access a page, now it's on the stack
new FacesRequest("/pageWithDescription.xhtml", nested2) {
@Override
protected void renderResponse() throws Exception {
List<ConversationEntry> entries = (List<ConversationEntry>) getValue("#{conversationStack}");
assert entries.size() == 3;
}
}.run();
// end conversation, stack goes down
new FacesRequest("/pageWithDescription.xhtml", nested2) {
@Override
protected void invokeApplication() throws Exception {
Manager.instance().endConversation(false);
}
@Override
protected void renderResponse() throws Exception {
List<ConversationEntry> entries = (List<ConversationEntry>) getValue("#{conversationStack}");
assert entries.size() == 2;
}
}.run();
// end another one, size is 1
new FacesRequest("/pageWithDescription.xhtml", nested1) {
@Override
protected void invokeApplication() throws Exception {
Manager.instance().endConversation(false);
}
@Override
protected void renderResponse() throws Exception {
List<ConversationEntry> entries = (List<ConversationEntry>) getValue("#{conversationStack}");
assert entries.size() == 1;
}
}.run();
}
@Test
public void conversationList()
throws Exception
{
new FacesRequest("/pageWithDescription.xhtml") {
@Override
protected void renderResponse() throws Exception {
List<ConversationEntry> entries = (List<ConversationEntry>) getValue("#{conversationList}");
assert entries.size() == 0;
}
}.run();
new FacesRequest("/pageWithoutDescription.xhtml") {
@Override
protected void invokeApplication() throws Exception {
Manager.instance().beginConversation();
}
@Override
protected void renderResponse() throws Exception {
List<ConversationEntry> entries = (List<ConversationEntry>) getValue("#{conversationList}");
assert entries.size() == 0;
}
}.run();
String conv1 = new FacesRequest("/pageWithDescription.xhtml") {
@Override
protected void invokeApplication() throws Exception {
Manager.instance().beginConversation();
}
@Override
protected void renderResponse() throws Exception {
List<ConversationEntry> entries = (List<ConversationEntry>) getValue("#{conversationList}");
assert entries.size() == 1;
}
}.run();
String conv2 = new FacesRequest("/pageWithDescription.xhtml") {
@Override
protected void invokeApplication() throws Exception {
Manager.instance().beginConversation();
}
@Override
protected void renderResponse() throws Exception {
List<ConversationEntry> entries = (List<ConversationEntry>) getValue("#{conversationList}");
assert entries.size() == 2;
}
}.run();
String conv3 = new FacesRequest("/pageWithDescription.xhtml") {
@Override
protected void invokeApplication() throws Exception {
Manager.instance().beginConversation();
}
@Override
protected void renderResponse() throws Exception {
List<ConversationEntry> entries = (List<ConversationEntry>) getValue("#{conversationList}");
assert entries.size() == 3;
}
}.run();
new FacesRequest("/pageWithDescription", conv2) {
@Override
protected void invokeApplication() throws Exception {
Manager.instance().endConversation(true);
}
@Override
protected void renderResponse() throws Exception {
List<ConversationEntry> entries = (List<ConversationEntry>) getValue("#{conversationList}");
assert entries.size() == 2;
}
}.run();
new FacesRequest("/pageWithDescription", conv1) {
@Override
protected void invokeApplication() throws Exception {
Manager.instance().endConversation(true);
}
@Override
protected void renderResponse() throws Exception {
List<ConversationEntry> entries = (List<ConversationEntry>) getValue("#{conversationList}");
assert entries.size() == 1;
}
}.run();
new FacesRequest("/pageWithDescription", conv3) {
@Override
protected void invokeApplication() throws Exception {
Manager.instance().endConversation(true);
}
@Override
protected void renderResponse() throws Exception {
List<ConversationEntry> entries = (List<ConversationEntry>) getValue("#{conversationList}");
assert entries.size() == 0;
}
}.run();
}
@Test
public void switcher()
throws Exception
{
new FacesRequest("/pageWithDescription.xhtml") {
@Override
protected void renderResponse() throws Exception {
Switcher switcher = (Switcher) getValue("#{switcher}");
assert switcher.getSelectItems().size() == 0;
assert switcher.getConversationIdOrOutcome() == null;
}
}.run();
final String conv1 = new FacesRequest("/pageWithDescription.xhtml") {
@Override
protected void invokeApplication() throws Exception {
Manager.instance().beginConversation();
}
@Override
protected void renderResponse() throws Exception {
Switcher switcher = (Switcher) getValue("#{switcher}");
assert switcher.getSelectItems().size() == 1;
}
}.run();
final String conv2 = new FacesRequest("/pageWithDescription.xhtml") {
@Override
protected void invokeApplication() throws Exception {
Manager.instance().beginConversation();
}
@Override
protected void renderResponse() throws Exception {
Switcher switcher = (Switcher) getValue("#{switcher}");
assert switcher.getSelectItems().size() == 2;
}
}.run();
final String conv3 = new FacesRequest("/pageWithDescription.xhtml") {
@Override
protected void invokeApplication() throws Exception {
Manager.instance().beginConversation();
}
@Override
protected void renderResponse() throws Exception {
Switcher switcher = (Switcher) getValue("#{switcher}");
assert switcher.getSelectItems().size() == 3;
}
}.run();
new FacesRequest() {
@Override
protected void renderResponse() throws Exception {
Switcher switcher = (Switcher) getValue("#{switcher}");
assert switcher.getSelectItems().size() == 3;
List<SelectItem> items = switcher.getSelectItems();
List<String> values = new ArrayList<String>();
for (SelectItem item: items) {
assert item.getLabel().equals("page description");
values.add((String) item.getValue());
}
assert values.contains(conv1);
assert values.contains(conv2);
assert values.contains(conv3);
}
}.run();
new FacesRequest("/pageWithDescription.xhtml", conv1) {
@Override
protected void invokeApplication() throws Exception {
Manager.instance().endConversation(true);
}
}.run();
new FacesRequest("/pageWithDescription.xhtml", conv2) {
@Override
protected void invokeApplication() throws Exception {
Manager.instance().endConversation(true);
}
@Override
protected void renderResponse() throws Exception {
Switcher switcher = (Switcher) getValue("#{switcher}");
assert switcher.getSelectItems().size() == 1;
assert switcher.getSelectItems().get(0).getLabel().equals("page description");
assert switcher.getSelectItems().get(0).getValue().equals(conv3);
}
}.run();
new FacesRequest("/pageWithAnotherDescription.xhtml", conv3) {
@Override
protected void renderResponse() throws Exception {
Switcher switcher = (Switcher) getValue("#{switcher}");
assert switcher.getSelectItems().size() == 1;
assert switcher.getSelectItems().get(0).getLabel().equals("another page description");
assert switcher.getSelectItems().get(0).getValue().equals(conv3);
}
}.run();
}
@Test
public void killAllOthers() throws Exception
{
new FacesRequest("/pageWithAnotherDescription.xhtml") {
@Override
protected void invokeApplication() throws Exception
{
Manager.instance().beginConversation();
}
@Override
protected void renderResponse() throws Exception
{
assert ConversationEntries.instance().size() == 1;
}
}.run();
new FacesRequest("/pageWithoutDescription.xhtml") {
@Override
protected void invokeApplication() throws Exception
{
Manager.instance().beginConversation();
}
@Override
protected void renderResponse() throws Exception
{
assert ConversationEntries.instance().size() == 2;
}
}.run();
new FacesRequest("/pageWithDescription.xhtml") {
@Override
protected void invokeApplication() throws Exception
{
Manager.instance().beginConversation();
Manager.instance().killAllOtherConversations();
}
@Override
protected void renderResponse() throws Exception
{
assert ConversationEntries.instance().size() == 1;
}
}.run();
}
@Test
public void nestedKillAllOthers() throws Exception
{
final String unrelated = new FacesRequest("/pageWithoutDescription.xhtml") {
@Override
protected void invokeApplication() throws Exception
{
Manager.instance().beginConversation();
}
@Override
protected void renderResponse() throws Exception
{
assert ConversationEntries.instance().size() == 1;
}
}.run();
String root = new FacesRequest("/pageWithDescription.xhtml") {
@Override
protected void invokeApplication() throws Exception
{
Manager.instance().beginConversation();
}
@Override
protected void renderResponse() throws Exception
{
assert ConversationEntries.instance().size() == 2;
}
}.run();
// nested conversation
new FacesRequest("/pageWithDescription.xhtml", root) {
@Override
protected void invokeApplication() throws Exception
{
Manager.instance().beginNestedConversation();
}
@Override
protected void renderResponse() throws Exception
{
assert ConversationEntries.instance().size() == 3;
Manager.instance().killAllOtherConversations();
assert ConversationEntries.instance().size() == 2;
assert ConversationEntries.instance().getConversationIds()
.contains(unrelated) == false;
}
}.run();
}
}