From b10d7ee35bfe072adec1e659fe64b7fcb05bb7b1 Mon Sep 17 00:00:00 2001 From: AnyTng <44723227+AnyTng@users.noreply.github.com> Date: Mon, 6 Apr 2026 22:00:29 +0000 Subject: [PATCH] Add tests for ModelosVeiculosController --- .../ModelosVeiculosControllerTests.cs | 170 ++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 backend/Tests/CarXPress Unit Tests/ModelosVeiculosControllerTests.cs diff --git a/backend/Tests/CarXPress Unit Tests/ModelosVeiculosControllerTests.cs b/backend/Tests/CarXPress Unit Tests/ModelosVeiculosControllerTests.cs new file mode 100644 index 0000000..bb55d03 --- /dev/null +++ b/backend/Tests/CarXPress Unit Tests/ModelosVeiculosControllerTests.cs @@ -0,0 +1,170 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using RESTful_API.Controllers; +using RESTful_API.Models; +using Xunit; + +namespace Unit_Tests +{ + public class ModelosVeiculosControllerTests + { + private PdsContext GetDbContextWithData() + { + var options = new DbContextOptionsBuilder() + .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString()) + .Options; + var context = new PdsContext(options); + + var marca = new MarcaVeiculo { Idmarca = 1, DescMarca = "Marca Test" }; + context.MarcaVeiculos.Add(marca); + + context.ModeloVeiculos.AddRange( + new ModeloVeiculo { Idmodelo = 1, DescModelo = "Modelo 1", MarcaVeiculoIdmarca = 1 }, + new ModeloVeiculo { Idmodelo = 2, DescModelo = "Modelo 2", MarcaVeiculoIdmarca = 1 } + ); + + context.SaveChanges(); + return context; + } + + [Fact] + public async Task GetModeloVeiculos_ReturnsAllModelos() + { + // Arrange + var context = GetDbContextWithData(); + var controller = new ModelosVeiculosController(context); + + // Act + var result = await controller.GetModeloVeiculos(); + + // Assert + var actionResult = Assert.IsType>>(result); + var modelos = Assert.IsAssignableFrom>(actionResult.Value); + Assert.Equal(2, modelos.Count()); + } + + [Fact] + public async Task GetModeloVeiculo_ReturnsModelo_WhenIdExists() + { + // Arrange + var context = GetDbContextWithData(); + var controller = new ModelosVeiculosController(context); + + // Act + var result = await controller.GetModeloVeiculo(1); + + // Assert + var actionResult = Assert.IsType>(result); + var modelo = Assert.IsType(actionResult.Value); + Assert.Equal(1, modelo.Idmodelo); + Assert.Equal("Modelo 1", modelo.DescModelo); + } + + [Fact] + public async Task GetModeloVeiculo_ReturnsNotFound_WhenIdDoesNotExist() + { + // Arrange + var context = GetDbContextWithData(); + var controller = new ModelosVeiculosController(context); + + // Act + var result = await controller.GetModeloVeiculo(999); + + // Assert + var actionResult = Assert.IsType>(result); + Assert.IsType(actionResult.Result); + } + + [Fact] + public async Task PutModeloVeiculo_ReturnsNoContent_WhenUpdateIsSuccessful() + { + // Arrange + var context = GetDbContextWithData(); + var controller = new ModelosVeiculosController(context); + var updatedModelo = new ModeloVeiculo { Idmodelo = 1, DescModelo = "Modelo 1 Atualizado", MarcaVeiculoIdmarca = 1 }; + + // Clean up tracking before updating + context.ChangeTracker.Clear(); + + // Act + var result = await controller.PutModeloVeiculo(1, updatedModelo); + + // Assert + Assert.IsType(result); + var dbModelo = await context.ModeloVeiculos.FindAsync(1); + Assert.Equal("Modelo 1 Atualizado", dbModelo.DescModelo); + } + + [Fact] + public async Task PutModeloVeiculo_ReturnsBadRequest_WhenIdMismatch() + { + // Arrange + var context = GetDbContextWithData(); + var controller = new ModelosVeiculosController(context); + var updatedModelo = new ModeloVeiculo { Idmodelo = 2, DescModelo = "Modelo 2 Atualizado", MarcaVeiculoIdmarca = 1 }; + + // Act + var result = await controller.PutModeloVeiculo(1, updatedModelo); // URL ID is 1, but Object ID is 2 + + // Assert + Assert.IsType(result); + } + + [Fact] + public async Task PostModeloVeiculo_ReturnsCreatedResponse_WhenValid() + { + // Arrange + var context = GetDbContextWithData(); + var controller = new ModelosVeiculosController(context); + var newModelo = new ModeloVeiculo { Idmodelo = 3, DescModelo = "Modelo 3", MarcaVeiculoIdmarca = 1 }; + + // Act + var result = await controller.PostModeloVeiculo(newModelo); + + // Assert + var actionResult = Assert.IsType>(result); + var createdAtActionResult = Assert.IsType(actionResult.Result); + Assert.Equal("GetModeloVeiculo", createdAtActionResult.ActionName); + var returnValue = Assert.IsType(createdAtActionResult.Value); + Assert.Equal(3, returnValue.Idmodelo); + + // Verify it was added to the DB + var dbModelo = await context.ModeloVeiculos.FindAsync(3); + Assert.NotNull(dbModelo); + } + + [Fact] + public async Task DeleteModeloVeiculo_ReturnsNoContent_WhenDeleted() + { + // Arrange + var context = GetDbContextWithData(); + var controller = new ModelosVeiculosController(context); + + // Act + var result = await controller.DeleteModeloVeiculo(1); + + // Assert + Assert.IsType(result); + var dbModelo = await context.ModeloVeiculos.FindAsync(1); + Assert.Null(dbModelo); + } + + [Fact] + public async Task DeleteModeloVeiculo_ReturnsNotFound_WhenIdDoesNotExist() + { + // Arrange + var context = GetDbContextWithData(); + var controller = new ModelosVeiculosController(context); + + // Act + var result = await controller.DeleteModeloVeiculo(999); + + // Assert + Assert.IsType(result); + } + } +}