require 'rails_helper'

RSpec.describe Loa::AssessorDeContabilidadeResponsavel, type: :model do
	describe 'associations' do
		it { is_expected.to belong_to(:orgao).class_name('Loa::Orgao').required(true)}
		it { is_expected.to belong_to(:pessoa).class_name('Base::Pessoa').required(true) }
	end

	[:orgao_id, :pessoa_id, :data_de_inicio].each do |campo|
		it { is_expected.to validate_presence_of campo }
	end

	describe '#coincidencia_de_periodos_de_assessoria' do
		before do
			FactoryBot.create(:loa_assessor_de_contabilidade_responsavel)
		end
		context 'retorna erro' do
			it 'quando novo assessor tem período dentro de período já existente' do
				assessor = Loa::AssessorDeContabilidadeResponsavel.new(FactoryBot.attributes_for(:loa_assessor_de_contabilidade_responsavel, data_de_inicio: '2017-03-17', data_de_fim: '2017-04-15'))
				assessor.save
				expect(assessor.errors[:base]).to include("Esse período coincide com o de outro assessor")
			end
			it 'quando gestão inicia em período já existente mas termina fora' do
				assessor = Loa::AssessorDeContabilidadeResponsavel.new(FactoryBot.attributes_for(:loa_assessor_de_contabilidade_responsavel, data_de_inicio: '2017-03-17', data_de_fim: '2017-04-17'))
				assessor.save
				expect(assessor.errors[:base]).to include("Esse período coincide com o de outro assessor")
			end
			it 'quando gestão inicia fora de período já existente mas termina dentro' do
				assessor = Loa::AssessorDeContabilidadeResponsavel.new(FactoryBot.attributes_for(:loa_assessor_de_contabilidade_responsavel, data_de_inicio: '2017-03-15', data_de_fim: '2017-03-17'))
				assessor.save
				expect(assessor.errors[:base]).to include("Esse período coincide com o de outro assessor")
			end
		end
		context 'salva' do
			it 'quando novo período é antes de período já existente' do
				assessor = Loa::AssessorDeContabilidadeResponsavel.new(FactoryBot.attributes_for(:loa_assessor_de_contabilidade_responsavel, data_de_inicio: '2017-03-11', data_de_fim: '2017-03-15'))
				assessor.save
				expect(assessor).to be_persisted
			end
			it 'quando novo período é depois de período já existente' do
				assessor = Loa::AssessorDeContabilidadeResponsavel.new(FactoryBot.attributes_for(:loa_assessor_de_contabilidade_responsavel, data_de_inicio: '2017-04-17', data_de_fim: '2017-05-16'))
				assessor.save
				expect(assessor).to be_persisted
			end
		end
	end
end
