require 'rails_helper'

RSpec.describe Ppa::Funcao, type: :model do
	cria_tipos_de_despesa

	it{ is_expected.to belong_to :ppa }

	it{ is_expected.to have_many(:sub_funcoes).dependent(:destroy) }
	it{ is_expected.to have_many(:sub_areas_tematicas).dependent(:restrict_with_exception) }

	it{ is_expected.to validate_presence_of :nome }
	it{ is_expected.to validate_presence_of :ppa_id }
	it{ is_expected.to validate_presence_of :codigo }

	it{ is_expected.to validate_uniqueness_of(:codigo).scoped_to(:ppa_id).case_insensitive }
	it{ is_expected.to validate_uniqueness_of(:nome).scoped_to(:ppa_id) }

	it{ is_expected.to have_many(:iniciativas).dependent(:restrict_with_exception) }

	it "não permite alterações no atributo ppa_id" do
		funcao = FactoryBot.create( :funcao_educacao, :ppa_2014 )
		funcao.ppa_id = funcao.ppa_id + 1
		funcao.save
		expect( funcao.errors[:ppa_id] ).to include "não pode ser alterado"
	end

	describe "#codigo_e_nome" do
		it "retorna 'XX - NOME', onde XX é o código e NOME é o nome da função" do
			funcao = Ppa::Funcao.new( codigo: '01', nome: 'Legislativa' )
			expect( funcao.codigo_e_nome ).to eq '01 - Legislativa'
		end
	end

	it 'valor_total_fixado_da_despesa_por_unidade' do
		orcamento_saude = FactoryBot.create( :orcamento_da_despesa_saude )
		subacao = orcamento_saude.elemento_de_despesa_por_subacao.subacao
		subacao.fixacao_da_despesa = orcamento_saude.valor
		 subacao.save
		expect(orcamento_saude.elemento_de_despesa_por_subacao.subacao.funcao.valor_total_fixado_da_despesa_por_unidade(orcamento_saude.elemento_de_despesa_por_subacao.subacao.unidade_orcamentaria)).to eq 12345.67
	end
end
