/**
   * Riconfigura il comportamento dei mock e inizializza l'oggetto da testare prima di ognuna delle
   * verifica contenuta in questo caso di test.
   *
   * @author Diego Beraldin
   * @version 2.0
   */
  @Before
  public void setUp() throws Exception {
    // configura il comportamento della richiesta
    when(request.getParameter("contactId")).thenReturn(contactId.toString());
    when(request.getParameter("groupId")).thenReturn(groupId.toString());
    // configura il comportamento della risposta
    writer = new StringWriter();
    when(response.getWriter()).thenReturn(new PrintWriter(writer));
    // configura il comportamento del gestore di persistenza
    when(dao.getUserData(username)).thenReturn(user);
    when(dao.getUserData(contactId)).thenReturn(contact);
    when(dao.getGroup(groupId)).thenReturn(group);
    // configura il comportamento della voce
    when(entry.getContact()).thenReturn(contact);
    when(entry.getGroup()).thenReturn(group);
    when(entry.getOwner()).thenReturn(user);
    // configura il comportamento dell'utente e della sua rubrica
    entrySet = new HashSet<IAddressBookEntry>();
    entrySet.add(entry);
    when(user.getAddressBook()).thenReturn(entrySet);
    // inizializza l'oggetto da testare
    tester =
        new DeleteFromGroupController() {
          @Override
          protected DataPersistanceManager getDAOFactory() {
            return dao;
          }

          @Override
          protected String getUserMail() {
            return username;
          }
        };
  }
  /**
   * Verifica il comportamento del metodo doAction nel momento in cui il gruppo da cui si richiede
   * la cancellazione di un contatto non corrisponde ad alcuno dei gruppo che sono presenti nel
   * database del sistema. Il test verifica che in questo caso il testo stampato sulla risposta HTTP
   * sia, come desiderato, la stringa 'null' e che non siano MAI effettuate operazioni di
   * aggiornamento dei dati dell'utente che ha richiesto la cancellazione e che non sia cancellata
   * alcuna voce dalla rubrica.
   *
   * @author Diego Beraldin
   * @version 2.0
   */
  @Test
  public void testDeleteNotExistGroup() throws Exception {
    // impedisce di recuperare l'utente
    when(dao.getGroup(groupId)).thenReturn(null);

    // invoca il metodo da testare
    tester.doAction(request, response);

    // verifica l'output ottenuto
    writer.flush();
    String responseText = writer.toString();
    assertEquals("null", responseText);

    // verifica il corretto utilizzo dei mock
    verify(response).getWriter();
    verify(request).getParameter("contactId");
    verify(request).getParameter("groupId");
    verify(dao).getUserData(username);
    verify(dao).getUserData(contactId);
    verify(dao).getGroup(groupId);
    verifyZeroInteractions(user);
    verifyZeroInteractions(entry);
    verify(dao, never()).delete(any(IAddressBookEntry.class));
    verify(dao, never()).update(any(IUserData.class));
  }