/**
*
*/
package org.openiaml.model.tests.inference.model0_4_2;
import org.openiaml.model.model.ECARule;
import org.openiaml.model.model.Event;
import org.openiaml.model.model.SimpleCondition;
import org.openiaml.model.model.Value;
import org.openiaml.model.model.components.Gate;
import org.openiaml.model.model.operations.ActivityOperation;
import org.openiaml.model.model.operations.ActivityPredicate;
import org.openiaml.model.model.operations.CancelNode;
import org.openiaml.model.model.operations.DecisionNode;
import org.openiaml.model.model.operations.ExternalValue;
import org.openiaml.model.model.operations.FinishNode;
import org.openiaml.model.model.operations.SetNode;
import org.openiaml.model.model.operations.StartNode;
import org.openiaml.model.model.scopes.Session;
import org.openiaml.model.model.visual.Button;
import org.openiaml.model.model.visual.Frame;
import org.openiaml.model.tests.inference.ValidInferenceTestCase;
/**
* Inference of the EntryGate model completion rules.
*
* @author jmwright
*
*/
public class GateRequiredPage extends ValidInferenceTestCase {
@Override
public Class<? extends ValidInferenceTestCase> getInferenceClass() {
return GateRequiredPage.class;
}
/**
* Test the initial model.
*
* @throws Exception
*/
public void testInitial() throws Exception {
root = loadDirectly(GateRequiredPage.class);
Frame page = assertHasFrame(root, "Home");
assertNotGenerated(page);
Session session = assertHasSession(root, "Session");
assertNotGenerated(session);
Frame required = assertHasFrame(root, "Required Page");
assertNotGenerated(required);
Gate gate = session.getEntryGate();
assertEquals("requires a page is viewed first", gate.getName());
assertNotGenerated(gate);
ECARule nav = assertHasNavigateAction(session, gate, required, "first");
assertNotGenerated(nav);
}
/**
* A button "Continue" will be created in the Required Page.
* This will navigate back to the Gate.
*
* @throws Exception
*/
public void testRequiredPageHasContinueButton() throws Exception {
root = loadAndInfer(GateRequiredPage.class);
Frame required = assertHasFrame(root, "Required Page");
Button button = assertHasButton(required, "Continue");
assertGenerated(button);
Session session = assertHasSession(root, "Session");
Gate gate = session.getEntryGate();
assertEquals("requires a page is viewed first", gate.getName());
Event event = button.getOnClick();
assertGenerated(event);
ECARule nav = assertHasNavigateAction(root, event, gate, "resume");
assertGenerated(nav);
}
/**
* A Value is generated which will store the
* value of the visited.
*
* @throws Exception
*/
public void testRequiredPageSetsProperty() throws Exception {
root = loadAndInfer(GateRequiredPage.class);
Session session = assertHasSession(root, "Session");
// generated property
Value property = assertHasValue(session, "requires a page is viewed first flag");
assertGenerated(property);
assertEquals(property.getDefaultValue(), "false");
// required page
Frame required = assertHasFrame(root, "Required Page");
Event access = required.getOnAccess();
assertGenerated(access);
// set operation
ActivityOperation set = assertHasActivityOperation(required, "Set gate flag");
assertGenerated(set);
// run wire
ECARule run = assertHasRunAction(required, access, set);
assertGenerated(run);
}
/**
* Check the contents of the generated 'Set gate flag' operation.
*/
public void testSetOperationContents() throws Exception {
root = loadAndInfer(GateRequiredPage.class);
Session session = assertHasSession(root, "Session");
// generated property
Value property = assertHasValue(session, "requires a page is viewed first flag");
// required page
Frame required = assertHasFrame(root, "Required Page");
// set operation
ActivityOperation set = assertHasActivityOperation(required, "Set gate flag");
// start node
StartNode start = assertHasStartNode(set);
assertGenerated(start);
FinishNode finish = assertHasFinishNode(set);
assertGenerated(finish);
SetNode s = assertHasSetNode(set);
assertGenerated(s);
Value value = assertHasValue(set, "true");
assertTrue(value.isReadOnly());
assertGenerated(value);
assertEquals("true", value.getDefaultValue());
// flow
assertGenerated(assertHasExecutionEdge(set, start, s));
assertGenerated(assertHasExecutionEdge(set, s, finish));
// set <- externalValue <- value
{
assertEquals(1, s.getInFlows().size());
ExternalValue ev = (ExternalValue) s.getInFlows().get(0).getFrom();
assertEquals(value, ev.getValue());
}
// setnode -> externalValue -> property
{
assertEquals(1, s.getOutFlows().size());
ExternalValue ev = (ExternalValue) s.getOutFlows().get(0).getTo();
assertEquals(property, ev.getValue());
}
}
/**
* A Function will be created in the Session to check the
* given property.
*/
public void testConditionWire() throws Exception {
root = loadAndInfer(GateRequiredPage.class);
Session session = assertHasSession(root, "Session");
Gate gate = session.getEntryGate();
assertEquals("requires a page is viewed first", gate.getName());
// generated condition
ActivityPredicate condition = assertHasActivityPredicate(session, "check requires a page is viewed first");
assertGenerated(condition);
SimpleCondition wire = assertHasSimpleCondition(session, condition, gate, "condition");
assertGenerated(wire);
}
/**
* Check the contents of the generated condition.
*/
public void testConditionContents() throws Exception {
root = loadAndInfer(GateRequiredPage.class);
Session session = assertHasSession(root, "Session");
// generated property
Value property = assertHasValue(session, "requires a page is viewed first flag");
// generated condition
ActivityPredicate condition = assertHasActivityPredicate(session, "check requires a page is viewed first");
// start node
StartNode start = assertHasStartNode(condition);
assertGenerated(start);
FinishNode finish = assertHasFinishNode(condition);
assertGenerated(finish);
CancelNode cancel = assertHasCancelNode(condition);
assertGenerated(cancel);
DecisionNode check = assertHasDecisionNode(condition, "true?");
assertGenerated(check);
// flow
assertGenerated(assertHasExecutionEdge(condition, start, check));
assertGenerated(assertHasExecutionEdge(condition, check, finish, "y"));
assertGenerated(assertHasExecutionEdge(condition, check, cancel, "n"));
// property -> ExternalValue -> check
{
assertEquals(1, check.getInFlows().size());
ExternalValue ev = (ExternalValue) check.getInFlows().get(0).getFrom();
assertEquals(property, ev.getValue());
}
}
}