[jboss-user] [JBoss Seam] - Creating Mock for identity component

andreigh.ts do-not-reply at jboss.com
Tue May 22 10:43:26 EDT 2007


I am unable to mock the Identity component (so that  I can bypass authentication and permission checking in testing).

I am using SeamTest and in the FacesRequest I am calling my ping component:


  | public class PingTest extends SeamTest {
  | 
  | 	@Test(groups = { "dev" })
  | 	public void test() throws Exception {
  | 		new FacesRequest() {
  | 			@Override
  | 			protected void invokeApplication() {
  | 				//call action methods here
  | 				invokeMethod("#{ping.ping}");
  | 			}
  | 		}.run();
  | 	}
  | }
  | 

ping is a Seam component that uses Restrict:


  | @Stateless
  | @Name("ping")
  | @Restrict("#{identity.loggedIn}")
  | public class PingAction implements Ping {
  | ...
  | 	public void ping() {
  | 		...
  | 	}
  | ...
  | }
  | 

I am trying to mock the identity component like this:


  | @Name("identity")
  | @Install(precedence=Install.MOCK)
  | public class Identity extends org.jboss.seam.security.RuleBasedIdentity {
  | 	public boolean 	isLoggedIn() {
  | 		return true;
  | 	}
  | }
  | 

When I run the tests it throws this exception:

   [testng] javax.el.ELException: java.lang.IllegalArgumentException: value of context variable is not an instance of the component bound to the context variable: identity
   [testng]     at com.sun.el.parser.AstValue.invoke(AstValue.java:178)
   [testng]     at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:286)
   [testng]     at org.jboss.seam.util.UnifiedELMethodBinding.invoke(UnifiedELMethodBinding.java:36)
   [testng]     at org.jboss.seam.actionparam.ActionParamBindingHelper.invokeTheExpression(ActionParamBindingHelper.java:58)
   [testng]     at org.jboss.seam.actionparam.ActionParamMethodBinding.invoke(ActionParamMethodBinding.java:75)
   [testng]     at org.jboss.seam.actionparam.ActionParamBindingHelper.invokeTheExpression(ActionParamBindingHelper.java:58)
   [testng]     at org.jboss.seam.actionparam.ActionParamMethodBinding.invoke(ActionParamMethodBinding.java:75)
   [testng]     at org.jboss.seam.mock.SeamTest$Request.invokeMethod(SeamTest.java:401)
   [testng]     at com.ibx.ibxrequest.action.test.PingTest$FacesRequestTest.invokeApplication(PingTest.java:35)
   [testng]     at org.jboss.seam.mock.SeamTest$Request.run(SeamTest.java:489)
   [testng]     at com.ibx.ibxrequest.action.test.PingTest.test(PingTest.java:56)
   [testng] Caused by: java.lang.IllegalArgumentException: value of context variable is not an instance of the component bound to the context variable: iden
tity
   [testng]     at org.jboss.seam.Component.getInstance(Component.java:1655)
   [testng]     at org.jboss.seam.Component.getInstance(Component.java:1610)
   [testng]     at org.jboss.seam.Component.getInstance(Component.java:1604)
   [testng]     at org.jboss.seam.jsf.SeamELResolver.getValue(SeamELResolver.java:49)
   [testng]     at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:143)
   [testng]     at com.sun.el.parser.AstIdentifier.getValue(AstIdentifier.java:73)
   [testng]     at com.sun.el.parser.AstValue.getValue(AstValue.java:114)
   [testng]     at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:195)
   [testng]     at org.jboss.seam.util.UnifiedELValueBinding.getValue(UnifiedELValueBinding.java:34)
   [testng]     at org.jboss.seam.security.Identity.evaluateExpression(Identity.java:506)
   [testng]     at org.jboss.seam.security.Identity.checkRestriction(Identity.java:149)
   [testng]     at org.jboss.seam.interceptors.SecurityInterceptor.aroundInvoke(SecurityInterceptor.java:35)
   [testng]     at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:69)
   [testng]     at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:103)
   [testng]     at org.jboss.seam.intercept.ClientSideInterceptor.invoke(ClientSideInterceptor.java:50)
   [testng]     at org.javassist.tmp.java.lang.Object_$$_javassist_0.ping(Object_$$_javassist_0.java)
   [testng]     at com.sun.el.parser.AstValue.invoke(AstValue.java:174)
   [testng]     ... 31 more
   [testng] ... Removed 25 stack frames

Mocking my own components (for example ping) works very well, so I don't understand why this throws an exception...

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4047603#4047603

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4047603



More information about the jboss-user mailing list