public void NaoPodeCadastrarOuModificarMaterialSemMarca()
        {
            Mock<IMaterialRepository> materialRepository = CriarRepositorioMocado();

            Material novoMaterial = new Material { Data = DateTime.UtcNow, Descricao = "Novo Material" };

            MaterialService materialService = new MaterialService(materialRepository.Object);

            Assert.Throws<ArgumentException>(() => materialService.Save(novoMaterial), "Marca não informada!", ExceptionMessageCompareOptions.Exact);
        }
        public void NaoPodeCadastrarOuModificarMaterialComDataDefault()
        {
            Mock<IMaterialRepository> materialRepository = CriarRepositorioMocado();

            Material novoMaterial = new Material();

            MaterialService materialService = new MaterialService(materialRepository.Object);

            Assert.Throws<ArgumentException>(() => materialService.Save(novoMaterial), "Data não informada!", ExceptionMessageCompareOptions.Exact);
        }
        public void NaoPodeCadastarMaterialComValorNegativo()
        {
            Mock<IMaterialRepository> materialRepository = CriarRepositorioMocado();

            Material novoMaterial = new Material
            {
                Data = DateTime.UtcNow,
                Descricao = "Novo Material",
                Marca = marcaA,
                Quantidade = 10,
                Valor = -10
            };

            MaterialService materialService = new MaterialService(materialRepository.Object);

            Assert.Throws<ArgumentException>(() => materialService.Save(novoMaterial), "Não é permitido cadastrar material com valor negativo!", ExceptionMessageCompareOptions.Exact);

            materialRepository.Verify(v => v.ObterMateriais(), Times.Once());
        }
        public void PodeCadastrarMaterial()
        {
            Mock<IMaterialRepository> materialRepository = CriarRepositorioMocado();

            Material novoMaterial = new Material { Data = DateTime.UtcNow, Descricao = "Novo Material", Marca = marcaA, Quantidade = 10, Valor = 10 };

            MaterialService materialService = new MaterialService(materialRepository.Object);

            materialRepository.Verify(v => v.Save(It.IsAny<Material>()), Times.Once());
        }
        public void NaoPodeCadastarMaterialComDescricaoDuplicadaParaMesmaMarca()
        {
            Mock<IMaterialRepository> materialRepository = CriarRepositorioMocado();

            Material novoMaterial = new Material
            {
                Data = DateTime.UtcNow,
                Descricao = "Material 1",
                Marca = marcaA 
            };

            MaterialService materialService = new MaterialService(materialRepository.Object);

            Assert.Throws<ArgumentException>(() => materialService.Save(novoMaterial), "Material já cadastrado para esta marca!", ExceptionMessageCompareOptions.Exact);

            materialRepository.Verify(v => v.ObterMateriais(), Times.Once());
        }