I'm trying to create a BasePortletActionTestCase because I'm using portlets. 
The portlets work just fine but I think since my actions are now extending
my PortletBaseAction, that the *ActionTest classes should be using a
PortletActionContext instead of a ServletActionContext.


Here is my PortletBaseAction:

public class PortletBaseAction extends ActionSupport {
    private static final long serialVersionUID = 3525445612504421307L;
    public static final String CANCEL = "cancel";
    protected transient final Log log = LogFactory.getLog(getClass());
    protected String from = null;
    protected String cancel = null;
    protected String delete = null;
    protected String save = null;
    protected MailEngine mailEngine = null;
    protected SimpleMailMessage mailMessage = null;
    protected String templateName = null;

    public String cancel() {
        return CANCEL;
    }

    @SuppressWarnings("unchecked")
    protected void saveMessage(String msg) {
        List messages = (List) getSession().getAttribute("messages");

        if (messages == null) {
            messages = new ArrayList();
        }

        messages.add(msg);
        getSession().setAttribute("messages", messages);
    }

    @SuppressWarnings("unchecked")
    protected void saveError(String msg) {
        saveMessage(msg);
    }

    /**
     * Convenience method to get the Configuration HashMap
     * from the servlet context.
     *
     * @return the user's populated form from the session
     */
    protected Map getConfiguration() {
        Map config = (HashMap) getSession().getPortletContext()
                .getAttribute(Constants.CONFIG);

        // so unit tests don't puke when nothing's been set
        if (config == null) {
            return new HashMap();
        }

        return config;
    }

    protected PortletRequest getRequest() {
        return PortletActionContext.getRequest();
    }

    protected String getRemoteUser() {
        return getRequest().getRemoteUser();
    }

    protected boolean isUserInRole(String role) {
        return getRequest().isUserInRole(role);
    }

    /**
     * Convenience method to get the session.
     *
     * @return the session from the request (request.getSession()).
     */
    protected PortletSession getSession() {
        return getRequest().getPortletSession();
    }

    /**
     * Convenience method to set request attribute.
     * @param attrname
     * @param obj
     */
    public void setRequestAttribute(String attrname, Object obj) {
        getRequest().setAttribute(attrname, obj);
    }

    public void setMailEngine(MailEngine mailEngine) {
        this.mailEngine = mailEngine;
    }

    public void setMailMessage(SimpleMailMessage mailMessage) {
        this.mailMessage = mailMessage;
    }

    /**
     * Convenience method for setting a "from" parameter to indicate the
previous page.
     *
     * @param from indicator for the originating page
     */
    public void setFrom(String from) {
        this.from = from;
    }

    public void setDelete(String delete) {
        this.delete = delete;
    }

    public void setSave(String save) {
        this.save = save;
    }
}



I just modified the BaseAction from Appfuse slightly.

So now all of my Action classes actually extend this class instead of
BaseAction.

In testing, I figure that I need to change my ActionTest classes as well.

The BaseActionTestCase sets a MockHttpServletRequest in the
onSetUpBeforeTransaction method

@Override
    protected void onSetUpBeforeTransaction() throws Exception {
        LocalizedTextUtil.addDefaultResourceBundle(Constants.BUNDLE_KEY);
        ActionContext.getContext().setSession(new HashMap());

        // change the port on the mailSender so it doesn't conflict with an
        // existing SMTP server on localhost
        JavaMailSenderImpl mailSender = (JavaMailSenderImpl)
applicationContext.getBean("mailSender");
        mailSender.setPort(2525);
        mailSender.setHost("localhost");

        // populate the request so getRequest().getSession() doesn't fail in
BaseAction.java
        ServletActionContext.setRequest(new MockHttpServletRequest());
    }

Well, I'm not using a HttpServletRequest, I'm using a PortletRequest.

In the tests that extend BaseActionTestCase we are setting up
MockHttpServletRequet objects and placing them into the
ServletActionContext.

Well, how do I place my MockPortletRequest into the PortletActionContext?

PortletActionContext doesn't have a setRequest method.

What am I missing?

>From my BasePortletActionTestCase:

    @Override
    protected void onSetUpBeforeTransaction() throws Exception {
        LocalizedTextUtil.addDefaultResourceBundle(Constants.BUNDLE_KEY);
        ActionContext.getContext().setSession(new HashMap());

        MockPortletSession session = new MockPortletSession();
        //todo something with PortletActionContext
    }
-- 
View this message in context: 
http://www.nabble.com/Struts2-Portlet-Test-tf4734378s2369.html#a13538500
Sent from the AppFuse - User mailing list archive at Nabble.com.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to