require 'rails_helper'

RSpec.describe Ppa::Indicador, type: :model do
	it{ is_expected.to belong_to :programa }
	it{ is_expected.to belong_to :unidade_de_medida }

	[:nome, :ano_de_referencia, :unidade_de_medida_id, :programa_id].each do |atributo|
		it { is_expected.to validate_presence_of atributo }
	end

	it{ is_expected.to validate_uniqueness_of(:nome).scoped_to(:programa_id) }
	it{ is_expected.to validate_numericality_of(:indice_de_referencia).is_greater_than(0).with_message("deve ser maior que 0") }

	describe "#programa_de_gestao_nao_tem_indicadores" do
		it "não salvar o indicador" do
			tipo_de_programa_id = Ppa::TipoDePrograma.find_or_create_by!( FactoryBot.attributes_for(:programas_de_gestao_e_manutencao) ).id
			programa_de_gestao = Ppa::Programa.find_or_create_by!(FactoryBot.attributes_for(:programa_saude, :ppa_2014, tipo_de_programa_id: tipo_de_programa_id))
			indicador_de_gestao = FactoryBot.build(:indicador_escolas_construidas, :ppa_2014, programa_id: programa_de_gestao.id)
			indicador_de_gestao.validate

			expect(indicador_de_gestao.errors[:programa_id]).to include "Programas de gestão não possuem indicadores"
 		end
 		it "salvar o indicador" do
			tipo_de_programa_id = Ppa::TipoDePrograma.find_or_create_by!( FactoryBot.attributes_for(:programas_tematicos) ).id
			programa_tematico = Ppa::Programa.find_or_create_by!(FactoryBot.attributes_for(:programa_escolar, :ppa_2014, tipo_de_programa_id: tipo_de_programa_id))
			programa_tematico.save
			indicador_tematico = FactoryBot.build(:indicador_escolas_construidas, :ppa_2014, programa_id: programa_tematico.id)
			indicador_tematico.validate

			expect(indicador_tematico.errors[:programa_id]).to_not include "Programas de gestão não possuem indicadores"
 		end
	end


	describe "ano_de_referencia" do
		it "exibir mensagem de erro se for menor que o ano inicial do ppa" do
			indicador_tematico = FactoryBot.build(:indicador_escolas_construidas, :ppa_2014, ano_de_referencia: 2015)
			indicador_tematico.validate

			expect(indicador_tematico.errors[:ano_de_referencia]).to include('deve ser menor que o ano inicial do PPA')
		end

		it "não exibir mensagem de erro se for menor que o ano inicial do ppa" do
			indicador_tematico = FactoryBot.build(:indicador_escolas_construidas, :ppa_2014, ano_de_referencia: 2013)
			indicador_tematico.validate

			expect(indicador_tematico.errors[:ano_de_referencia]).to_not include('deve ser menor que o ano inicial do PPA')
		end
	end

	describe "#permitir cadastrar valores com casas decimais com base na configuração da unidade de medida" do
		it 'retorna erro' do
			indicador = FactoryBot.build(:indicador_escolas_construidas, :ppa_2014, ano_de_referencia: 2015)
			indicador.indice_de_referencia = 55.88
			indicador.validate
			expect(indicador.errors[:indice_de_referencia] ).to include "Para essa unidade de medida o indice de referência deve ser inteiro."
		end
	end
end
