require 'rails_helper'

RSpec.describe Contabilidade::SuplementacaoDoEmpenho, type: :model do

  it{ is_expected.to belong_to :empenho}

	it{ is_expected.to validate_presence_of :empenho_id}
	it{ is_expected.to validate_presence_of :data_da_suplementacao}
	it{ is_expected.to validate_presence_of :valor}
	it{ is_expected.to validate_presence_of :historico}

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

	it{ is_expected.to validate_numericality_of(:valor).is_greater_than(0)}

	it "atualiza 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) )
		suplementacao_do_empenho = Contabilidade::SuplementacaoDoEmpenho.create(empenho: empenho, valor: 10.00, data_da_suplementacao: empenho.data_do_empenho + 1, historico: "...")
		expect(suplementacao_do_empenho.empenho.saldo.round(2)).to eq 19.99
	end

	context "data nao pode ser anterior a data do empenho" do
		it "data anterior a data do empenho" do
			empenho = Contabilidade::Empenho.find_or_create_by!( FactoryBot.attributes_for(:empenho_22090001, status: :confirmado, descriminacao_obrigatoria_de_itens: false) )
			suplementacao_do_empenho = Contabilidade::SuplementacaoDoEmpenho.create(empenho: empenho, valor: 10.00, data_da_suplementacao: empenho.data_do_empenho - 1, historico: "...")
			suplementacao_do_empenho.validate

			expect(suplementacao_do_empenho.errors[:data_da_suplementacao]).to include("não pode ser anterior a data do empenho #{empenho.data_do_empenho}")
		end

		it "data apos a data do empenho" do
			empenho = Contabilidade::Empenho.find_or_create_by!( FactoryBot.attributes_for(:empenho_22090001, status: :confirmado, descriminacao_obrigatoria_de_itens: false) )
			suplementacao_do_empenho = Contabilidade::SuplementacaoDoEmpenho.create(empenho: empenho, valor: 10.00, data_da_suplementacao: empenho.data_do_empenho + 1, historico: "...")
			suplementacao_do_empenho.validate

			expect(suplementacao_do_empenho.errors[:data_da_suplementacao]).not_to include("não pode ser anterior a data do empenho #{empenho.data_do_empenho}")
		end
	end
end
