require 'rails_helper'

RSpec.describe Ppa::SubAreaTematica, type: :model do
	it{ is_expected.to belong_to :area_tematica }
	it{ is_expected.to belong_to :funcao }
	it{ is_expected.to have_many(:convenios)}
	it{ is_expected.to have_many(:valores_do_convenio).through(:convenios) }


	it{ is_expected.to have_many(:propostas).dependent(:restrict_with_exception) }

	[:area_tematica_id, :funcao_id, :nome].each do |atributo|
		it{ is_expected.to validate_presence_of atributo }
	end

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

	it "não pode ter uma função com ppa_id diferente do ppa_id da sua área temática" do
		sub_area = FactoryBot.build( :sub_area_tematica_educacao_infantil_2014 )
		sub_area.area_tematica.ppa_id += 1
		sub_area.funcao.ppa_id += 2
		sub_area.save
		expect( sub_area.errors[:funcao_id] ).to include "deve pertencer ao mesmo PPA da Área Temática"
	end

	describe 'convenios > valores do convênio' do
		before(:each) {

			FactoryBot.create( :despesa_corrente )
			FactoryBot.create( :despesa_de_capital )

			@sub_area = FactoryBot.create( :sub_area_tematica_educacao_infantil_2014 )
			@convenio = FactoryBot.create( :ppa_convenio, sub_area_tematica_id: @sub_area.id )

			atributos =  {
				'valor': 80,
				"valores_do_convenio_attributes" => {}
			}

			valores_do_convenio = []

			@convenio.valores_do_convenio.each_with_index do |valor_do_convenio, index|

				valores_do_convenio[index] =  {
					"id" => valor_do_convenio.id,
					"valor" => "10"
				}

			end

			atributos['valores_do_convenio_attributes'] = valores_do_convenio
			@convenio.update( atributos )
		}

		context '#total_geral_de_previsao_de_convenios_por_exercicio' do
			it 'retorna o total_geral_de_previsao_de_convenios_por_exercicio' do
				expect(@sub_area.total_geral_de_previsao_de_convenios_por_exercicio( 2020 )).to eq 20.0
			end
		end


		context '#total_previsao_de_convenios_correntes_por_exercicio' do
			it 'retorna o total_previsao_de_convenios_correntes_por_exercicio' do
				expect(@sub_area.total_previsao_de_convenios_correntes_por_exercicio( 2020 )).to eq 10.0
			end
		end

		context '#total_geral_de_previsao_de_convenios_por_exercicio' do
			it 'retorna o total_geral_de_previsao_de_convenios_por_exercicio' do
				expect(@sub_area.total_geral_de_previsao_de_convenios_por_exercicio( 2020 )).to eq 20.0
			end
		end


		context '#total_geral_de_previsao_de_convenios' do
			it 'retorna o total_geral_de_previsao_de_convenios' do
				expect(@sub_area.total_geral_de_previsao_de_convenios).to eq 80
			end
		end

	end
end
