require 'rails_helper'

RSpec.describe Contabilidade::NotaFiscal, type: :model do
  it { is_expected.to delegate_method(:credor).to(:liquidacao) }

  it { is_expected.to belong_to(:liquidacao).class_name('Contabilidade::Liquidacao') }
  it { is_expected.to belong_to(:cfop).class_name('Contabilidade::Cfop') }

  it { is_expected.to have_many(:retencoes).class_name('Contabilidade::Retencao') }

  it { is_expected.to accept_nested_attributes_for(:retencoes).allow_destroy(true) }

  [ :numero_da_nota, :tipo_de_emissao ].each do |atributo|
    it{ is_expected.to validate_presence_of atributo }
  end

  it { is_expected.to validate_absence_of :valor_de_desconto }

  describe "validate_presence_of e validate_absence_of :chave_de_verificacao" do
    it 'implementar testes' do
      pending("Implementar - Houve Mudança")
      fail
    end
  end

  describe "validate_presence_of :numero_dae, :serie_do_selo, :numero_do_selo, :numero_da_serie_do_selo" do
    it 'implementar teste de validar presença' do
      pending("Implementar - Houve Mudança")
      fail
    end
  end

  describe "validate_presence_of e validate_absence_of :numero_protocolo_de_autorizacao,:chave_de_acesso_parte2, :chave_de_acesso_parte4" do
    it 'implementar testes' do
      pending("Implementar - Houve Mudança")
      fail
    end
  end

  describe "validate_presence_of :numeros_de_formularios, :data_limite_de_expedicao, :data_de_emissao, :valor_de_desconto" do
    it 'implementar teste de validar presença' do
      pending("Implementar - Houve Mudança")
      fail
    end
  end

  describe "Validações de inscrições Municipais e Estaduais" do
    it "Inscrição Estadual está preenchida" do
      nota_fiscal = FactoryBot.create(:contabilidade_nota_fiscal, tipo_da_nota: "mercadoria", valor_de_desconto: "", chave_de_verificacao: "")
      expect{ nota_fiscal.valida_inscricao_estadual }.not_to raise_error("Necessário cadastrar inscrição estadual. Nota Fiscal Nº #{nota_fiscal.numero_da_nota} (id: #{nota_fiscal.id.to_s}) (CNPJ: #{nota_fiscal.credor.cnpj}) id: #{nota_fiscal.credor.id}")
    end

    it "Inscrição Estadual não está preenchida" do
      nota_fiscal = FactoryBot.create(:contabilidade_nota_fiscal, tipo_da_nota: "mercadoria", valor_de_desconto: "", chave_de_verificacao: "")
      nota_fiscal.credor.inscricao_estadual = ""
      nota_fiscal.credor.save!
      expect{ nota_fiscal.valida_inscricao_estadual }.to raise_error("Necessário cadastrar inscrição estadual. Nota Fiscal Nº #{nota_fiscal.numero_da_nota} (id: #{nota_fiscal.id.to_s}) (CNPJ: #{nota_fiscal.credor.cnpj}) id: #{nota_fiscal.credor.id}")
    end

    it "Inscrição Municipal está preenchida" do
      nota_fiscal = FactoryBot.create(:contabilidade_nota_fiscal, valor_de_desconto: "", chave_de_verificacao: "")
      expect{ nota_fiscal.valida_inscricao_municipal }.not_to raise_error("Necessário cadastrar inscrição municipal. Nota Fiscal Nº #{nota_fiscal.numero_da_nota} (id: #{nota_fiscal.id.to_s}) (CNPJ: #{nota_fiscal.credor.cnpj}) id: #{nota_fiscal.credor.id}")
    end

    it "Inscrição Municipal não está preenchida" do
      nota_fiscal = FactoryBot.create(:contabilidade_nota_fiscal, valor_de_desconto: "", chave_de_verificacao: "")
      nota_fiscal.credor.inscricao_municipal = ""
      nota_fiscal.credor.save!
      expect{ nota_fiscal.valida_inscricao_municipal }.to raise_error("Necessário cadastrar inscrição municipal. Nota Fiscal Nº #{nota_fiscal.numero_da_nota} (id: #{nota_fiscal.id.to_s}) (CNPJ: #{nota_fiscal.credor.cnpj}) id: #{nota_fiscal.credor.id}")
    end
  end
end
