Skip to content

Commit 035b50e

Browse files
committed
Projeto finalizado com sucesso.
1 parent 4ee230b commit 035b50e

File tree

4 files changed

+86
-3
lines changed

4 files changed

+86
-3
lines changed

TaskManagement/TaskManagement.Api/appsettings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"ConnectionStrings": {
3-
"DefaultConnection": "Host=pgsql.avbc.dev;Port=5432;Database=avbc1;Username=avbc1;Password=Test01Api25;Pooling=true;SSL Mode=Prefer;Trust Server Certificate=true;SearchPath=taskmanagement"
3+
"DefaultConnection": "Host=localhost;Port=5432;Database=bancodedados;Username=usuario;Password=senha;Pooling=true;SSL Mode=Prefer;Trust Server Certificate=true;SearchPath=taskmanagement"
44
},
55
"Logging": {
66
"LogLevel": {

TaskManagement/TaskManagement.Application.UnitTests/Testes/Services/ProjetoServiceTests.cs

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,40 @@
1010

1111
namespace TaskManagement.Application.UnitTests.Testes.Services
1212
{
13+
/// <summary>
14+
/// Classe de testes unitários para <see cref="ProjetoService"/>.
15+
/// Valida regras de negócio relacionadas à criação, atualização, remoção e consulta de projetos.
16+
/// </summary>
1317
public class ProjetoServiceTests
1418
{
19+
/// <summary>
20+
/// Mock da unidade de trabalho que simula os repositórios e persistência.
21+
/// </summary>
1522
private readonly Mock<IUnitOfWork> _unitOfWorkMock;
23+
24+
/// <summary>
25+
/// Mock do AutoMapper utilizado para conversão entre entidades e view models.
26+
/// </summary>
1627
private readonly Mock<IMapper> _mapperMock;
28+
29+
/// <summary>
30+
/// Instância do serviço de projeto sendo testado.
31+
/// </summary>
1732
private readonly ProjetoService _service;
1833

34+
/// <summary>
35+
/// Inicializa os mocks e a instância do serviço para os testes.
36+
/// </summary>
1937
public ProjetoServiceTests()
2038
{
2139
_unitOfWorkMock = new Mock<IUnitOfWork>();
2240
_mapperMock = new Mock<IMapper>();
2341
_service = new ProjetoService(_unitOfWorkMock.Object, _mapperMock.Object);
2442
}
2543

44+
/// <summary>
45+
/// Verifica se a tentativa de remover um projeto com tarefas pendentes lança exceção.
46+
/// </summary>
2647
[Fact]
2748
public async Task RemoverProjeto_DeveFalhar_SeTarefaPendente()
2849
{
@@ -34,6 +55,9 @@ public async Task RemoverProjeto_DeveFalhar_SeTarefaPendente()
3455
Assert.Equal("Projeto possui tarefas pendentes. Conclua ou remova as tarefas antes de excluir o projeto.", ex.Message);
3556
}
3657

58+
/// <summary>
59+
/// Verifica se a criação de projeto falha quando já existe um nome duplicado para o mesmo usuário.
60+
/// </summary>
3761
[Fact]
3862
public async Task CriarProjeto_DeveFalhar_SeNomeDuplicado()
3963
{
@@ -44,7 +68,9 @@ public async Task CriarProjeto_DeveFalhar_SeNomeDuplicado()
4468
Assert.Equal("Já existe um projeto com esse nome para o usuário.", ex.Message);
4569
}
4670

47-
71+
/// <summary>
72+
/// Verifica se a criação de projeto funciona corretamente quando não há conflito de nome.
73+
/// </summary>
4874
[Fact]
4975
public async Task CriarProjeto_DeveFuncionar_SeNomeNaoDuplicado()
5076
{
@@ -60,6 +86,9 @@ public async Task CriarProjeto_DeveFuncionar_SeNomeNaoDuplicado()
6086
_unitOfWorkMock.Verify(u => u.CommitAsync(), Times.Once);
6187
}
6288

89+
/// <summary>
90+
/// Verifica se a atualização de projeto funciona corretamente com dados válidos.
91+
/// </summary>
6392
[Fact]
6493
public async Task AtualizarProjeto_DeveFuncionar_SeDadosValidos()
6594
{
@@ -80,6 +109,9 @@ public async Task AtualizarProjeto_DeveFuncionar_SeDadosValidos()
80109
_unitOfWorkMock.Verify(u => u.CommitAsync(), Times.Once);
81110
}
82111

112+
/// <summary>
113+
/// Verifica se a consulta de projeto completo retorna dados quando o projeto existe.
114+
/// </summary>
83115
[Fact]
84116
public async Task ObterProjetoCompleto_DeveRetornarProjeto_SeExistente()
85117
{
@@ -94,6 +126,9 @@ public async Task ObterProjetoCompleto_DeveRetornarProjeto_SeExistente()
94126
Assert.NotNull(resultado);
95127
}
96128

129+
/// <summary>
130+
/// Verifica se a consulta de projetos por usuário retorna uma lista válida.
131+
/// </summary>
97132
[Fact]
98133
public async Task ObterProjetosPorUsuario_DeveRetornarLista()
99134
{
@@ -109,6 +144,9 @@ public async Task ObterProjetosPorUsuario_DeveRetornarLista()
109144
Assert.IsAssignableFrom<IEnumerable<ProjetoResumoViewModel>>(resultado);
110145
}
111146

147+
/// <summary>
148+
/// Verifica se o método ApiResult.Ok retorna sucesso corretamente.
149+
/// </summary>
112150
[Fact]
113151
public void ApiResult_Ok_DeveRetornarSucesso()
114152
{
@@ -119,6 +157,9 @@ public void ApiResult_Ok_DeveRetornarSucesso()
119157
Assert.Null(result.Errors);
120158
}
121159

160+
/// <summary>
161+
/// Verifica se o método ApiResult.Fail retorna erro corretamente.
162+
/// </summary>
122163
[Fact]
123164
public void ApiResult_Fail_DeveRetornarErro()
124165
{

TaskManagement/TaskManagement.Application.UnitTests/Testes/Services/TarefaServiceTests.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,29 @@
99

1010
namespace TaskManagement.Application.UnitTests.Testes.Services
1111
{
12+
/// <summary>
13+
/// Teste unitário para a classe <see cref="TarefaService"/>.
14+
/// </summary>
1215
public class TarefaServiceTests
1316
{
1417
private readonly Mock<IUnitOfWork> _unitOfWorkMock;
1518
private readonly Mock<IMapper> _mapperMock;
1619
private readonly TarefaService _service;
1720

21+
/// <summary>
22+
/// Construtor que inicializa os mocks e o serviço a ser testado.
23+
/// </summary>
1824
public TarefaServiceTests()
1925
{
2026
_unitOfWorkMock = new Mock<IUnitOfWork>();
2127
_mapperMock = new Mock<IMapper>();
2228
_service = new TarefaService(_unitOfWorkMock.Object, _mapperMock.Object);
2329
}
2430

31+
/// <summary>
32+
/// Adiciona uma nova tarefa e verifica se lança exceção ao exceder o limite de 20 tarefas por projeto.
33+
/// </summary>
34+
/// <returns>Resultado do teste.</returns>
2535
[Fact]
2636
public async Task AdicionarTarefa_DeveFalhar_SeLimiteExcedido()
2737
{
@@ -35,6 +45,10 @@ public async Task AdicionarTarefa_DeveFalhar_SeLimiteExcedido()
3545
Assert.Equal("Limite máximo de 20 tarefas por projeto atingido.", ex.Message);
3646
}
3747

48+
/// <summary>
49+
/// Atualiza uma tarefa e verifica se lança exceção ao tentar alterar a prioridade.
50+
/// </summary>
51+
/// <returns>Resultado do teste.</returns>
3852
[Fact]
3953
public async Task AtualizarTarefa_DeveFalhar_SePrioridadeAlterada()
4054
{
@@ -48,6 +62,10 @@ public async Task AtualizarTarefa_DeveFalhar_SePrioridadeAlterada()
4862
Assert.Equal("Prioridade da tarefa não pode ser alterada.", ex.Message);
4963
}
5064

65+
/// <summary>
66+
/// Adiciona um comentário a uma tarefa e verifica se o histórico é registrado corretamente.
67+
/// </summary>
68+
/// <returns>Resultado do teste.</returns>
5169
[Fact]
5270
public async Task AdicionarComentario_DeveRegistrarHistorico()
5371
{
@@ -62,6 +80,10 @@ public async Task AdicionarComentario_DeveRegistrarHistorico()
6280
_unitOfWorkMock.Verify(u => u.CommitAsync(), Times.Once);
6381
}
6482

83+
/// <summary>
84+
/// Adiciona uma nova tarefa e verifica se funciona corretamente quando dentro do limite de 20 tarefas por projeto.
85+
/// </summary>
86+
/// <returns>Resultado do teste.</returns>
6587
[Fact]
6688
public async Task AdicionarTarefa_DeveFuncionar_SeDentroDoLimite()
6789
{
@@ -85,6 +107,10 @@ public async Task AdicionarTarefa_DeveFuncionar_SeDentroDoLimite()
85107
_unitOfWorkMock.Verify(u => u.CommitAsync(), Times.Once);
86108
}
87109

110+
/// <summary>
111+
/// Atualiza uma tarefa e verifica se funciona corretamente quando a prioridade não é alterada.
112+
/// </summary>
113+
/// <returns>Resultado do teste.</returns>
88114
[Fact]
89115
public async Task AtualizarTarefa_DeveFuncionar_SePrioridadeNaoAlterada()
90116
{
@@ -105,6 +131,10 @@ public async Task AtualizarTarefa_DeveFuncionar_SePrioridadeNaoAlterada()
105131
_unitOfWorkMock.Verify(u => u.CommitAsync(), Times.Once);
106132
}
107133

134+
/// <summary>
135+
/// Obtém uma tarefa completa e verifica se retorna nulo quando a tarefa não existe.
136+
/// </summary>
137+
/// <returns>Resultado do teste.</returns>
108138
[Fact]
109139
public async Task ObterTarefaCompleta_DeveRetornarTarefa_SeExistente()
110140
{
@@ -119,6 +149,10 @@ public async Task ObterTarefaCompleta_DeveRetornarTarefa_SeExistente()
119149
Assert.NotNull(resultado);
120150
}
121151

152+
/// <summary>
153+
/// Gera um relatório de desempenho e verifica se retorna dados corretamente.
154+
/// </summary>
155+
/// <returns>Resultado do teste.</returns>
122156
[Fact]
123157
public async Task GerarRelatorioDesempenho_DeveRetornarDados()
124158
{
@@ -135,6 +169,10 @@ public async Task GerarRelatorioDesempenho_DeveRetornarDados()
135169
Assert.Equal(10, resultado.First().TotalConcluidas);
136170
}
137171

172+
/// <summary>
173+
/// Deleta uma tarefa e verifica se funciona corretamente quando a tarefa existe.
174+
/// </summary>
175+
/// <returns>Resultado do teste.</returns>
138176
[Fact]
139177
public async Task DeletarTarefa_DeveRemover_SeExistente()
140178
{
@@ -151,6 +189,10 @@ public async Task DeletarTarefa_DeveRemover_SeExistente()
151189
_unitOfWorkMock.Verify(u => u.CommitAsync(), Times.Once);
152190
}
153191

192+
/// <summary>
193+
/// Deleta um comentário e verifica se funciona corretamente quando o comentário existe.
194+
/// </summary>
195+
/// <returns>Resultado do teste.</returns>
154196
[Fact]
155197
public async Task DeletaComentario_DeveRemover_SeExistente()
156198
{

TaskManagement/TaskManagement.Infrastructure/Persistence/ProjetoDbContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ public ProjetoDbContext CreateDbContext(string[] args)
244244

245245
// Connection string de exemplo para PostgreSQL.
246246
// ⚠️ ATENÇÃO: Nunca versionar credenciais reais. Use variáveis de ambiente ou arquivos seguros em produção.
247-
var connectionString = "Host=pgsql.avbc.dev;Port=5432;Database=avbc1;Username=avbc1;Password=Test01Api25;Pooling=true;SSL Mode=Prefer;Trust Server Certificate=true;SearchPath=taskmanagement"; //"Host=localhost;Port=5432;Database=seu_banco;Username=seu_usuario;Password=sua_senha;SearchPath=taskmanagement";
247+
var connectionString = "Host=localhost;Port=5432;Database=bancodedados;Username=usuario;Password=senha;Pooling=true;SSL Mode=Prefer;Trust Server Certificate=true;SearchPath=taskmanagement";
248248

249249
// Configura o provedor Npgsql (PostgreSQL) com:
250250
// - Schema padrão definido via SearchPath

0 commit comments

Comments
 (0)