Package ch.entwine.weblounge.common.impl.content.page

Source Code of ch.entwine.weblounge.common.impl.content.page.PageletImplTest

/*
*  Weblounge: Web Content Management System
*  Copyright (c) 2003 - 2011 The Weblounge Team
*  http://entwinemedia.com/weblounge
*
*  This program is free software; you can redistribute it and/or
*  modify it under the terms of the GNU Lesser General Public License
*  as published by the Free Software Foundation; either version 2
*  of the License, or (at your option) any later version.
*
*  This program is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU Lesser General Public License for more details.
*
*  You should have received a copy of the GNU Lesser General Public License
*  along with this program; if not, write to the Free Software Foundation
*  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/

package ch.entwine.weblounge.common.impl.content.page;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

import ch.entwine.weblounge.common.Times;
import ch.entwine.weblounge.common.content.ResourceURI;
import ch.entwine.weblounge.common.content.page.PageletURI;
import ch.entwine.weblounge.common.impl.language.LanguageImpl;
import ch.entwine.weblounge.common.impl.security.SystemRole;
import ch.entwine.weblounge.common.impl.security.UserImpl;
import ch.entwine.weblounge.common.language.Language;
import ch.entwine.weblounge.common.security.Permission;
import ch.entwine.weblounge.common.security.Securable;
import ch.entwine.weblounge.common.security.SecurityListener;
import ch.entwine.weblounge.common.security.SystemPermission;
import ch.entwine.weblounge.common.security.User;
import ch.entwine.weblounge.common.site.Site;

import org.easymock.EasyMock;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;

/**
* Test case for the implementation at
* {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl}.
*/
public class PageletImplTest {

  /** Page identifier */
  protected ResourceURI uri = null;

  /** Associated site */
  protected Site site = null;

  /** Path to the page */
  protected String path = "/test";

  /** Enclosing composer */
  protected String composer = "main";

  /** Pagelet position */
  protected int position = 1;

  /** The pagelet location */
  protected PageletURIImpl location = null;

  /** Module identifier */
  protected String module = "text";

  /** Pagelet identifier */
  protected String id = "title";

  /** Property name */
  protected String propertyName = "headline";

  /** Property value */
  protected String propertyValue = "true";

  /** Property name */
  protected String multivaluePropertyName = "tags";

  /** Property values */
  protected String[] multivaluePropertyValue = new String[] { "a", "b" };

  /** Name of the content */
  protected String contentName = "title";

  /** German content */
  protected String germanContent = "Ein amüsanter Titel";

  /** French content */
  protected String frenchContent = "Un titre joyeux";

  /** Lonely content name */
  protected String lonelyContentName = "credits";

  /** Lonely content name */
  protected String lonelyContent = "Friedrich Nietzsche";

  /** Content name */
  protected String multivalueContentName = "tag";

  /** Content values */
  protected String[] multivalueGermanContent = new String[] { "Neu", "Technik" };

  /** Content values */
  protected String[] multivalueFrenchContent = new String[] {
      "Nouveau",
      "Technique" };

  /** The German language */
  protected Language german = new LanguageImpl(new Locale("de"));

  /** The French language */
  protected Language french = new LanguageImpl(new Locale("fr"));

  /** The Italian language */
  protected Language italian = new LanguageImpl(new Locale("it"));

  /** Content creation date */
  protected Date creationDate = new Date(1231358741000L);

  /** German modification date */
  protected Date germanModificationDate = new Date(1231358741000L);

  /** French modification date */
  protected Date frenchModificationDate = new Date(1234994800000L);

  /** Publishing start date */
  protected Date publishingStartDate = new Date(1231358741000L);

  /** Publishing end date */
  protected Date publishingEndDate = new Date(1234994800000L);

  /** Some date after the latest modification date */
  protected Date futureDate = new Date(2000000000000L);

  /** One day after the date identified by futureDate */
  protected Date dayAfterFutureDate = new Date(futureDate.getTime() + Times.MS_PER_DAY);

  /** One day before the date identified by futureDate */
  protected Date dayBeforeFutureDate = new Date(2000000000000L - Times.MS_PER_DAY);

  /** Owner */
  protected User john = new UserImpl("john", "testland", "John Doe");

  /** German editor */
  protected User hans = new UserImpl("hans", "testland", "Hans Muster");

  /** French editor */
  protected User amelie = new UserImpl("amelie", "testland", "Amélie Poulard");

  /** The pagelet instance under test */
  protected PageletImpl pagelet = null;

  /**
   * @throws java.lang.Exception
   */
  @Before
  public void setUp() throws Exception {
    setupPreliminaries();
    pagelet = new PageletImpl(location, module, id);
    pagelet.setContent(contentName, germanContent, german);
    pagelet.setContent(contentName, frenchContent, french);
    pagelet.setContent(lonelyContentName, lonelyContent, german);
    for (String s : multivalueGermanContent)
      pagelet.setContent(multivalueContentName, s, german);
    for (String s : multivalueFrenchContent)
      pagelet.setContent(multivalueContentName, s, french);
    pagelet.setProperty(propertyName, propertyValue);
    for (String s : multivaluePropertyValue)
      pagelet.addProperty(multivaluePropertyName, s);
    pagelet.setOwner(john);
    pagelet.setCreated(hans, creationDate);
    pagelet.setModified(hans, germanModificationDate, german);
    pagelet.setModified(amelie, frenchModificationDate, french);
    pagelet.setPublished(hans, publishingStartDate, publishingEndDate);
  }

  /**
   * Does some setup that is common to both the simple pagelet test and the one
   * that is reading in from XML.
   */
  public void setupPreliminaries() {
    site = EasyMock.createNiceMock(Site.class);
    uri = new PageURIImpl(site, path);
    location = new PageletURIImpl(uri, composer, position);
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#hashCode()}
   * .
   */
  @Test
  public void testHashCode() {
    assertEquals(location.hashCode(), pagelet.hashCode());
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#getModule()}
   * .
   */
  @Test
  public void testGetModule() {
    assertEquals(module, pagelet.getModule());
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#getIdentifier()}
   * .
   */
  @Test
  public void testGetIdentifier() {
    assertEquals(id, pagelet.getIdentifier());
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#getPropertyNames()}
   * .
   */
  @Test
  public void testGetPropertyNames() {
    assertEquals(2, pagelet.getPropertyNames().length);
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#getProperty(java.lang.String)}
   * .
   */
  @Test
  public void testGetProperty() {
    assertEquals(propertyValue, pagelet.getProperty(propertyName));
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#isMultiValueProperty(java.lang.String)}
   * .
   */
  @Test
  public void testIsMultiValueProperty() {
    assertFalse(pagelet.isMultiValueProperty(propertyName));
    assertTrue(pagelet.isMultiValueProperty(multivaluePropertyName));
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#getMultiValueProperty(java.lang.String)}
   * .
   */
  @Test
  public void testGetMultiValueProperty() {
    assertEquals(2, pagelet.getMultiValueProperty(multivaluePropertyName).length);
    assertEquals(multivaluePropertyValue[0], pagelet.getMultiValueProperty(multivaluePropertyName)[0]);
    assertEquals(multivaluePropertyValue[1], pagelet.getMultiValueProperty(multivaluePropertyName)[1]);
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#getOwner()}
   * .
   */
  @Test
  public void testGetCreator() {
    assertEquals(hans, pagelet.getCreator());
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#getPublishFrom()}
   * .
   */
  @Test
  public void testGetPublishFrom() {
    assertEquals(publishingStartDate, pagelet.getPublishFrom());
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#getPublishTo()}
   * .
   */
  @Test
  public void testGetPublishTo() {
    assertEquals(publishingEndDate, pagelet.getPublishTo());
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#getPublisher()}
   * .
   */
  @Test
  public void testGetPublisher() {
    assertEquals(hans, pagelet.getPublisher());
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#check(ch.entwine.weblounge.common.security.Permission, ch.entwine.weblounge.common.security.Authority)}
   * .
   */
  @Test
  @Ignore
  public void testCheckPermissionAuthority() {
    fail("Not yet implemented"); // TODO
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#check(ch.entwine.weblounge.common.security.PermissionSet, ch.entwine.weblounge.common.security.Authority)}
   * .
   */
  @Test
  @Ignore
  public void testCheckPermissionSetAuthority() {
    fail("Not yet implemented"); // TODO
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#checkOne(ch.entwine.weblounge.common.security.Permission, ch.entwine.weblounge.common.security.Authority[])}
   * .
   */
  @Test
  @Ignore
  public void testCheckOne() {
    fail("Not yet implemented"); // TODO
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#checkAll(ch.entwine.weblounge.common.security.Permission, ch.entwine.weblounge.common.security.Authority[])}
   * .
   */
  @Test
  @Ignore
  public void testCheckAll() {
    fail("Not yet implemented"); // TODO
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#permissions()}
   * .
   */
  @Test
  @Ignore
  public void testPermissions() {
    fail("Not yet implemented"); // TODO
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#addSecurityListener(ch.entwine.weblounge.common.security.SecurityListener)}
   * .
   */
  @Test
  @Ignore
  public void testAddSecurityListener() {
    final List<String> result = new ArrayList<String>();
    pagelet.addSecurityListener(new SecurityListener() {
      public void ownerChanged(Securable source, User newOwner, User oldOwner) {
        result.add("Owner changed");
      }

      public void permissionChanged(Securable source, Permission p) {
        result.add("Permission changed");
      }
    });
    pagelet.setOwner(john);
    pagelet.allow(SystemPermission.READ, SystemRole.EDITOR);
    assertEquals(2, result.size());
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#removeSecurityListener(ch.entwine.weblounge.common.security.SecurityListener)}
   * .
   */
  @Test
  public void testRemoveSecurityListener() {
    final List<String> result = new ArrayList<String>();
    SecurityListener listener = new SecurityListener() {
      public void ownerChanged(Securable source, User newOwner, User oldOwner) {
        result.add("Owner changed");
      }

      public void permissionChanged(Securable source, Permission p) {
        result.add("Permission changed");
      }
    };
    pagelet.addSecurityListener(listener);
    pagelet.removeSecurityListener(listener);
    pagelet.setOwner(john);
    pagelet.allow(SystemPermission.READ, SystemRole.EDITOR);
    assertEquals(0, result.size());
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#getURI()}.
   */
  @Test
  public void testGetLocation() {
    assertEquals(location, pagelet.getURI());
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#getContentNames(Language)}
   * .
   */
  @Test
  public void textGetContentNames() {
    assertEquals(3, pagelet.getContentNames(german).length);
    assertEquals(2, pagelet.getContentNames(french).length);
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#isMultiValueContent(java.lang.String)}
   * .
   */
  @Test
  public void testIsMultiValueContent() {
    assertFalse(pagelet.isMultiValueContent(contentName));
    assertTrue(pagelet.isMultiValueContent(multivalueContentName));
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#getContent(java.lang.String, ch.entwine.weblounge.common.language.Language, boolean)}
   * .
   */
  @Test
  public void testGetContentStringLanguageBoolean() {
    assertEquals(germanContent, pagelet.getContent(contentName, german, true));
    assertEquals(germanContent, pagelet.getContent(contentName, german, false));
    assertEquals(frenchContent, pagelet.getContent(contentName, french, true));
    assertEquals(frenchContent, pagelet.getContent(contentName, french, false));

    // Test unsupported languages
    assertEquals(germanContent, pagelet.getContent(contentName, italian, false));
    assertTrue(pagelet.getContent(contentName, italian, true) == null);

    // Test lonely content (credits), available in German only
    assertEquals(lonelyContent, pagelet.getContent(lonelyContentName, german, true));
    assertEquals(lonelyContent, pagelet.getContent(lonelyContentName, german, false));
    assertTrue(pagelet.getContent(lonelyContentName, french, true) == null);
    assertTrue(pagelet.getContent(lonelyContentName, french, false) == null);
    assertTrue(pagelet.getContent(lonelyContentName, italian, true) == null);
    assertEquals(lonelyContent, pagelet.getContent(lonelyContentName, italian, false));
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#getContent(java.lang.String, ch.entwine.weblounge.common.language.Language)}
   * .
   */
  @Test
  public void testGetContentStringLanguage() {
    assertEquals(germanContent, pagelet.getContent(contentName, german));
    assertEquals(frenchContent, pagelet.getContent(contentName, french));

    // Test unsupported languages
    assertEquals(germanContent, pagelet.getContent(contentName, italian));

    // Test lonely content (credits), available in German only
    assertEquals(lonelyContent, pagelet.getContent(lonelyContentName, german));
    assertTrue(pagelet.getContent(lonelyContentName, french) == null);
    assertEquals(lonelyContent, pagelet.getContent(lonelyContentName, italian));
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#getContent(java.lang.String)}
   * .
   */
  @Test
  public void testGetContentString() {
    assertEquals(germanContent, pagelet.getContent(contentName));
    assertEquals(lonelyContent, pagelet.getContent(lonelyContentName));

    pagelet.switchTo(french);
    assertEquals(frenchContent, pagelet.getContent(contentName));
    assertTrue(pagelet.getContent(lonelyContentName) == null);

    // Test unsupported languages.
    // Switching to Italian will actually switch to German (original language)
    pagelet.switchTo(italian);
    assertEquals(germanContent, pagelet.getContent(contentName));
    assertEquals(lonelyContent, pagelet.getContent(lonelyContentName));
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#getMultiValueContent(java.lang.String, ch.entwine.weblounge.common.language.Language, boolean)}
   * .
   */
  @Test
  public void testGetMultiValueContentStringLanguageBoolean() {
    assertEquals(2, pagelet.getMultiValueContent(multivalueContentName, german, true).length);
    assertEquals(2, pagelet.getMultiValueContent(multivalueContentName, german, false).length);
    assertEquals(multivalueGermanContent[0], pagelet.getMultiValueContent(multivalueContentName, german, true)[0]);
    assertEquals(multivalueGermanContent[0], pagelet.getMultiValueContent(multivalueContentName, german, false)[0]);
    assertEquals(multivalueGermanContent[1], pagelet.getMultiValueContent(multivalueContentName, german, true)[1]);
    assertEquals(multivalueGermanContent[1], pagelet.getMultiValueContent(multivalueContentName, german, false)[1]);

    // French
    assertEquals(2, pagelet.getMultiValueContent(multivalueContentName, french, true).length);
    assertEquals(2, pagelet.getMultiValueContent(multivalueContentName, french, false).length);
    assertEquals(multivalueFrenchContent[0], pagelet.getMultiValueContent(multivalueContentName, french, true)[0]);
    assertEquals(multivalueFrenchContent[0], pagelet.getMultiValueContent(multivalueContentName, french, false)[0]);
    assertEquals(multivalueFrenchContent[1], pagelet.getMultiValueContent(multivalueContentName, french, true)[1]);
    assertEquals(multivalueFrenchContent[1], pagelet.getMultiValueContent(multivalueContentName, french, false)[1]);

    // Test unsupported languages
    assertEquals(0, pagelet.getMultiValueContent(multivalueContentName, italian, true).length);
    assertEquals(2, pagelet.getMultiValueContent(multivalueContentName, italian, false).length);
    assertEquals(multivalueGermanContent[0], pagelet.getMultiValueContent(multivalueContentName, italian, false)[0]);
    assertEquals(multivalueGermanContent[1], pagelet.getMultiValueContent(multivalueContentName, italian, false)[1]);
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#getMultiValueContent(java.lang.String, ch.entwine.weblounge.common.language.Language)}
   * .
   */
  @Test
  public void testGetMultiValueContentStringLanguage() {
    assertEquals(2, pagelet.getMultiValueContent(multivalueContentName, german).length);
    assertEquals(multivalueGermanContent[0], pagelet.getMultiValueContent(multivalueContentName, german)[0]);
    assertEquals(multivalueGermanContent[1], pagelet.getMultiValueContent(multivalueContentName, german)[1]);

    // French
    assertEquals(2, pagelet.getMultiValueContent(multivalueContentName, french).length);
    assertEquals(multivalueFrenchContent[0], pagelet.getMultiValueContent(multivalueContentName, french)[0]);
    assertEquals(multivalueFrenchContent[1], pagelet.getMultiValueContent(multivalueContentName, french)[1]);

    // Test unsupported languages
    assertEquals(2, pagelet.getMultiValueContent(multivalueContentName, italian).length);
    assertEquals(multivalueGermanContent[0], pagelet.getMultiValueContent(multivalueContentName, italian)[0]);
    assertEquals(multivalueGermanContent[1], pagelet.getMultiValueContent(multivalueContentName, italian)[1]);
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#getMultiValueContent(java.lang.String)}
   * .
   */
  @Test
  public void testGetMultiValueContentString() {
    assertEquals(2, pagelet.getMultiValueContent(multivalueContentName).length);
    assertEquals(multivalueGermanContent[0], pagelet.getMultiValueContent(multivalueContentName)[0]);
    assertEquals(multivalueGermanContent[1], pagelet.getMultiValueContent(multivalueContentName)[1]);

    // French
    pagelet.switchTo(french);
    assertEquals(2, pagelet.getMultiValueContent(multivalueContentName).length);
    assertEquals(multivalueFrenchContent[0], pagelet.getMultiValueContent(multivalueContentName)[0]);
    assertEquals(multivalueFrenchContent[1], pagelet.getMultiValueContent(multivalueContentName)[1]);

    // Test unsupported languages
    // Switching to Italian will actually switch to German (original language)
    pagelet.switchTo(italian);
    assertEquals(2, pagelet.getMultiValueContent(multivalueContentName, italian).length);
    assertEquals(multivalueGermanContent[0], pagelet.getMultiValueContent(multivalueContentName)[0]);
    assertEquals(multivalueGermanContent[1], pagelet.getMultiValueContent(multivalueContentName)[1]);
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#equals(java.lang.Object)}
   * .
   */
  @Test
  public void testEqualsObject() {
    assertTrue(pagelet.equals(new PageletImpl(module, id)));
    assertFalse(pagelet.equals(new PageletImpl(module, "x")));
    assertFalse(pagelet.equals(new PageletImpl("x", id)));
    assertTrue(pagelet.equals(new PageletImpl(location, module, id)));
    PageletURI otherLocation = new PageletURIImpl(uri, composer, position + 1);
    assertFalse(pagelet.equals(new PageletImpl(otherLocation, module, id)));
  }

  /**
   * Test method for
   * {@link ch.entwine.weblounge.common.impl.content.page.PageletImpl#compareTo(ch.entwine.weblounge.common.language.Localizable, ch.entwine.weblounge.common.language.Language)}
   * .
   */
  @Test
  public void testCompareTo() {
    PageletURI otherLocation = new PageletURIImpl(uri, composer, position + 1);
    assertEquals(0, pagelet.compareTo(new PageletImpl(module, id), german));
    assertEquals(-1, pagelet.compareTo(new PageletImpl(otherLocation, module, id), german));
  }

}
TOP

Related Classes of ch.entwine.weblounge.common.impl.content.page.PageletImplTest

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.