require 'rails_helper'

RSpec.describe Loa::UnidadeGestora, type: :model do

	it { is_expected.to belong_to(:orcamento).required }
	it { is_expected.to have_many :unidades_orcamentarias }
	it { is_expected.to have_many :gestores }

	[:orcamento_id, :nome, :codigo, :numero_da_lei_de_criacao, :data_de_cadastro, :status_do_orcamento].each do |atributo|
		it{ is_expected.to validate_presence_of atributo}
	end

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

	it { is_expected.to validate_length_of( :codigo ).is_at_most(2) }
	it { is_expected.to validate_length_of( :nome ).is_at_most(80) }

	describe '#codigo_e_nome' do
		it 'retorna "XX - NOME", onde XX é o código e NOME é o nome da unidade gestora' do
			unidade_gestora = Loa::UnidadeGestora.new(codigo: '87', nome: 'Intersol')
			expect(unidade_gestora.codigo_e_nome).to eq('87 - Intersol')
		end
	end

	describe "#sugestao_de_codigo" do
		context "quando não há programas cadastrados" do
			it "retorna 01" do
				unidade_gestora = Loa::UnidadeGestora.new( FactoryBot.attributes_for( :loa_gestora_seduc, :orcamento_2016, codigo: '' ) )

				expect(unidade_gestora.codigo).to eq '01'
			end
		end

		context "quando há programas cadastrados" do
			it "retorna o próximo código" do
				gestora_01 = FactoryBot.create( :loa_gestora_seduc, :orcamento_2016, codigo: '01' )
				gestora_02 = Loa::UnidadeGestora.new( FactoryBot.attributes_for( :loa_gestora_seduc, :orcamento_2016, nome: 'SEDUC', codigo: '' ) )

				expect(gestora_02.codigo).to eq '02'
			end
		end

		context "quando há lacunas na sequência dos códigos" do
			it "retorna a primeira lacuna" do
				gestora_01 = FactoryBot.create( :loa_gestora_seduc, :orcamento_2016, codigo: '01' )
				gestora_03 = FactoryBot.create( :loa_gestora_seduc, :orcamento_2016, nome: 'EDUC', codigo: '03' )
				gestora_05 = FactoryBot.create( :loa_gestora_seduc, :orcamento_2016, nome: 'EDUCA', codigo: '05' )

				gestora_02 = Loa::UnidadeGestora.new( FactoryBot.attributes_for( :loa_gestora_seduc, :orcamento_2016, codigo: '' ) )

				expect(gestora_02.codigo).to eq '02'
			end
		end
	end

end
