require 'rails_helper'

RSpec.describe Ppa::Eixo, type: :model do
	it{ is_expected.to belong_to :ppa }
	it{ is_expected.to have_many( :programas ).dependent(:restrict_with_exception) }

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

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

	context "exibe diretrizes com quebra de linha" do
		it "diretrizes_concatenadas" do
			eixo = FactoryBot.create( :eixo_sustentavel, :ppa_2014 )
			expect(eixo.diretrizes_concatenadas).to include("Adoção de práticas sustentáveis para a cidade\n\nDesenvolvimento econômico impulsionado pela atração de empreendimentos")
		end
	end

	context "exibe a quantidade de programas do eixo" do
		it "quantidade_de_programas" do
			programa = FactoryBot.create( :programa_escolar, :ppa_2014 )
			expect(programa.eixo.quantidade_de_programas).to equal(1)
		end
	end

	describe "#bloqueia_exclusao_caso_tenha_um_eixo" do
		context "quando tem somente um eixo" do
			it "retorna mensagem de bloqueio da exclusão" do
				eixo = FactoryBot.create( :eixo_sustentavel, :ppa_2014 )
				expect { eixo.destroy }.to raise_error('Não é possível excluir, pois é o único eixo do sistema')
			end
		end
	end

	describe ".recursos_eixo_por_ppa" do
		context "exibe nome do recurso e quantidade de valor da receita por ppa" do
			it 'retorna nome e quantidade' do
				eixo = FactoryBot.create( :eixo_sustentavel, :ppa_2014 )
				resultado_recursos_eixo_por_ppa = Ppa::Eixo.recursos_eixo_por_ppa eixo.ppa_id
				resultado = { nome: "Sustentável", quantidade: 0.0, :qtd_programas => 0 }
				expect(resultado_recursos_eixo_por_ppa).to include resultado
			end
		end
	end
end
