require 'rails_helper'

RSpec.describe Loa::OrcamentoTematico, type: :model do
	it{ is_expected.to validate_presence_of :descricao}
	it{ is_expected.to have_many(:temas_do_orcamento).dependent(:restrict_with_exception) }
	it{ is_expected.to have_many(:temas_da_subacao).dependent(:restrict_with_exception) }

	describe '#orcamento_tematico_padrao_nao_pode_ser_excluido' do
		context 'ao excluir orçamento temático' do
			context 'quando é padrão' do
				it 'Não deixa excluir, retorna erro' do
					orcamento_tematico = Loa::OrcamentoTematico.new( FactoryBot.attributes_for( :orcamento_tematico, padrao: true ) )
					expect { orcamento_tematico.destroy }.to raise_error('não é possível remover orçamento tématico padrão do sistema')
				end
			end
		end

		context 'quando não é padrão' do
			it 'apaga objeto' do
				orcamento_tematico = Loa::OrcamentoTematico.new( FactoryBot.attributes_for( :orcamento_tematico, padrao: false ) )
				orcamento_tematico.destroy

				expect {orcamento_tematico.reload }.to raise_error(ActiveRecord::RecordNotFound)
			end
		end
	end

	describe '#orcamento_tematico_padrao_nao_pode_ser_editado' do
		context 'ao editar orçamento temático' do
			context 'quando é padrão' do
				it 'Não salva, retorna erro' do
					orcamento_tematico = FactoryBot.create( :orcamento_tematico, padrao: true )

					expect { orcamento_tematico.update(descricao: 'crian') }.to raise_error('não é possível editar orçamento tématico padrão do sistema')
				end
			end
			context 'quando não é padrão' do
				it 'salva' do
					orcamento_tematico = Loa::OrcamentoTematico.new( FactoryBot.attributes_for( :orcamento_tematico, padrao: false, descricao: "OCA" ) )
					orcamento_tematico.update(descricao: 'IDOSO')

					expect(orcamento_tematico.reload.descricao).to eq "IDOSO"
				end
			end
		end
	end
end
