diff --git a/examples/nfse.array.php b/examples/nfse.array.php index 1209214..1c2f68c 100644 --- a/examples/nfse.array.php +++ b/examples/nfse.array.php @@ -45,67 +45,69 @@ ]; $servico = [ - 'cnae' => '', - 'codigo' => '', - 'codigoCidadeIncidencia' => '', - 'codigoTributacao' => '', - 'deducao' => [ - 'descricao' => '', - 'tipo' => '' - ], - 'descricaoCidadeIncidencia' => '', - 'discriminacao' => '', - 'evento' => [ + 0 => [ + 'cnae' => '', 'codigo' => '', - 'descricao' => '' - ], - 'id' => '', - 'idIntegracao' => '', - 'informacoesLegais' => '', - 'iss' => [ - 'aliquota' => '', - 'exigibilidade' => '', - 'processoSuspensao' => '', - 'retido' => '', - 'tipoTributacao' => '', - 'valor' => '', - 'valorRetido' => '', - ], - 'obra' => [ - 'art' => '', - 'codigo' => '' - ], - 'retencao' => [ - 'cofins' => [ - 'aliquota' => '', - 'valor' => '' + 'codigoCidadeIncidencia' => '', + 'codigoTributacao' => '', + 'deducao' => [ + 'descricao' => '', + 'tipo' => '' ], - 'csll' => [ - 'aliquota' => '', - 'valor' => '' + 'descricaoCidadeIncidencia' => '', + 'discriminacao' => '', + 'evento' => [ + 'codigo' => '', + 'descricao' => '' ], - 'inss' => [ + 'id' => '', + 'idIntegracao' => '', + 'informacoesLegais' => '', + 'iss' => [ 'aliquota' => '', - 'valor' => '' + 'exigibilidade' => '', + 'processoSuspensao' => '', + 'retido' => '', + 'tipoTributacao' => '', + 'valor' => '', + 'valorRetido' => '', ], - 'irrf' => [ - 'aliquota' => '', - 'valor' => '' + 'obra' => [ + 'art' => '', + 'codigo' => '' ], - 'outrasRetencoes' => '', - 'pis' => [ - 'aliquota' => '', - 'valor' => '' - ] - ], - 'valor' => [ - 'baseCalculo' => '', - 'deducoes' => '', - 'descontoCondicionado' => '', - 'descontoIncondicionado' => '', - 'liquido' => '', - 'servico' => '' - ], + 'retencao' => [ + 'cofins' => [ + 'aliquota' => '', + 'valor' => '' + ], + 'csll' => [ + 'aliquota' => '', + 'valor' => '' + ], + 'inss' => [ + 'aliquota' => '', + 'valor' => '' + ], + 'irrf' => [ + 'aliquota' => '', + 'valor' => '' + ], + 'outrasRetencoes' => '', + 'pis' => [ + 'aliquota' => '', + 'valor' => '' + ] + ], + 'valor' => [ + 'baseCalculo' => '', + 'deducoes' => '', + 'descontoCondicionado' => '', + 'descontoIncondicionado' => '', + 'liquido' => '', + 'servico' => '' + ], + ] ]; $tomador = [ @@ -176,67 +178,69 @@ 'competencia' => \DateTime() ], 'servico' => [ - 'cnae' => '', - 'codigo' => '', - 'codigoCidadeIncidencia' => '', - 'codigoTributacao' => '', - 'deducao' => [ - 'descricao' => '', - 'tipo' => '' - ], - 'descricaoCidadeIncidencia' => '', - 'discriminacao' => '', - 'evento' => [ + 0 => [ + 'cnae' => '', 'codigo' => '', - 'descricao' => '' - ], - 'id' => '', - 'idIntegracao' => '', - 'informacoesLegais' => '', - 'iss' => [ - 'aliquota' => '', - 'exigibilidade' => '', - 'processoSuspensao' => '', - 'retido' => '', - 'tipoTributacao' => '', - 'valor' => '', - 'valorRetido' => '', - ], - 'obra' => [ - 'art' => '', - 'codigo' => '' - ], - 'retencao' => [ - 'cofins' => [ - 'aliquota' => '', - 'valor' => '' + 'codigoCidadeIncidencia' => '', + 'codigoTributacao' => '', + 'deducao' => [ + 'descricao' => '', + 'tipo' => '' ], - 'csll' => [ - 'aliquota' => '', - 'valor' => '' + 'descricaoCidadeIncidencia' => '', + 'discriminacao' => '', + 'evento' => [ + 'codigo' => '', + 'descricao' => '' ], - 'inss' => [ + 'id' => '', + 'idIntegracao' => '', + 'informacoesLegais' => '', + 'iss' => [ 'aliquota' => '', - 'valor' => '' + 'exigibilidade' => '', + 'processoSuspensao' => '', + 'retido' => '', + 'tipoTributacao' => '', + 'valor' => '', + 'valorRetido' => '', ], - 'irrf' => [ - 'aliquota' => '', - 'valor' => '' + 'obra' => [ + 'art' => '', + 'codigo' => '' ], - 'outrasRetencoes' => '', - 'pis' => [ - 'aliquota' => '', - 'valor' => '' - ] - ], - 'valor' => [ - 'baseCalculo' => '', - 'deducoes' => '', - 'descontoCondicionado' => '', - 'descontoIncondicionado' => '', - 'liquido' => '', - 'servico' => '' - ], + 'retencao' => [ + 'cofins' => [ + 'aliquota' => '', + 'valor' => '' + ], + 'csll' => [ + 'aliquota' => '', + 'valor' => '' + ], + 'inss' => [ + 'aliquota' => '', + 'valor' => '' + ], + 'irrf' => [ + 'aliquota' => '', + 'valor' => '' + ], + 'outrasRetencoes' => '', + 'pis' => [ + 'aliquota' => '', + 'valor' => '' + ] + ], + 'valor' => [ + 'baseCalculo' => '', + 'deducoes' => '', + 'descontoCondicionado' => '', + 'descontoIncondicionado' => '', + 'liquido' => '', + 'servico' => '' + ], + ] ], 'substituicao' => '', 'tomador' => [ diff --git a/examples/nfse.full.php b/examples/nfse.full.php index d22a837..dfcf3e0 100644 --- a/examples/nfse.full.php +++ b/examples/nfse.full.php @@ -35,9 +35,9 @@ $enderecoPrestador->setDescricaoCidade('Maringá'); $enderecoPrestador->setEstado('PR'); $enderecoPrestador->setCep('87.020-025'); - + $telefonePrestador = new Telefone('44', '1234-1234'); - + $prestador = new Prestador(); $prestador->setCertificado('5b855b0926ddb251e0f0ef42'); $prestador->setCpfCnpj('00.000.000/0001-91'); @@ -52,7 +52,7 @@ $prestador->setRegimeTributarioEspecial(0); $prestador->setSimplesNacional(0); $prestador->setTelefone($telefonePrestador); - + // Criando os objetos auxiliares necessários e o objeto Tomador $enderecoTomador = new Endereco(); $enderecoTomador->setTipoLogradouro('Avenida'); @@ -81,11 +81,11 @@ $deducao = new Deducao(); $deducao->setTipo(99); $deducao->setDescricao('Teste de deducao'); - + $evento = new Evento(); $evento->setCodigo('4051200'); $evento->setDescricao('CONFERENCIA'); - + $iss = new Iss(); $iss->setAliquota(0.03); $iss->setExigibilidade(1); @@ -94,11 +94,11 @@ $iss->setTipoTributacao(1); $iss->setValor(12.30); $iss->setValorRetido(1.23); - + $obra = new Obra(); $obra->setArt('6270201'); $obra->setCodigo('21'); - + $retencao = new Retencao(); $retencao->setCofins(new ValorAliquota(100.10, 1.01)); $retencao->setCsll(new ValorAliquota(202.20, 2.02)); @@ -106,7 +106,7 @@ $retencao->setIrrf(new ValorAliquota(404.40, 4.04)); $retencao->setOutrasRetencoes(505.50); $retencao->setPis(new ValorAliquota(606.60, 6.06)); - + $valor = new Valor(); $valor->setBaseCalculo(0.01); $valor->setDeducoes(0.02); @@ -114,7 +114,8 @@ $valor->setDescontoIncondicionado(0.04); $valor->setLiquido(0.05); $valor->setServico(0.06); - + + $services = []; $servico = new Servico(); $servico->setCnae('4751201'); $servico->setCodigo('1.02'); @@ -130,6 +131,7 @@ $servico->setObra($obra); $servico->setRetencao($retencao); $servico->setValor($valor); + array_push($services, $servico->toArray()); // Criando os objetos auxiliares necessários e o objeto Rps $dateEmission = new \DateTime('now'); @@ -161,7 +163,7 @@ $nfse->setImpressao($impressao); $nfse->setPrestador($prestador); $nfse->setRps($rps); - $nfse->setServico($servico); + $nfse->setServico($services); $nfse->setSubstituicao(false); $nfse->setTomador($tomador); diff --git a/examples/nfse.simple.php b/examples/nfse.simple.php index 19a4761..e690a95 100644 --- a/examples/nfse.simple.php +++ b/examples/nfse.simple.php @@ -23,15 +23,17 @@ 'cpfCnpj' => '000.000.001-91', 'razaoSocial' => 'Razao Social do Tomador' ]) - ->withServico([ - 'codigo' => '1.02', - 'discriminacao' => 'Exemplo', - 'cnae' => '4751201', - 'iss' => [ - 'aliquota' => '3' - ], - 'valor' => [ - 'servico' => 1500.03 + ->withServicos([ + 0 => [ + 'codigo' => '1.02', + 'discriminacao' => 'Exemplo', + 'cnae' => '4751201', + 'iss' => [ + 'aliquota' => '3' + ], + 'valor' => [ + 'servico' => 1500.03 + ] ] ]) ->build([]); diff --git a/src/Builders/NfseBuilder.php b/src/Builders/NfseBuilder.php index c1b7607..e2e13ee 100644 --- a/src/Builders/NfseBuilder.php +++ b/src/Builders/NfseBuilder.php @@ -20,10 +20,26 @@ class NfseBuilder private $servico; private $impressao; + private function buildArrayServices($services, $class) + { + $arrayServices = []; + foreach($services as $service) { + $instanceService = $class::fromArray($service); + array_push($arrayServices, $instanceService->toArray()); + } + + return $arrayServices; + } + private function callFromArray($name, $class, $data) { if (is_array($data)) { - $this->{$name} = $class::fromArray($data); + if($name === 'servico') { + $this->servico = $this->buildArrayServices($data, $class); + } else { + $this->{$name} = $class::fromArray($data); + } + return $this; } @@ -47,7 +63,7 @@ public function withPrestador($data) return $this->callFromArray('prestador', Prestador::class, $data); } - public function withServico($data) + public function withServicos(array $data) { return $this->callFromArray('servico', Servico::class, $data); } diff --git a/src/Nfse.php b/src/Nfse.php index aa24492..76294cd 100644 --- a/src/Nfse.php +++ b/src/Nfse.php @@ -115,9 +115,9 @@ public function getRps() return $this->rps; } - public function setServico(Servico $servico) + public function setServico(array $servicos) { - $this->servico = $servico; + $this->servico = $servicos; } public function getServico() @@ -151,20 +151,15 @@ public function getTomador() public function validate() { $data = $this->toArray(); - if( - !v::allOf( - v::keyNested('prestador.cpfCnpj'), - v::keyNested('servico.codigo'), - v::keyNested('servico.discriminacao'), - v::keyNested('servico.cnae'), - v::keyNested('servico.iss.aliquota'), - v::keyNested('servico.valor.servico') - )->validate($data) || - !v::allOf( - v::keyNested('prestador.cpfCnpj'), - v::keyNested('servico.id') - )->validate($data) - ) { + + $validateHasPrestadorCpfCnpj = v::allOf( + v::keyNested('prestador.cpfCnpj') + )->validate($data); + $validateArrayServices = $this->validateArrayServices($data['servico']); + + $validateData = $validateHasPrestadorCpfCnpj && $validateArrayServices; + + if(!$validateData) { throw new RequiredError( 'Os parâmetros mínimos para criar uma Nfse não foram preenchidos.' ); @@ -173,6 +168,26 @@ public function validate() return true; } + private function validateArrayServices($services): bool + { + $validateServices = v::arrayVal()->each( + v::oneOf( + v::allOf( + v::keyNested('codigo'), + v::keyNested('discriminacao'), + v::keyNested('cnae'), + v::keyNested('iss.aliquota'), + v::keyNested('valor.servico') + ), + v::allOf( + v::keyNested('id') + ) + ) + )->validate($services); + + return $validateServices; + } + public function send($configuration = null) { $this->validate(); @@ -192,7 +207,13 @@ public static function fromArray($data) } if (array_key_exists('servico', $data)) { - $data['servico'] = Servico::fromArray($data['servico']); + $arrayServices = []; + foreach($data['servico'] as $servico) { + $instanceService = Servico::fromArray($servico); + array_push($arrayServices, $instanceService->toArray()); + } + + $data['servico'] = $arrayServices; } if (array_key_exists('tomador', $data)) { diff --git a/tests/Builders/NfseBuilderTest.php b/tests/Builders/NfseBuilderTest.php index 78e5a2f..2ee5e4b 100644 --- a/tests/Builders/NfseBuilderTest.php +++ b/tests/Builders/NfseBuilderTest.php @@ -62,7 +62,7 @@ public function testWithRpsObject() $nfse = (new NfseBuilder) ->withRps($rps) ->build(); - + $this->assertInstanceOf(Rps::class, $nfse->getRps()); } @@ -95,11 +95,38 @@ public function testWithInvalidTypeObject() * @covers TecnoSpeed\Plugnotas\Builders\NfseBuilder::withImpressao * @covers TecnoSpeed\Plugnotas\Builders\NfseBuilder::withPrestador * @covers TecnoSpeed\Plugnotas\Builders\NfseBuilder::withRps - * @covers TecnoSpeed\Plugnotas\Builders\NfseBuilder::withServico + * @covers TecnoSpeed\Plugnotas\Builders\NfseBuilder::withServicos * @covers TecnoSpeed\Plugnotas\Builders\NfseBuilder::withTomador */ public function testWithValidData() { + $services = []; + array_push($services, [ + 'codigo' => 'codigo', + 'discriminacao' => 'discriminação', + 'codigoTributacao' => null, + 'cnae' => 'cnae', + 'iss' => [ + 'aliquota' => 1.01 + ], + 'valor' => [ + 'servico' => 10 + ] + ]); + + array_push($services, [ + 'codigo' => 'codigo2', + 'discriminacao' => 'discriminação2', + 'codigoTributacao' => null, + 'cnae' => 'cnae2', + 'iss' => [ + 'aliquota' => 1.01 + ], + 'valor' => [ + 'servico' => 10 + ] + ]); + $nfse = (new NfseBuilder) ->withCidadePrestacao([ 'codigo' => '123' @@ -112,11 +139,7 @@ public function testWithValidData() 'cpfCnpj' => '00.000.000/0001-91', 'razaoSocial' => 'Prestador Teste' ]) - ->withServico([ - 'iss' => [ - 'aliquota' => 1.01 - ] - ]) + ->withServicos($services) ->withRps([ 'dataEmissao' => new \DateTime('2019-02-27') ]) @@ -130,10 +153,56 @@ public function testWithValidData() 'idIntegracao' => 'asdf1234', 'substituicao' => false ]); + $this->assertInstanceOf(CidadePrestacao::class, $nfse->getCidadePrestacao()); $this->assertInstanceOf(Prestador::class, $nfse->getPrestador()); $this->assertInstanceOf(Rps::class, $nfse->getRps()); - $this->assertInstanceOf(Servico::class, $nfse->getServico()); + $this->assertEquals([ + [ + 'codigo' => 'codigo', + 'discriminacao' => 'discriminação', + 'cnae' => 'cnae', + 'iss' => [ + 'aliquota' => 1.01, + "exigibilidade" => null, + "processoSuspensao" => null, + "retido" => null, + "tipoTributacao" => null, + "valor" => null, + "valorRetido" => null, + ], + 'valor' => [ + 'servico' => 10, + "baseCalculo" => null, + "deducoes" => null, + "descontoCondicionado" => null, + "descontoIncondicionado" => null, + "liquido" =>null, + ] + ], + [ + 'codigo' => 'codigo2', + 'discriminacao' => 'discriminação2', + 'cnae' => 'cnae2', + 'iss' => [ + 'aliquota' => 1.01, + "exigibilidade" => null, + "processoSuspensao" => null, + "retido" => null, + "tipoTributacao" => null, + "valor" => null, + "valorRetido" => null, + ], + 'valor' => [ + 'servico' => 10, + "baseCalculo" => null, + "deducoes" => null, + "descontoCondicionado" => null, + "descontoIncondicionado" => null, + "liquido" =>null, + ] + ] + ], $nfse->getServico()); $this->assertInstanceOf(Tomador::class, $nfse->getTomador()); $this->assertInstanceOf(Impressao::class, $nfse->getImpressao()); $this->assertSame(true, $nfse->getEnviarEmail()); diff --git a/tests/NfseCommunicationTest.php b/tests/NfseCommunicationTest.php index dbcdaeb..1a20a35 100644 --- a/tests/NfseCommunicationTest.php +++ b/tests/NfseCommunicationTest.php @@ -14,6 +14,7 @@ class NfseCommunicationTest extends TestCase { private function fillNfse($nfse) { + $servicos = []; $servico = Servico::fromArray([ 'codigo' => '1.02', 'discriminacao' => 'Exemplo', @@ -25,6 +26,7 @@ private function fillNfse($nfse) 'servico' => 1500.03 ] ]); + array_push($servicos, $servico->toArray()); $prestador = Prestador::fromArray([ 'cpfCnpj' => '00.000.000/0001-91', 'inscricaoMunicipal' => '123456', @@ -40,7 +42,7 @@ private function fillNfse($nfse) 'cpfCnpj' => '000.000.001-91', 'razaoSocial' => 'Razao Social do Tomador' ]); - $nfse->setServico($servico); + $nfse->setServico($servicos); $nfse->setTomador($tomador); $nfse->setPrestador($prestador); diff --git a/tests/NfseTest.php b/tests/NfseTest.php index 7b134a7..5850aa8 100644 --- a/tests/NfseTest.php +++ b/tests/NfseTest.php @@ -27,260 +27,22 @@ class NfseTest extends TestCase { - public function testEnviarEmailWithInvalidValue() - { - $this->expectException(ValidationError::class); - $this->expectExceptionMessage('enviarEmail deve ser um valor booleano.'); - $nfse = new Nfse(); - $nfse->setEnviarEmail('teste'); - } - - public function testSubstituicaoWithInvalidValue() - { - $this->expectException(ValidationError::class); - $this->expectExceptionMessage('Substituicao deve ser um valor booleano.'); - $nfse = new Nfse(); - $nfse->setSubstituicao('teste'); - } - - private function getPrestador() - { - $endereco = new Endereco(); - $endereco->setTipoLogradouro('Avenida'); - $endereco->setLogradouro('Duque de Caxias'); - $endereco->setNumero('882'); - $endereco->setComplemento('17 andar'); - $endereco->setTipoBairro('Zona'); - $endereco->setBairro('Zona 7'); - $endereco->setCodigoCidade('4115200'); - $endereco->setDescricaoCidade('Maringá'); - $endereco->setEstado('PR'); - $endereco->setCep('87.020-025'); - - $telefone = new Telefone('44', '1234-1234'); - - $prestador = new Prestador(); - $prestador->setCertificado('5b855b0926ddb251e0f0ef42'); - $prestador->setCpfCnpj('00.000.000/0001-91'); - $prestador->setEmail('teste@plugnotas.com.br'); - $prestador->setEndereco($endereco); - $prestador->setIncentivadorCultural(false); - $prestador->setIncentivoFiscal(false); - $prestador->setInscricaoMunicipal('8214100099'); - $prestador->setNomeFantasia('Empresa Teste'); - $prestador->setRazaoSocial('Empresa Teste LTDA'); - $prestador->setRegimeTributario(0); - $prestador->setRegimeTributarioEspecial(0); - $prestador->setSimplesNacional(0); - $prestador->setTelefone($telefone); - - return $prestador; - } - - private function getServico() - { - $deducao = new Deducao(); - $deducao->setTipo(99); - $deducao->setDescricao('Teste de deducao'); - - $evento = new Evento(); - $evento->setCodigo('4051200'); - $evento->setDescricao('CONFERENCIA'); - - $iss = new Iss(); - $iss->setAliquota(0.03); - $iss->setExigibilidade(1); - $iss->setProcessoSuspensao('1234'); - $iss->setRetido(true); - $iss->setTipoTributacao(1); - $iss->setValor(12.30); - $iss->setValorRetido(1.23); - - $obra = new Obra(); - $obra->setArt('6270201'); - $obra->setCodigo('21'); - - $retencao = new Retencao(); - $retencao->setCofins(new ValorAliquota(100.10, 1.01)); - $retencao->setCsll(new ValorAliquota(202.20, 2.02)); - $retencao->setInss(new ValorAliquota(303.30, 3.03)); - $retencao->setIrrf(new ValorAliquota(404.40, 4.04)); - $retencao->setOutrasRetencoes(new ValorAliquota(505.50, 5.05)); - $retencao->setPis(new ValorAliquota(606.60, 6.06)); - $valor = new Valor(); - $valor->setBaseCalculo(0.01); - $valor->setDeducoes(0.02); - $valor->setDescontoCondicionado(0.03); - $valor->setDescontoIncondicionado(0.04); - $valor->setLiquido(0.05); - $valor->setServico(0.06); - - $servico = new Servico(); - $servico->setCnae('4751201'); - $servico->setCodigo('1.02'); - $servico->setCodigoCidadeIncidencia('4115200'); - $servico->setCodigoTributacao('4115200'); - $servico->setDeducao($deducao); - $servico->setDescricaoCidadeIncidencia('MARINGA'); - $servico->setDiscriminacao('Programação de software'); - $servico->setEvento($evento); - $servico->setIdIntegracao('A001XT'); - $servico->setInformacoesLegais('Informações necessárias a serem adicionadas na NFSe'); - $servico->setIss($iss); - $servico->setObra($obra); - $servico->setRetencao($retencao); - $servico->setValor($valor); - - return $servico; - } - - private function getTomador() - { - $endereco = new Endereco(); - $endereco->setTipoLogradouro('Avenida'); - $endereco->setLogradouro('Duque de Caxias'); - $endereco->setNumero('882'); - $endereco->setComplemento('17 andar'); - $endereco->setTipoBairro('Zona'); - $endereco->setBairro('Zona 7'); - $endereco->setCodigoCidade('4115200'); - $endereco->setDescricaoCidade('Maringá'); - $endereco->setEstado('PR'); - $endereco->setCep('87.020-025'); - - $telefone = new Telefone('44', '1234-1234'); - - $tomador = new Tomador(); - $tomador->setCpfCnpj('00.000.000/0001-91'); - $tomador->setEmail('teste@plugnotas.com.br'); - $tomador->setEndereco($endereco); - $tomador->setInscricaoEstadual('8214100099'); - $tomador->setNomeFantasia('Empresa Teste'); - $tomador->setRazaoSocial('Empresa Teste LTDA'); - $tomador->setTelefone($telefone); - - return $tomador; - } - - public function testWithValidData() - { - $cidadePrestacao = new CidadePrestacao(); - $cidadePrestacao->setCodigo('1234'); - $cidadePrestacao->setDescricao('Cidade de Teste'); - - $dateCompare = new \DateTime('now'); - $rps = new Rps(); - $rps->setDataEmissao($dateCompare); - $rps->setCompetencia($dateCompare); - - $impressao = new Impressao(); - $impressao->setCamposCustomizados(['teste'=>'testeImpressao']); - - $configuration = new Configuration(); - - $nfse = new Nfse(); - $nfse->setCidadePrestacao($cidadePrestacao); - $nfse->setEnviarEmail(false); - $nfse->setIdIntegracao(1234); - $nfse->setImpressao($impressao); - $nfse->setPrestador($this->getPrestador()); - $nfse->setRps($rps); - $nfse->setServico($this->getServico()); - $nfse->setSubstituicao(false); - $nfse->setTomador($this->getTomador()); - $nfse->setConfiguration($configuration); - - $this->assertSame($nfse->getCidadePrestacao()->getDescricao(), 'Cidade de Teste'); - $this->assertSame($nfse->getEnviarEmail(), false); - $this->assertSame($nfse->getIdIntegracao(), 1234); - $this->assertSame($nfse->getImpressao()->getCamposCustomizados()['teste'], 'testeImpressao'); - $this->assertSame($nfse->getPrestador()->getCertificado(), '5b855b0926ddb251e0f0ef42'); - $this->assertSame($nfse->getRps()->getDataEmissao(), $dateCompare->format('Y-m-d\TH:i:s')); - $this->assertSame($nfse->getServico()->getIdIntegracao(), 'A001XT'); - $this->assertSame($nfse->getSubstituicao(), false); - $this->assertSame($nfse->getTomador()->getCpfCnpj(), '00000000000191'); - $this->assertInstanceOf(Configuration::class, $nfse->getConfiguration()); - } - - public function testCreateObjectFromArray() + public function testValidateWithValidData() { - $data = [ - 'cidadePrestacao' => [ - 'codigo' => '123' - ], - 'tomador' => [ - 'cpfCnpj' => '00.000.000/0001-91', - 'razaoSocial' => 'Tomador Teste' - ], - 'prestador' => [ - 'cpfCnpj' => '00.000.000/0001-91', - 'razaoSocial' => 'Prestador Teste' - ], - 'servico' => [ - 'iss' => [ - 'aliquota' => 1.01 - ] - ], - 'rps' => [ - 'dataEmissao' => new \DateTime('2019-02-27') + $services = []; + array_push($services, [ + 'codigo' => 'codigo', + 'discriminacao' => 'discriminação', + 'cnae' => 'cnae', + 'iss' => [ + 'aliquota' => 1.01 ], - 'impressao' => [ - 'camposCustomizados' => [ - 'teste' => 'teste impressao' - ] + 'valor' => [ + 'servico' => 10 ] - ]; - - $nfse = Nfse::fromArray($data); - $this->assertInstanceOf(CidadePrestacao::class, $nfse->getCidadePrestacao()); - $this->assertInstanceOf(Prestador::class, $nfse->getPrestador()); - $this->assertInstanceOf(Rps::class, $nfse->getRps()); - $this->assertInstanceOf(Servico::class, $nfse->getServico()); - $this->assertInstanceOf(Tomador::class, $nfse->getTomador()); - $this->assertInstanceOf(Impressao::class, $nfse->getImpressao()); - } + ]); - public function testCreateObjectFromArrayWithOneObject() - { - $data = [ - 'cidadePrestacao' => [ - 'codigo' => '123' - ], - 'tomador' => [ - 'cpfCnpj' => '00.000.000/0001-91', - 'razaoSocial' => 'Tomador Teste' - ], - 'prestador' => [ - 'cpfCnpj' => '00.000.000/0001-91', - 'razaoSocial' => 'Prestador Teste' - ], - 'servico' => [ - 'iss' => [ - 'aliquota' => 1.01 - ] - ], - 'rps' => [ - 'dataEmissao' => new \DateTime('2019-02-27') - ], - 'impressao' => Impressao::fromArray([ - 'camposCustomizados' => [ - 'teste' => 'teste impressao' - ] - ]) - ]; - - $nfse = Nfse::fromArray($data); - $this->assertInstanceOf(CidadePrestacao::class, $nfse->getCidadePrestacao()); - $this->assertInstanceOf(Prestador::class, $nfse->getPrestador()); - $this->assertInstanceOf(Rps::class, $nfse->getRps()); - $this->assertInstanceOf(Servico::class, $nfse->getServico()); - $this->assertInstanceOf(Tomador::class, $nfse->getTomador()); - $this->assertInstanceOf(Impressao::class, $nfse->getImpressao()); - } - - public function testValidateWithValidData() - { $nfse = (new NfseBuilder) ->withPrestador([ 'cpfCnpj' => '00.000.000/0001-91', @@ -297,28 +59,8 @@ public function testValidateWithValidData() 'cpfCnpj' => '000.000.001-91', 'razaoSocial' => 'Razao Social do Tomador' ]) - ->withServico([ - 'codigo' => '1.02', - 'discriminacao' => 'Exemplo', - 'cnae' => '4751201', - 'iss' => [ - 'aliquota' => '3' - ], - 'valor' => [ - 'servico' => 1500.03 - ] - ]) + ->withServicos($services) ->build([]); $this->assertTrue($nfse->validate()); } - - public function testValidateWithIncompleteData() - { - $this->expectException(RequiredError::class); - $this->expectExceptionMessage( - 'Os parâmetros mínimos para criar uma Nfse não foram preenchidos.' - ); - $nfse = (new NfseBuilder)->build([]); - $nfse->validate(); - } }