/**
   * Test subscribe.
   *
   * @throws Exception - if something is wrong this exception is thrown.
   */
  @Test
  public void testSubscribe() throws Exception {
    User user = getUser(userDao, "subuser1");
    CollectionItem root = (CollectionItem) contentDao.getRootItem(user);
    CollectionItem collection = getCollection(root, "subcoll1");
    Ticket ticket = generateTicket(collection, user);

    CollectionSubscription sub1 = new HibCollectionSubscription();
    sub1.setDisplayName("sub1");
    sub1.setCollection(collection);
    sub1.setTicket(ticket);
    user.addSubscription(sub1);
    userDao.updateUser(user);

    clearSession();

    user = getUser(userDao, "subuser1");

    Assert.assertFalse("no subscriptions saved", user.getCollectionSubscriptions().isEmpty());

    CollectionSubscription querySub = user.getSubscription("sub1");
    Assert.assertNotNull("sub1 not found", querySub);
    Assert.assertEquals("sub1 not same subscriber", user.getUid(), querySub.getOwner().getUid());
    Assert.assertEquals(
        "sub1 not same collection", collection.getUid(), querySub.getCollectionUid());
    Assert.assertEquals("sub1 not same ticket", ticket.getKey(), querySub.getTicketKey());

    querySub.setDisplayName("sub2");
    userDao.updateUser(user);

    clearSession();

    user = getUser(userDao, "subuser1");

    querySub = user.getSubscription("sub1");
    Assert.assertNull("sub1 mistakenly found", querySub);

    querySub = user.getSubscription("sub2");
    Assert.assertNotNull("sub2 not found", querySub);

    user.removeSubscription(querySub);
    userDao.updateUser(user);

    clearSession();

    user = getUser(userDao, "subuser1");

    querySub = user.getSubscription("sub1");
    Assert.assertNull("sub1 mistakenly found", querySub);

    querySub = user.getSubscription("sub2");
    Assert.assertNull("sub2 mistakenly found", querySub);
  }