@Test
  public void testVerifyAddVoteReplacesExistingVote() throws Exception {
    List<Long> voteList = Lists.newArrayList();
    voteList.add(firstEvent.getVoteCategories().get(0).getVoteOptions().get(0).getId());
    voteList.add(firstEvent.getVoteCategories().get(1).getVoteOptions().get(0).getId());
    voteService.addVotes(firstEvent, voteList, voter);
    // eventDao.update(firstEvent);

    VoteOption vo1o1 =
        voteOptionDao.find(firstEvent.getVoteCategories().get(0).getVoteOptions().get(0).getId());
    VoteOption vo2o1 =
        voteOptionDao.find(firstEvent.getVoteCategories().get(1).getVoteOptions().get(0).getId());

    assertTrue(vo1o1.getVotes().size() == 1);
    assertTrue(vo2o1.getVotes().size() == 1);

    voteList.clear();

    voteList.add(firstEvent.getVoteCategories().get(0).getVoteOptions().get(1).getId());
    voteList.add(firstEvent.getVoteCategories().get(1).getVoteOptions().get(1).getId());

    voteService.addVotes(firstEvent, voteList, voter);

    vo1o1 =
        voteOptionDao.find(firstEvent.getVoteCategories().get(0).getVoteOptions().get(0).getId());
    vo2o1 =
        voteOptionDao.find(firstEvent.getVoteCategories().get(1).getVoteOptions().get(0).getId());
    VoteOption vo1o2 =
        voteOptionDao.find(firstEvent.getVoteCategories().get(0).getVoteOptions().get(1).getId());
    VoteOption vo2o2 =
        voteOptionDao.find(firstEvent.getVoteCategories().get(1).getVoteOptions().get(1).getId());

    assertTrue(vo1o1.getVotes().size() == 0);
    assertTrue(vo2o1.getVotes().size() == 0);
    assertTrue(vo1o2.getVotes().size() == 1);
    assertTrue(vo2o2.getVotes().size() == 1);
  }
  @Test
  public void testRepeatCategoriesRejectsAll() {
    List<Long> voteList = Lists.newArrayList();
    // repeat all categories or one category
    voteList.add(firstEvent.getVoteCategories().get(0).getVoteOptions().get(0).getId());
    voteList.add(firstEvent.getVoteCategories().get(1).getVoteOptions().get(1).getId());
    voteList.add(firstEvent.getVoteCategories().get(0).getVoteOptions().get(1).getId());
    voteList.add(firstEvent.getVoteCategories().get(1).getVoteOptions().get(0).getId());

    try {
      voteService.addVotes(firstEvent, voteList, voter);
      fail("should not succeed");
    } catch (Exception e) {
      assertTrue(e.getMessage().contains("Invalid voting"));
    }
  }
  @Test
  public void testValidUserPrivateEvent() throws Exception {
    privateEvent.addEventUser(voter);

    List<Long> voteList = Lists.newArrayList();
    voteList.add(privateEvent.getVoteCategories().get(0).getVoteOptions().get(0).getId());
    voteList.add(privateEvent.getVoteCategories().get(1).getVoteOptions().get(1).getId());

    voteService.addVotes(privateEvent, voteList, voter);

    VoteOption vo1o1 =
        voteOptionDao.find(privateEvent.getVoteCategories().get(0).getVoteOptions().get(0).getId());
    VoteOption vo2o1 =
        voteOptionDao.find(privateEvent.getVoteCategories().get(1).getVoteOptions().get(1).getId());

    assertTrue(vo1o1.getVotes().size() == 1);
    assertTrue(vo2o1.getVotes().size() == 1);
  }
  @Test
  public void testVerifyAddVoteRecordsVote() throws Exception {
    // test firstEvent, secondEvent
    List<Long> voteList = Lists.newArrayList();
    voteList.add(firstEvent.getVoteCategories().get(0).getVoteOptions().get(0).getId());
    voteList.add(firstEvent.getVoteCategories().get(1).getVoteOptions().get(1).getId());
    voteService.addVotes(firstEvent, voteList, voter);

    // eventDao.update(secondEvent);

    VoteOption vo1o1 =
        voteOptionDao.find(firstEvent.getVoteCategories().get(0).getVoteOptions().get(0).getId());
    VoteOption vo2o1 =
        voteOptionDao.find(firstEvent.getVoteCategories().get(1).getVoteOptions().get(1).getId());

    assertTrue(vo1o1.getVotes().size() == 1);
    assertTrue(vo2o1.getVotes().size() == 1);
  }
  @Test
  public void testInvalidUserPrivateEvent() throws Exception {

    try {
      List<Long> voteList = Lists.newArrayList();
      voteList.add(privateEvent.getVoteCategories().get(0).getVoteOptions().get(0).getId());
      voteList.add(privateEvent.getVoteCategories().get(1).getVoteOptions().get(1).getId());

      voteService.addVotes(privateEvent, voteList, voter);

      VoteOption vo1o1 =
          voteOptionDao.find(
              privateEvent.getVoteCategories().get(0).getVoteOptions().get(0).getId());
      VoteOption vo2o1 =
          voteOptionDao.find(
              privateEvent.getVoteCategories().get(1).getVoteOptions().get(1).getId());

      assertTrue(vo1o1.getVotes().size() == 1);
      assertTrue(vo2o1.getVotes().size() == 1);

    } catch (Exception e) {
      assertTrue(e.getMessage().contains("Invalid event for user"));
    }
  }