require 'rails_helper'
include ActiveSupport::Testing::TimeHelpers

RSpec.describe Contabilidade::EstornoDeLiquidacao, type: :model do
	cria_configuracao_default
	# it_behaves_like "reverte eventos contábeis", "Estornar", Contabilidade::EstornoDeLiquidacao, :liquidacao_001, :contabilidade_estorno_de_liquidacao

	it{ is_expected.to belong_to( :liquidacao ) }
	it{ is_expected.to belong_to( :usuario ) }

	[:data_do_estorno, :justificativa, :liquidacao_id].each do |atributo|
		it{ is_expected.to validate_presence_of atributo }
	end

	it { is_expected.to allow_value('01/01/2016').for(:data_do_estorno) }
	it { is_expected.to_not allow_value('').for(:data_do_estorno) }
	it { is_expected.to_not allow_value('00/').for(:data_do_estorno) }

	let(:usuario) { FactoryBot.create(:usuario_comum) }

	it 'inclui a data do estorno como o dia da criação ao salvar o estorno' do
		travel_to Date.current do
			@estorno = FactoryBot.create(:contabilidade_estorno_de_liquidacao, usuario_id: usuario.id)
			expect( @estorno.data_do_estorno ).to eq Date.current
		end
	end

	it 'atualiza o campo estornada da liquidacao' do
		liquidacao = Contabilidade::Liquidacao.find_or_create_by!( FactoryBot.attributes_for(:liquidacao_001) )
		estorno_de_liquidacao = Contabilidade::EstornoDeLiquidacao.create(liquidacao: liquidacao, data_do_estorno: Date.today, justificativa: "...", usuario_id: usuario.id, status: :confirmado)
		expect(liquidacao.estornada?).to eq true
	end

	it 'atualiza o campo de saldo do empenho' do
		empenho = Contabilidade::Empenho.find_or_create_by!( FactoryBot.attributes_for(:empenho_22090001, valor: 9.99, status: :confirmado, descriminacao_obrigatoria_de_itens: false) )
		liquidacao = Contabilidade::Liquidacao.find_or_create_by!( FactoryBot.attributes_for(:liquidacao_001, valor: 9.99, empenho: empenho, status: :confirmado) )
		estorno_de_liquidacao = Contabilidade::EstornoDeLiquidacao.create(liquidacao: liquidacao, data_do_estorno: Date.today, justificativa: "...", usuario_id: usuario.id, status: :confirmado)
		expect(liquidacao.empenho.saldo).to eq 9.99
	end
end
