US3006 - ArthurSchiavom/gestao-informacao-chao-de-fabrica--projeto-academico GitHub Wiki

US3006

1. Requisitos

Como Gestor de Chão de Fábrica, eu pretendo arquivar uma ou mais notificações de erros de processamento.

2. Análise

SSD

SSD

3. Design

3.1. Realização da Funcionalidade

SD

SD

3.2. Diagrama de Classes

CD

CD

3.3. Padrões Aplicados

Service Foi utilizado um service para efetuar o arquivamento de uma notificação

3.4. Testes

Testes NotificacaoErro

Teste 1: Garantir que não se pode arquivar notificações que já estão arquivadas

@Test
public void garantirQueNaoSePodeArquivarNotificacoesArquivadas() {
    Mockito.when(lProdRepo.containsOfIdentity(idDummy)).thenReturn(true);
    Mockito.when(msgRepo.containsOfIdentity(2L)).thenReturn(true);
    NotificacaoErro notifErro = new NotificacaoErro(idDummy, TipoErroNotificacao.DADOS_INVALIDOS, 2L,
            lProdRepo, msgRepo);
    assertTrue(notifErro.arquivar()); //Primeira arquivamento funciona porque uma notificação começa sempre ativa
    assertFalse(notifErro.arquivar()); //Segunda deve falhar porque já foi arquivada
}

Teste 2: Garantir que o estado da notificação fica como arquivado

@Test
public void garantirQueOEstadoFicaArquivado() {
    Mockito.when(lProdRepo.containsOfIdentity(idDummy)).thenReturn(true);
    Mockito.when(msgRepo.containsOfIdentity(2L)).thenReturn(true);
    NotificacaoErro notifErro = new NotificacaoErro(idDummy, TipoErroNotificacao.DADOS_INVALIDOS, 2L,
            lProdRepo, msgRepo);
    notifErro.arquivar();
    assertTrue(notifErro.isArquivado());
}

Testes ServicoArquivacaoNotificacoesErro

Teste 1: Garantir que o id da notificação não pode ser null

@Test(expected = IllegalArgumentException.class)
public void garantirQueIdNaoPodeSerNull() {
    servico.arquivar(null);
}

Teste 2: Garantir que o id da notificação existe na base de dados

@Test(expected = IllegalArgumentException.class)
public void garantirQueIdExisteNaBaseDeDados() {
    Mockito.when(repo.ofIdentity(2L)).thenReturn(null);
    servico.arquivar(2L);
}

Teste 3: Garantir que não se pode arquivar uma notificação que já foi arquivada

@Test(expected = IllegalArgumentException.class)
public void garantirQueNaoSePodeArquivarNotificacaoArquivada() {
    Mockito.when(lProdRepo.containsOfIdentity(idDummy)).thenReturn(true);
    Mockito.when(msgRepo.containsOfIdentity(2L)).thenReturn(true);
    NotificacaoErro notifErro = new NotificacaoErro(idDummy, TipoErroNotificacao.DADOS_INVALIDOS, 2L,
            lProdRepo, msgRepo);
    notifErro.arquivar();
    Mockito.when(repo.ofIdentity(2L)).thenReturn(Optional.of(notifErro));
    servico.arquivar(2L);
}

*Teste 4: Garantir que a notificação fica marcada como estando arquivada

@Test
public void garantirQueNotificacaoFicaArquivada() {
    Mockito.when(lProdRepo.containsOfIdentity(idDummy)).thenReturn(true);
    Mockito.when(msgRepo.containsOfIdentity(2L)).thenReturn(true);
    NotificacaoErro notifErro = new NotificacaoErro(idDummy, TipoErroNotificacao.DADOS_INVALIDOS, 2L,
            lProdRepo, msgRepo);
    Mockito.when(repo.ofIdentity(2L)).thenReturn(Optional.of(notifErro));
    Mockito.when(repo.save(notifErro)).thenReturn(notifErro);
    NotificacaoErro arquivada = servico.arquivar(2L);
    assertTrue(notifErro.isArquivado());
}

4. Integração/Demonstração

n/a

5. Observações

n/a

⚠️ **GitHub.com Fallback** ⚠️