require 'rails_helper'

RSpec.describe Licitacao::Comissao, type: :model do
	it { is_expected.to belong_to(:unidade_gestora).class_name('Loa::UnidadeGestora') }
	it { is_expected.to have_many(:membros_da_comissao).dependent(:destroy) }
	it { is_expected.to have_many(:projetos).class_name('Licitacao::Projeto') }

	it { is_expected.to validate_length_of(:numero_da_portaria).is_at_most(15) }
	it { is_expected.to validate_length_of(:numero_da_portaria_de_extincao).is_at_most(15) }
	it { is_expected.to validate_length_of(:nome).is_at_least(3) }

	[:unidade_gestora_id, :tipo_de_comissao, :numero_da_portaria, :nome].each do |atributo|
		it { is_expected.to validate_presence_of atributo }
	end

	it 'atribui_numero' do
		comissao = FactoryBot.create :licitacao_comissao

		expect(comissao.numero).to eq '01'
	end

	describe '#nome_da_unidade_e_do_presidente' do
		it 'retorna "XX - NOME", onde XX é o nome da unidade e NOME é o nome do membro presidente' do
			comissao = FactoryBot.create :licitacao_comissao
			FactoryBot.create :licitacao_membro_da_comissao, comissao_id: comissao.id, tipo: "presidente"
			expect(comissao.nome_da_unidade_e_do_presidente).to eq("Hospital geral de fortaleza - Antonio de Sousa")
		end
	end

	describe '#nome_tipo_e_unidade' do
		it 'retorna "Comissão #{tipo_de_comissao} do(a) #{unidade_gestora.try(:nome)}' do
			comissao = FactoryBot.create :licitacao_comissao
			expect(comissao.nome_tipo_e_unidade).to eq("teste Permanente do(a) Hospital geral de fortaleza")
		end
	end

	describe '#numero_da_portaria_e_nome_da_unidade' do
		it 'retorna "XXXX - NOME", onde XXXX é o número da portaria e NOME é o nome da unidade gestora' do
			comissao = FactoryBot.create :licitacao_comissao, numero_da_portaria: "677767"
			expect(comissao.numero_da_portaria_e_nome_da_unidade).to eq("677767 - Hospital geral de fortaleza")
		end
	end

	describe 'extinta?' do
		it 'está extinta' do
			comissao = FactoryBot.create(:licitacao_comissao, data_da_extincao: Date.today, numero_da_portaria_de_extincao: "1234")

			expect(comissao.extinta?).to be_truthy
		end

		it 'não está extinta' do
			comissao = FactoryBot.create :licitacao_comissao

			expect(comissao.extinta?).to be_falsy
		end
	end

	describe '#possui_presidente?' do
		context 'quando a comissão possui um presidente' do
			it 'retorna true' do
				comissao = FactoryBot.create :licitacao_comissao
				FactoryBot.create :licitacao_membro_da_comissao, comissao_id: comissao.id
				expect(comissao.possui_presidente?).to be_truthy
			end
		end
		context 'quando a comissão não possui um presidente' do
			it 'retorna false' do
				comissao = FactoryBot.create :licitacao_comissao
				FactoryBot.create :licitacao_membro_da_comissao, comissao_id: comissao.id, tipo: "membro_comum"
				expect(comissao.possui_presidente?).to be_falsy
			end
		end
	end

	it 'retorna o #nome_do_presidente' do
		comissao = FactoryBot.create :licitacao_comissao
		FactoryBot.create :licitacao_membro_da_comissao, comissao_id: comissao.id

		expect(comissao.nome_do_presidente).to eq "Antonio de Sousa"
	end
end
