module TestHelper
	def sign_in_admin
		before(:each) do
			@request.env["devise.mapping"] = Devise.mappings[:usuario]
			admin = FactoryBot.create(:admin)
			sign_in admin
			allow_any_instance_of(Usuario).to receive(:visualiza?).and_return(true)
		end
	end

	def sign_in_cidadao
		before(:each) do
			@request.env["devise.mapping"] = Devise.mappings[:cidadao]
			cidadao = FactoryBot.create(:cidadao)
			sign_in cidadao
		end
	end

	def sign_in_usuario_comum
		before(:each) do
			@request.env["devise.mapping"] = Devise.mappings[:usuario]
			sign_in FactoryBot.create(:usuario_comum)
		end
	end

	def sign_in_secretario
		before(:each) do
			@request.env["devise.mapping"] = Devise.mappings[:usuario]
			usuario = FactoryBot.create(:usuario_comum, nivel_de_permissao_a_unidades: :unidades_selecionadas)
			unidade = Loa::UnidadeOrcamentaria.first || FactoryBot.create(:loa_hgf, :orcamento_2016)
			sign_in usuario
			usuario.unidades_orcamentarias_por_usuario.create(unidade_orcamentaria: unidade )
		end
	end

	def sign_in_usuario_sem_unidades
		before(:each) do
			@request.env["devise.mapping"] = Devise.mappings[:usuario]
			usuario = FactoryBot.create(:usuario_comum, nivel_de_permissao_a_unidades: :nenhuma_unidade)
			unidade = Loa::UnidadeOrcamentaria.first || FactoryBot.create(:loa_hgf, :orcamento_2016)
			sign_in usuario
		end
	end

	def set_ppa_id_na_sessao
		before do
			@ppa = Ppa::Ppa.find_by( prefeito: 'Roberto Cláudio', exercicio_inicial: 2014 ) || FactoryBot.create(:ppa_fortaleza_2014, ppa_participativo_ativo: false)
			@request.session[:contexto_id] = @ppa.id
			@request.session[:contexto_tipo] = @ppa.class.name
		end
	end

	def set_orcamento_na_sessao
		before do
			@orcamento = Orcamento.find_or_create_by!( FactoryBot.attributes_for(:orcamento_2016))
			@request.session[:contexto_id] = @orcamento.id
			@request.session[:contexto_tipo] = @orcamento.class.name
		end
	end

	def set_contabilidade_na_sessao
		before do
			@contabilidade = Orcamento.find_or_create_by!( FactoryBot.attributes_for(:orcamento_2016))
			@request.session[:contexto_id] = @contabilidade.id
			@request.session[:contexto_tipo] = 'Contabilidade'
			@request.session[:modulo] = 'contabilidade'
		end
	end

	def set_licitacao_na_sessao
		before do
			@orcamento = Orcamento.find_or_create_by!( FactoryBot.attributes_for(:orcamento_2016))
			@request.session[:contexto_id] = @orcamento.id
			@request.session[:contexto_tipo] = 'Licitacao'
			@request.session[:modulo] = 'licitacao'
		end
	end

	def set_administrativo_na_sessao
		before do
			@orcamento = Orcamento.find_or_create_by!( FactoryBot.attributes_for(:orcamento_2016))
			@request.session[:contexto_id] = @orcamento.id
			@request.session[:contexto_tipo] = 'Administrativo'
			@request.session[:modulo] = 'administrativo'
		end
	end

	def set_controladoria_na_sessao
		before do
			@orcamento = Orcamento.find_or_create_by!( FactoryBot.attributes_for(:orcamento_2016))
			@request.session[:contexto_id] = @orcamento.id
			@request.session[:contexto_tipo] = 'Controladoria'
			@request.session[:modulo] = 'controladoria'
		end
	end

	def set_financeiro_na_sessao 
		before do 
			@financeiro = Orcamento.find_or_create_by!( FactoryBot.attributes_for(:orcamento_2016))
			@request.session[:contexto_id] = @financeiro.id
			@request.session[:contexto_tipo] = 'Financeiro'
			@request.session[:modulo] = 'financeiro'
		end
	end

	def cria_tipos_de_despesa
		before do
			Base::TipoDeDespesa.find_or_create_by(FactoryBot.attributes_for :despesa_corrente)
			Base::TipoDeDespesa.find_or_create_by(FactoryBot.attributes_for :despesa_de_capital)
		end
	end

	def cria_grupos_de_conta
		before do
			FactoryBot.create :grupo_de_conta_patrimonial
			FactoryBot.create :grupo_de_conta_orcamentario
			FactoryBot.create :grupo_de_conta_controle
		end
	end

	def cria_configuracao_default
		before do
			FactoryBot.create :configuracao, permite_saldo_das_contas_do_plano_de_contas_vire: true, permite_lancamentos_no_sabado: true, permite_lancamentos_no_domingo: true, permite_lancamentos_em_feriados: true, permite_envio_de_email: false
		end
	end
end
