require 'rails_helper'

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

	it{ is_expected.to belong_to( :elemento_de_despesa ).class_name( 'Base::ElementoDeDespesa' ) }
	it{ is_expected.to belong_to( :elemento_de_gasto ).class_name( "NaturezaDaDespesa::SubElementoDeDespesa" ) }

	it { is_expected.to have_many(:bloqueio_de_dotacoes).class_name("Contabilidade::BloqueioDeDotacao") }
	it { is_expected.to have_many(:empenhos).class_name("Contabilidade::Empenho") }
	it { is_expected.to have_many(:orcamentos_da_despesa_por_diaria).class_name("Contabilidade::OrcamentoDaDespesaPorDiaria") }
	it { is_expected.to have_many(:orcamentos_da_despesa_por_evento_contabil).class_name("Contabilidade::OrcamentoDaDespesaPorEventoContabil") }
	it { is_expected.to have_many(:orcamentos_da_despesa_do_apostilamento).class_name("Licitacao::OrcamentoDaDespesaDoApostilamento") }
	it { is_expected.to have_many(:orcamentos_da_despesa_do_aditivo).class_name("Licitacao::OrcamentoDaDespesaDoAditivo") }
	it { is_expected.to have_many(:orcamentos_da_despesa_do_contrato).class_name("Licitacao::OrcamentoDaDespesaDoContrato") }
	it { is_expected.to have_many(:orcamentos_da_despesa_por_projeto).class_name("Licitacao::OrcamentoDaDespesaPorProjeto") }
	it { is_expected.to have_many(:orcamentos_da_despesa_por_pedido).class_name("Licitacao::OrcamentoDaDespesaPorPedido") }

	it{ is_expected.to validate_presence_of :elemento_de_despesa_id }
	it{ is_expected.to validate_presence_of :codigo }
	it{ is_expected.to validate_presence_of :descricao }

	# it{ is_expected.to validate_uniqueness_of( :codigo ).scoped_to( :elemento_de_despesa_id ).case_insensitive }
	# it{ is_expected.to validate_uniqueness_of( :descricao ).scoped_to( :elemento_de_despesa_id ).case_insensitive }

	describe "#codigo_e_descricao" do
		it "retorna XX - DESCRIÇÃO, onde XX é o código e DESCRIÇÃO é a descrição" do
			sub_elemento_de_despesa = FactoryBot.create( :sub_elemento_de_despesa_outros_materiais_de_consumo )

			expect(sub_elemento_de_despesa.codigo_e_descricao).to eq "99 - Outros Materiais de Consumo"
		end
	end

	describe '#codigo_formatado' do
		it 'retorna codigo no formato x.x.xx.xx.xx' do
			sub_elemento_de_despesa = FactoryBot.create( :sub_elemento_de_despesa_outros_materiais_de_consumo )

			expect(sub_elemento_de_despesa.codigo_formatado).to eq "3.3.90.30.99"
		end
	end

end
