require 'rails_helper'

RSpec.describe Contabilidade::LoteBancario, type: :model do
  it{ is_expected.to belong_to(:banco).class_name('Base::Banco') }
  it{ is_expected.to belong_to(:agencia).class_name('Base::Agencia') }

  it{ is_expected.to have_many(:pagamentos_do_lote_bancario).dependent(:destroy) }

  [:agencia_id, :envio_ao_banco].each { |atributo| it { is_expected.to validate_presence_of atributo } }

  describe 'numero' do
    context 'quando id é nulo' do
      it 'retorna vazio' do
        lote_bancario = Contabilidade::LoteBancario.new
        expect(lote_bancario.numero).to eq ""
      end
    end

    context 'quando id está presente' do
      it 'retorna 00001' do
        lote_bancario = Contabilidade::LoteBancario.new(id: 1)
        expect(lote_bancario.numero).to eq "00001"
      end
    end
  end

  describe 'pagamento_principal' do
    context 'quando não possui pagamentos' do
      it 'retorna vazio' do
        lote_bancario = Contabilidade::LoteBancario.new
        expect(lote_bancario.pagamento_principal).to eq ""
      end
    end

    context 'quando possui apenas um pagamentos' do
      it 'retorna 123456' do
        lote_bancario = Contabilidade::LoteBancario.new(pagamentos_do_lote_bancario: [FactoryBot.create(:contabilidade_pagamento_do_lote_bancario)])
        pagamento = lote_bancario.pagamentos_do_lote_bancario.first.conta_bancaria_por_pagamento.pagamento
        pagamento.numero = "123456"
        pagamento.save
        expect(lote_bancario.pagamento_principal).to eq "123456"
      end
    end

    context 'quando possui vários pagamentos' do
      it 'retorna qtd: 2' do
        lote_bancario = Contabilidade::LoteBancario.new(pagamentos_do_lote_bancario: [FactoryBot.create(:contabilidade_pagamento_do_lote_bancario), FactoryBot.create(:contabilidade_pagamento_do_lote_bancario)])
        expect(lote_bancario.pagamento_principal).to eq "Qtd: 2"
      end
    end
  end

  describe 'texto_para_arquivo' do
    it 'retorna texto' do
      lote_bancario = Contabilidade::LoteBancario.new(created_at: "2021-12-20 14:38:00", id: 1)
      expect(lote_bancario.texto_para_arquivo).to eq "000000000000000000000000000000000002012202114380000110B001999999999                                                                                                                                                                                                                                                                                    0000001\n99999999999999999999999999999999999                                                                                                                                                                                                                                                                                             999999999999999990000000000003"
    end
  end
end
