require 'rails_helper'

RSpec.describe Loa::TransferenciaDeRecurso, type: :model do
	it{ is_expected.to belong_to(:orcamento).required }
	it { is_expected.to belong_to(:unidade_orcamentaria_origem).with_foreign_key(:unidade_orcamentaria_origem_id).required }
	it { is_expected.to belong_to(:unidade_orcamentaria_destino).with_foreign_key(:unidade_orcamentaria_destino_id).required }
	it{ is_expected.to belong_to( :fonte_de_recursos ).class_name('Base::FonteDeRecursos').required }

	[:unidade_orcamentaria_origem_id, :unidade_orcamentaria_destino_id, :fonte_de_recursos_id, :valor, :orcamento_id].each do |atributo|
		it{ is_expected.to validate_presence_of atributo }
	end

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

	it { is_expected.to validate_uniqueness_of(:fonte_de_recursos_id).scoped_to([:unidade_orcamentaria_destino_id, :unidade_orcamentaria_origem_id]).with_message('já existe lançamento para esta fonte e Unidades') }

	describe 'destino_nao_pode_ser_igual_a_origem' do
		it 'os destinos são iguais' do
			transferencia_de_recurso = FactoryBot.build(:loa_transferencia_de_recurso)
			transferencia_de_recurso.unidade_orcamentaria_destino = transferencia_de_recurso.unidade_orcamentaria_origem
			transferencia_de_recurso.validate

			expect(transferencia_de_recurso.errors[:unidade_orcamentaria_destino_id]).to include "não pode ser igual a origem"
		end

		it 'os destinos são diferentes' do
			transferencia_de_recurso = FactoryBot.build(:loa_transferencia_de_recurso)
			transferencia_de_recurso.validate

			expect(transferencia_de_recurso.errors[:unidade_orcamentaria_destino_id]).to_not include "não pode ser igual a origem"
		end
	end

end
