require 'rails_helper'

RSpec.describe Projecao::CalculoPorExercicio, type: :model do
	it { is_expected.to belong_to :receita }
	it { is_expected.to belong_to :receita_do_calculo_de_projecao }

	it { is_expected.to validate_presence_of :exercicio }
	it { is_expected.to validate_presence_of :tipo }
	it { is_expected.to validate_presence_of :total }

	it { is_expected.to validate_numericality_of(:exercicio).is_greater_than(0) }
	it { is_expected.to validate_numericality_of(:exercicio).is_less_than_or_equal_to(9999) }

	describe '#validate_presence_of, #validate_uniqueness_of, #validate_absence_of' do
		context 'quando o receita_do_calculo_de_projecao_id não está presente, valida a presença da receita_id e a unicidade do exercicio no escopo de receita_id' do
			subject(:calculo_por_exercicio_receita) {
				FactoryBot.create(:ppa_fortaleza_2014)
				FactoryBot.create(:calculo_do_exercicio_para_ppa_criado, :receita)
			}

			it { is_expected.to validate_presence_of 	:receita_id }
			it { is_expected.to validate_absence_of 	:receita_do_calculo_de_projecao_id }
			it { is_expected.to validate_uniqueness_of( :exercicio ).scoped_to( :receita_id ) }
		end

		context 'quando o receita_id não está presente, valida a presença da receita_do_calculo_de_projecao_id no escopo de receita_do_calculo_de_projecao_id' do

			subject(:calculo_por_exercicio_receita) {
				FactoryBot.create(:calculo_do_exercicio_de_2016, :receita, importado: true)
				FactoryBot.create(:calculo_do_exercicio_de_2016, :receita_do_calculo_de_projecao, exercicio: 2017)
			}

			it { is_expected.to validate_presence_of :receita_do_calculo_de_projecao_id }
			it { is_expected.to validate_absence_of  :receita_id }

		end

		context 'quando o receita_id não está presente, valida a unicidade de receita_do_calculo_de_projecao_id' do
			it "exercicio deve ser único" do
				FactoryBot.create(:calculo_do_exercicio_de_2016, :receita, importado: true)
				FactoryBot.create(:calculo_do_exercicio_de_2016, :receita_do_calculo_de_projecao, exercicio: 2017)
				novo_calculo_projetado = FactoryBot.build(:calculo_do_exercicio_de_2016, :receita_do_calculo_de_projecao, exercicio: 2017)

				novo_calculo_projetado.validate
				expect( novo_calculo_projetado.errors[:exercicio] ).to include 'já está em uso'
			end
		end
	end

	# describe "#impedir_alteracao_para_valor_importado" do
	# 	context "quando calculo da receita tiver importada = true" do
	# 		it "retorna mensagem de erro" do
	# 			calculo = FactoryBot.build(:calculo_do_exercicio_de_2016, :receita)
	# 			calculo.importado = true
	# 			calculo.save
	#
	# 			calculo.update(exercicio: 2100)
	#
	# 			expect( calculo.errors[:base] ).to include "não é possível alterar um cálculo importado"
	# 		end
	# 	end
	# end
end
