require 'rails_helper'

RSpec.describe Licitacao::MembroDaComissao, type: :model do
  it{ is_expected.to belong_to(:comissao).class_name( 'Licitacao::Comissao' ) }
	it{ is_expected.to belong_to(:agente_publico_municipal).class_name( 'Base::AgentePublicoMunicipal' ) }

	it { is_expected.to have_many(:projetos).through(:comissao) }

  it{ is_expected.to validate_presence_of :comissao_id }
  it{ is_expected.to validate_presence_of :agente_publico_municipal_id }
  it{ is_expected.to validate_presence_of :tipo }
  it{ is_expected.to validate_presence_of :data_de_admissao }

  it{ is_expected.to validate_uniqueness_of( :agente_publico_municipal_id ).scoped_to( :comissao_id  ) }

	it 'commisao_so_pode_ter_um_presidente' do
		comissao = FactoryBot.create(:licitacao_comissao, data_da_portaria: "01/01/2016")
		pessoa = FactoryBot.create(:pessoa_fisica, nome: Faker::Name.name )
		FactoryBot.create(:licitacao_membro_da_comissao, comissao: comissao, tipo: :presidente,
			agente_publico_municipal: FactoryBot.create(:agente_publico, pessoa_id: pessoa.id)
		)

		outra_pessoa = FactoryBot.create(:pessoa_fisica, nome: Faker::Name.name )
		membro_da_comissao = FactoryBot.build(:licitacao_membro_da_comissao, comissao: comissao, tipo: :presidente,
			agente_publico_municipal: FactoryBot.create(:agente_publico, pessoa_id: outra_pessoa.id)
		)
		membro_da_comissao.validate

		expect(membro_da_comissao.errors[:tipo]).to include "Já possuí presidente cadastrado"
	end

  describe 'data_de_admissao_deve_ser_posterior_data_de_criacao_da_comissao' do
    context 'quando a data e a comissão é informada' do
    	it 'data_de_admissao_deve_ser_posterior_data_de_criacao_da_comissao' do
    		comissao = FactoryBot.create(:licitacao_comissao, data_da_portaria: "01/01/2016")
    		membro_da_comissao = FactoryBot.build(:licitacao_membro_da_comissao, comissao_id: comissao.id, data_de_admissao: "01/01/2015".to_date)
    		membro_da_comissao.validate

    		expect(membro_da_comissao.errors[:data_de_admissao]).to include "Deve ser posterior a \"01/01/2016\""
    	end
    end

    context 'quando a data e a comissão é informada' do
    	it 'data_de_admissao_deve_ser_posterior_data_de_criacao_da_comissao' do
    		comissao = FactoryBot.create(:licitacao_comissao, data_da_portaria: "01/01/2016")
    		membro_da_comissao = FactoryBot.build(:licitacao_membro_da_comissao, comissao_id: comissao.id, data_de_admissao: "02/01/2016".to_date)
    		membro_da_comissao.validate

    		expect(membro_da_comissao.errors[:data_de_admissao]).to_not include "Deve ser posterior a \"01/01/2016\""
    	end
    end

    context 'quando a data é informada mas não há comissão' do
      it 'data_de_admissao_deve_ser_posterior_data_de_criacao_da_comissao' do
        comissao = FactoryBot.create(:licitacao_comissao, data_da_portaria: "01/01/2016")
        membro_da_comissao = FactoryBot.build(:licitacao_membro_da_comissao, comissao_id: nil, data_de_admissao: "01/01/2015".to_date)
        membro_da_comissao.validate

        expect(membro_da_comissao.errors[:data_de_admissao]).to_not include "Deve ser posterior a \"01/01/2016\""
      end
    end

    context 'quando a data não é informada mas há comissão' do
      it 'data_de_admissao_deve_ser_posterior_data_de_criacao_da_comissao' do
        comissao = FactoryBot.create(:licitacao_comissao, data_da_portaria: "01/01/2016")
        membro_da_comissao = FactoryBot.build(:licitacao_membro_da_comissao, comissao_id: comissao.id, data_de_admissao: nil)
        membro_da_comissao.validate

        expect(membro_da_comissao.errors[:data_de_admissao]).to_not include "Deve ser posterior a \"01/01/2016\""
      end
    end
  end
end
