Package com.agiletec.plugins.jpcontentfeedback.aps.system.services.contentfeedback.comment

Source Code of com.agiletec.plugins.jpcontentfeedback.aps.system.services.contentfeedback.comment.TestCommentFrontEndAction

/*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
* This file is part of Entando software.
* Entando is a free software;
* You can redistribute it and/or modify it
* under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation; version 2.
*
* See the file License for the specific language governing permissions  
* and limitations under the License
*
*
*
* Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved.
*
*/
package com.agiletec.plugins.jpcontentfeedback.aps.system.services.contentfeedback.comment;

import java.util.HashMap;
import java.util.List;

import org.apache.struts2.util.TokenHelper;
import org.entando.entando.aps.system.services.widgettype.IWidgetTypeManager;
import org.entando.entando.aps.system.services.widgettype.WidgetType;

import com.agiletec.aps.system.RequestContext;
import com.agiletec.aps.system.SystemConstants;
import com.agiletec.aps.system.services.cache.ICacheManager;
import com.agiletec.aps.system.services.lang.Lang;
import com.agiletec.aps.system.services.page.Widget;
import com.agiletec.aps.util.ApsProperties;
import com.agiletec.aps.util.ApsWebApplicationUtils;
import com.agiletec.plugins.jacms.aps.system.JacmsSystemConstants;
import com.agiletec.plugins.jacms.aps.system.services.content.IContentManager;
import com.agiletec.plugins.jacms.aps.system.services.content.helper.PublicContentAuthorizationInfo;
import com.agiletec.plugins.jacms.aps.system.services.content.model.Content;
import com.agiletec.plugins.jpcontentfeedback.aps.internalservlet.feedback.ContentFeedbackAction;
import com.agiletec.plugins.jpcontentfeedback.aps.internalservlet.system.TokenInterceptor;
import com.agiletec.plugins.jpcontentfeedback.aps.system.JpcontentfeedbackSystemConstants;
import com.agiletec.plugins.jpcontentfeedback.aps.system.services.contentfeedback.comment.model.CommentSearchBean;
import com.agiletec.plugins.jpcontentfeedback.aps.system.services.contentfeedback.comment.model.ICommentSearchBean;
import com.agiletec.plugins.jpcontentfeedback.aps.system.services.contentfeedback.rating.IRatingManager;
import com.agiletec.plugins.jpcontentfeedback.aps.system.services.contentfeedback.rating.RatingDAO;
import com.agiletec.plugins.jpcontentfeedback.aps.system.services.contentfeedback.rating.RatingManager;
import com.agiletec.plugins.jpcontentfeedback.aps.system.services.contentfeedback.rating.model.IRating;
import com.agiletec.plugins.jpcontentfeedback.apsadmin.JpContentFeedbackApsAdminBaseTestCase;
import com.agiletec.plugins.jpcontentfeedback.apsadmin.portal.specialwidget.ContentFeedbackWidgetAction;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;


public class TestCommentFrontEndAction extends JpContentFeedbackApsAdminBaseTestCase {

  @Override
  protected void setUp() throws Exception {
        super.setUp();
        this.init();
    }

  public void testAddDeleteCommentByWidgetConfig()throws Throwable{
    String contentId = "ART1";
    try{
      Content content = this._contentManager.loadContent(contentId, true);
      ICacheManager cacheManager = (ICacheManager) ApsWebApplicationUtils.getBean(SystemConstants.CACHE_MANAGER, this.getRequest());
      PublicContentAuthorizationInfo authInfo = new PublicContentAuthorizationInfo(content);
      cacheManager.putInCache(JacmsSystemConstants.CONTENT_AUTH_INFO_CACHE_PREFIX + contentId, authInfo);
      this.setUserOnSession("admin");
      Widget widget = new Widget();
            IWidgetTypeManager widgetTypeMan =
              (IWidgetTypeManager) this.getService(SystemConstants.WIDGET_TYPE_MANAGER);
            WidgetType WidgetType = widgetTypeMan.getWidgetType("content_feedback_viewer");
            widget.setType(WidgetType);
            ApsProperties prop = new ApsProperties();
            prop.put("contentId", contentId);
            prop.put(ContentFeedbackWidgetAction.WIDGET_PARAM_COMMENT_ACTIVE, "true");
            prop.put(ContentFeedbackWidgetAction.WIDGET_PARAM_COMMENT_MODERATED, "false");
            prop.put(ContentFeedbackWidgetAction.WIDGET_PARAM_COMMENT_ANONYMOUS, "false");
            widget.setConfig(prop);
            widget.setPublishedContent(contentId);

            List<String> listaIds = this._commentManager.searchCommentIds(null);
      assertEquals(0, listaIds.size());

            RequestContext e = new RequestContext();
            e.addExtraParam(SystemConstants.EXTRAPAR_CURRENT_WIDGET, widget);
            Lang lang = new Lang();
        lang.setCode("en");
            e.addExtraParam(SystemConstants.EXTRAPAR_CURRENT_LANG, lang);
            this.getRequest().setAttribute(RequestContext.REQCTX, e);

      this.initAction("/do/jpcontentfeedback/FrontEnd/contentfeedback", "insert");
      this.addParameter("formContentId", contentId);
      this.addParameter("commentText", "testComment");

      this.setToken();

      String result1 = this.executeAction();
      assertEquals(Action.SUCCESS, result1);

      this.initAction("/do/jpcontentfeedback/FrontEnd/contentfeedback", "insert");
      assertEquals(TokenInterceptor.INVALID_TOKEN_CODE, this.executeAction());

      CommentSearchBean searchBean = new CommentSearchBean();
      searchBean.setComment("Testo ");
      listaIds = this._commentManager.searchCommentIds(null);
      assertEquals(1, listaIds.size());

      this.initAction("/do/jpcontentfeedback/FrontEnd/contentfeedback", "delete");
      this.addParameter("contentId", listaIds.get(0));
    } catch (Throwable t) {
      throw t;
    } finally{
      List<String> listaIds = this._commentManager.searchCommentIds(null);
      for (int i=0; i< listaIds.size(); i++){
        this._commentManager.deleteComment(Integer.parseInt(listaIds.get(i)));
      }
    }
  }

  private void setToken() {
    String token = TokenHelper.generateGUID();
    ActionContext.getContext().setSession(new HashMap<String, Object>());
    String tokenName = "test_tokenName";
    String tokenSessionAttributeName = TokenHelper.buildTokenSessionAttributeName(tokenName);
    ActionContext.getContext().getSession().put(tokenSessionAttributeName, token);
    this.addParameter(TokenHelper.TOKEN_NAME_FIELD, new String[]{tokenName});
    this.addParameter(tokenName, new String[]{token});
  }

  public void testAddContentRatingByShowletConfig()throws Throwable {
    String contentId = "ART1";
    try {
      Content content = this._contentManager.loadContent(contentId, true);
      ICacheManager cacheManager = (ICacheManager) ApsWebApplicationUtils.getBean(SystemConstants.CACHE_MANAGER, this.getRequest());
      PublicContentAuthorizationInfo authInfo = new PublicContentAuthorizationInfo(content);
      cacheManager.putInCache(JacmsSystemConstants.CONTENT_AUTH_INFO_CACHE_PREFIX + contentId, authInfo);
      this.setUserOnSession("admin");
      Widget showlet = new Widget();
            IWidgetTypeManager showletTypeMan =
              (IWidgetTypeManager) this.getService(SystemConstants.WIDGET_TYPE_MANAGER);
            WidgetType WidgetType = showletTypeMan.getWidgetType("content_feedback_viewer");
            showlet.setType(WidgetType);
            ApsProperties prop = new ApsProperties();
            prop.put("contentId", contentId);
            prop.put(ContentFeedbackWidgetAction.WIDGET_PARAM_COMMENT_ACTIVE, "true");
            prop.put(ContentFeedbackWidgetAction.WIDGET_PARAM_COMMENT_MODERATED, "false");
            prop.put(ContentFeedbackWidgetAction.WIDGET_PARAM_COMMENT_ANONYMOUS, "false");
            prop.put(ContentFeedbackWidgetAction.WIDGET_PARAM_RATE_COMMENT, "true");
            prop.put(ContentFeedbackWidgetAction.WIDGET_PARAM_RATE_CONTENT, "true");
            showlet.setConfig(prop);
            showlet.setPublishedContent(contentId);

            RequestContext e = new RequestContext();
            e.addExtraParam(SystemConstants.EXTRAPAR_CURRENT_WIDGET, showlet);
            Lang lang = new Lang();
        lang.setCode("en");
            e.addExtraParam(SystemConstants.EXTRAPAR_CURRENT_LANG, lang);
            this.getRequest().setAttribute(RequestContext.REQCTX, e);

            List<String> listaIds = this._commentManager.searchCommentIds(null);
      assertEquals(0, listaIds.size());

      this.initAction("/do/jpcontentfeedback/FrontEnd/contentfeedback", "insert");
      this.setToken();
      this.addParameter("formContentId", "ART1");
      this.addParameter("title", "testTitle");
      this.addParameter("commentText", "testComment");
      String result1 = this.executeAction();
      assertEquals(Action.SUCCESS, result1);

      this.initAction("/do/jpcontentfeedback/FrontEnd/contentfeedback", "insert");
      this.setToken();
      this.addParameter("formContentId", contentId);
      this.addParameter("title", "testTitle");
      this.addParameter("commentText", "testComment");
      String result2 = this.executeAction();
      assertEquals(Action.SUCCESS, result2);

      CommentSearchBean searchBean = new CommentSearchBean();
      searchBean.setComment("Testo ");

      CommentSearchBean sb = new CommentSearchBean();
      sb.setSort(ICommentSearchBean.SORT_ASC);
      listaIds = this._commentManager.searchCommentIds(sb);
      assertEquals(2, listaIds.size());

      // Inserimento votazione su commento 1
      this.initAction("/do/jpcontentfeedback/FrontEnd/contentfeedback", "insertCommentVote");
      this.setToken();
      this.addParameter("formContentId", contentId);
      this.addParameter("selectedComment", listaIds.get(0));
      this.addParameter("vote", 2);
      result2 = this.executeAction();
      assertEquals(Action.SUCCESS, result2);

      ContentFeedbackAction action = (ContentFeedbackAction)this.getAction();
      IRating ratingConten_0 = action.getCommentRating(Integer.parseInt(listaIds.get(0)));
      assertNotNull(ratingConten_0);
      assertEquals(1, ratingConten_0.getVoters());
      assertEquals(2, ratingConten_0.getSumvote());

      IRating ratingConten_1 = action.getCommentRating(Integer.parseInt(listaIds.get(1)));
      assertNull(ratingConten_1);

      IRating ratingConten = action.getContentRating();
      assertNull(ratingConten);

    // Inserimento votazione su contenuto
      this.initAction("/do/jpcontentfeedback/FrontEnd/contentfeedback", "insertVote");
      this.setToken();
      this.addParameter("formContentId", contentId);
      this.addParameter("vote", 4);
      result2 = this.executeAction();
      assertEquals(Action.SUCCESS, result2);

      ContentFeedbackAction action_1 = (ContentFeedbackAction)this.getAction();
      ratingConten_0 = action_1.getCommentRating(Integer.parseInt(listaIds.get(0)));
      assertNotNull(ratingConten_0);
      assertEquals(1, ratingConten_0.getVoters());
      assertEquals(2, ratingConten_0.getSumvote());

//      ratingConten_1 = action.getCommentRating(Integer.parseInt(listaIds.get(1)));
//      assertNull(ratingConten_1);
//
//      ratingConten = action.getContentRating();
//      assertEquals(1, ratingConten.getVoters());
//      assertEquals(4, ratingConten.getSumvote());

    } catch (Throwable t) {
      throw t;
    } finally{
      List<String> listaIds = this._commentManager.searchCommentIds(null);
      RatingDAO ratingDao = (RatingDAO) ((RatingManager)this._ratingManager).getRatingDAO();
      for (int i=0; i< listaIds.size(); i++){
        IRating rating = this._ratingManager.getCommentRating(Integer.parseInt(listaIds.get(i)));
        if (rating!=null){
          ratingDao.removeRating(rating.getCommentId());
        }
        this._commentManager.deleteComment(Integer.parseInt(listaIds.get(i)));
      }
      IRating rating = this._ratingManager.getContentRating(contentId);
      if (rating!=null){
        ((RatingDAO)ratingDao).removeContentRating(rating.getContentId());
      }
    }
  }

  public void testViewContentAndAddCommentByRequest()throws Throwable{
    String contentId = "ART1";
    try {
      Content content = this._contentManager.loadContent(contentId, true);
      ICacheManager cacheManager = (ICacheManager) ApsWebApplicationUtils.getBean(SystemConstants.CACHE_MANAGER, this.getRequest());
      PublicContentAuthorizationInfo authInfo = new PublicContentAuthorizationInfo(content);
      cacheManager.putInCache(JacmsSystemConstants.CONTENT_AUTH_INFO_CACHE_PREFIX + contentId, authInfo);
      this.setUserOnSession("admin");
      this._contentManager.loadContent(contentId, true);
      Widget showlet = new Widget();
            IWidgetTypeManager showletTypeMan =
              (IWidgetTypeManager) this.getService(SystemConstants.WIDGET_TYPE_MANAGER);
            WidgetType WidgetType = showletTypeMan.getWidgetType("content_feedback_viewer");
            showlet.setType(WidgetType);
            ApsProperties prop = new ApsProperties();
            prop.put("contentId", contentId);
            prop.put(ContentFeedbackWidgetAction.WIDGET_PARAM_COMMENT_ACTIVE, "true");
            prop.put(ContentFeedbackWidgetAction.WIDGET_PARAM_COMMENT_MODERATED, "false");
            prop.put(ContentFeedbackWidgetAction.WIDGET_PARAM_COMMENT_ANONYMOUS, "false");
            prop.put(ContentFeedbackWidgetAction.WIDGET_PARAM_RATE_COMMENT, "true");
            prop.put(ContentFeedbackWidgetAction.WIDGET_PARAM_RATE_CONTENT, "true");
            showlet.setConfig(prop);

            RequestContext e = new RequestContext();
            e.addExtraParam(SystemConstants.EXTRAPAR_CURRENT_WIDGET, showlet);
            Lang lang = new Lang();
        lang.setCode("en");
            e.addExtraParam(SystemConstants.EXTRAPAR_CURRENT_LANG, lang);
            this.getRequest().setAttribute(RequestContext.REQCTX, e);

      this.setUserOnSession("admin");
      this.initAction("/do/jpcontentfeedback/FrontEnd/contentfeedback", "intro");
      this.setToken();
      this.addParameter("formContentId", contentId);
      String result = this.executeAction();
      assertEquals(Action.SUCCESS, result);

      ContentFeedbackAction action = (ContentFeedbackAction)this.getAction();
      List<String> commentIds = action.getContentCommentIds();
      assertEquals(0, commentIds.size());

      this.initAction("/do/jpcontentfeedback/FrontEnd/contentfeedback", "insert");
      this.setToken();
      this.addParameter("formContentId", contentId);
      this.addParameter("title", "testTitle");
      this.addParameter("commentText", "testComment");
      this.setToken();
      result = this.executeAction();
      assertEquals(Action.SUCCESS, result);

      this.setUserOnSession("admin");
      this.initAction("/do/jpcontentfeedback/FrontEnd/contentfeedback", "intro");
      this.setToken();
      this.addParameter("formContentId", contentId);
      result = this.executeAction();
      assertEquals(Action.SUCCESS, result);

      action = (ContentFeedbackAction)this.getAction();
      action.setCurrentContentId(contentId);
      commentIds = action.getContentCommentIds();
      assertEquals(1, commentIds.size());

    } catch (Throwable t) {
      throw t;
    } finally{
      List<String> listaIds = this._commentManager.searchCommentIds(null);
      for (int i=0; i< listaIds.size(); i++){
        this._commentManager.deleteComment(Integer.parseInt(listaIds.get(i)));
      }
    }
  }

  private void init() throws Exception {
      try {
        this._commentManager = (ICommentManager) this.getService(JpcontentfeedbackSystemConstants.COMMENTS_MANAGER);
        this._ratingManager = (IRatingManager) this.getService(JpcontentfeedbackSystemConstants.RATING_MANAGER);
        this._contentManager = (IContentManager) this.getService(JacmsSystemConstants.CONTENT_MANAGER);
      } catch (Throwable t) {
            throw new Exception(t);
        }
    }

  private ICommentManager _commentManager = null;
  private IRatingManager _ratingManager = null;
  private IContentManager _contentManager;

}
TOP

Related Classes of com.agiletec.plugins.jpcontentfeedback.aps.system.services.contentfeedback.comment.TestCommentFrontEndAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.