require 'rails_helper'

RSpec.describe Base::TipoDeOrcamento, type: :model do
	it { is_expected.to belong_to(:modulo).required }
	it { is_expected.to have_many :funcao }

	[:codigo, :descricao, :modulo_id, :modulo_type].each do |atributo|
		it{ is_expected.to validate_presence_of atributo }
	end

	[:codigo,:descricao].each do |atributo|
		it{ is_expected.to validate_uniqueness_of( atributo ).scoped_to(:modulo_id, :modulo_type)}
	end

	it { is_expected.to validate_length_of( :codigo ).is_equal_to(1) }
	it { is_expected.to validate_length_of( :descricao ).is_at_most(40) }

	it "não permite alterações no atributo modulo_id" do
		orcamento_fiscal = Base::TipoDeOrcamento.find_or_create_by!( FactoryBot.attributes_for( :orcamento_fiscal, :orcamento_2016 ) )
		orcamento_fiscal.modulo_id += 1
		orcamento_fiscal.save
		expect( orcamento_fiscal.errors[:modulo_id] ).to include "não pode ser alterado"
	end

	it "não permite alterações no atributo modulo_type" do
		orcamento_fiscal = Base::TipoDeOrcamento.find_or_create_by!( FactoryBot.attributes_for( :orcamento_fiscal, :orcamento_2016 ) )
		orcamento_fiscal.modulo_type = 'Ppa::Ppa'
		orcamento_fiscal.save
		expect( orcamento_fiscal.errors[:modulo_type] ).to include "não pode ser alterado"
	end

  describe "#codigo_e_descricao" do
    it "retorna X - DESCRIÇÃO, onde X é o código e DESCRIÇÃO é a descrição" do
      tipo_de_orcamento = Base::TipoDeOrcamento.new(codigo: 'F', descricao: 'Orçamento Fiscal')
      expect(tipo_de_orcamento.codigo_e_descricao).to eq "F - Orçamento Fiscal"
    end
  end
end
