/**
   * 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));
  }
  /**
   * Verifica il comportamento del metodo doAction nel momento in cui viene invocato con una
   * richiesta contenente tutti i parametri necessari per portare a termine con successo
   * l'operazione. In particolare il test verifica che il testo stampato sulla risposta HTTP sia,
   * come desiderato, la stringa 'true'. Si verifica inoltre che il sistema di persistenza sia
   * utilizzato per estrarre i dati corrispondenti all'utente, al contatto e al gruppo contenuti
   * nella richiesta, che sia effettuata un'operazione di rimozione della entry e che venga
   * effettuato l'aggiornamento dell'utente la cui rubrica è soggetta a modifica.
   *
   * @author Diego Beraldin
   * @version 2.0
   */
  @Test
  public void testDeleteCorrectContact() throws Exception {
    // invoca il metodo da testare
    tester.doAction(request, response);

    // verifica l'output ottenuto
    writer.flush();
    String responseText = writer.toString();
    assertEquals("true", 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);
    verify(user).getAddressBook();
    verify(entry).getContact();
    verify(entry).getGroup();
    verify(entry).getOwner();
    //		verify(user).removeAddressBookEntry(entry);
    verify(dao).delete(entry);
    verify(dao).update(user);
  }
  /**
   * Verifica il comportamento del metodo doAction nel momento in cui esso è invocato con una
   * richiesta HTTP che non contiene tutti i parametri necessari per portare a termine con successo
   * l'operazione. In tal caso il test verifica che il testo stampato sulla risposta sia
   * effettivamente 'null', come desiderato in questo caso e che non sia effettuata ALCUNA
   * operazione sul gestore di persistenza dei dati.
   *
   * @author Diego Beraldin
   * @version 2.0
   */
  @Test
  public void testWrongData() throws Exception {
    // impedisce di recuperare l'utente
    when(request.getParameter("contactId")).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, never()).getParameter("groupId");
    verifyZeroInteractions(dao);
    verifyZeroInteractions(user);
    verifyZeroInteractions(entry);
  }