public async Task Deve_Adicionar_CadastrarFornecedorOutput_Corretamente_Quando_Fornecedor_Cadastrado() { var input = CriarCadastrarFornecedorInput(); var cnpj = new CNPJ(input.CpfCnpj); var pessoaJuridica = _fornecedorFactory.NovaPessoaJuridica(input.Nome, input.CpfCnpj, null); var empresa = _empresaFactory.NovaEmpresa("PR", "Engie", input.CpfCnpj); var fornecedor = _fornecedorFactory.NovoFornecedor(empresa, pessoaJuridica); var outputMock = new CadastrarFornecedorOutput(fornecedor.Id, pessoaJuridica.Nome, pessoaJuridica.CNPJ.ToString(), pessoaJuridica.DataCadastro); var sut = CriarSUT(fornecedorFactoryMock: _fornecedorFactoryMock); _empresaRepositorioMock.Setup(x => x.ObterEmpresa(input.EmpresaId)).Returns(Task.FromResult(empresa)); _fornecedorFactoryMock.Setup(f => f.NovaPessoaJuridica(input.Nome, input.CpfCnpj, new List <string>())).Returns(pessoaJuridica); _fornecedorFactoryMock.Setup(f => f.NovoFornecedor(empresa, pessoaJuridica)).Returns(fornecedor); _outputPortMock.Setup(p => p.Valid).Returns(true); CadastrarFornecedorOutput result = null; _outputPortMock.Setup(presenter => presenter.AddResult(It.IsAny <CadastrarFornecedorOutput>())) .Callback((CadastrarFornecedorOutput r) => result = r); await sut.Execute(input); Assert.Equal(outputMock.Id, result?.Id); Assert.Equal(outputMock.CpfCnpj, result?.CpfCnpj); Assert.Equal(outputMock.Nome, result?.Nome); Assert.Equal(outputMock.DataCadastro, result?.DataCadastro); }
public async Task Execute(CadastrarFornecedorInput input) { Pessoa pessoa; if (input.PessoaJuridica) { var pessoaJuridica = _fornecedorFactory.NovaPessoaJuridica(input.Nome, input.CpfCnpj, input.Telefones); if (await _fornecedorRepositorio.PessoaJuridicaCadastrada(pessoaJuridica.CNPJ)) { _outputPort.AddNotification($"CNPJ {pessoaJuridica.CNPJ} já cadastrado"); return; } pessoa = pessoaJuridica; } else { var pessoaFisica = _fornecedorFactory.NovaPessoaFisica(input.Nome, input.RG, input.DataNascimento, input.CpfCnpj, input.Telefones); if (await _fornecedorRepositorio.PessoaFisicaCadastrada(pessoaFisica.CPF)) { _outputPort.AddNotification($"CPF {pessoaFisica.CPF} já cadastrado"); return; } pessoa = pessoaFisica; } var empresa = await _empresaRepositorio.ObterEmpresa(input.EmpresaId); if (empresa == null) { _outputPort.AddNotification("Empresa não encontrada"); return; } var fornecedor = _fornecedorFactory.NovoFornecedor(empresa, pessoa); _outputPort.AddNotifications(fornecedor.Notificacoes); if (_outputPort.Valid) { await _fornecedorRepositorio.Salvar(fornecedor); await _unitOfWork.Commit(); var result = new CadastrarFornecedorOutput(fornecedor.Id, pessoa.Nome, pessoa.ObterNumeroCpfCnpj(), pessoa.DataCadastro); _outputPort.AddResult(result); } }