require 'rails_helper'

RSpec.describe Contabilidade::EngenheiroDaObra, type: :model do
	it{ is_expected.to belong_to(:obra).required }
	it{ is_expected.to belong_to(:pessoa).class_name('Base::Pessoa').required }

	[:obra_id, :pessoa_id, :data_de_inicio, :numero_do_crea, :tipo, :formacao].each do |atributo|
		it{ is_expected.to validate_presence_of atributo }
	end

	describe "validações condicionais" do
		context "quando o tipo do responsável é preposto" do
			it "deve validar a presença do campo cargo" do
				engenheiro = FactoryBot.build(:engenheiro_da_obra, tipo: "preposto", cargo: nil)
				expect(engenheiro.save).to be false
				expect(engenheiro.errors[:cargo]).to include("não pode ficar em branco")
			end
		end

		context "quando o tipo do responsável não é preposto" do
			it "não deve validar a presença do campo cargo" do
				engenheiro = FactoryBot.build(:engenheiro_da_obra, tipo: "fiscal", cargo: nil)
				expect(engenheiro.save).to be true
				expect(engenheiro.errors[:cargo]).to be_empty
			end
		end
	end

	it { is_expected.to allow_value('01/01/2016').for(:data_de_inicio) }
	it { is_expected.to_not allow_value('').for(:data_de_inicio) }
	it { is_expected.to_not allow_value('00/').for(:data_de_inicio) }

	it{ is_expected.to validate_length_of( :numero_do_crea ).is_at_most(25) }

	it "já é o responsável atual" do
		obra_0001 = FactoryBot.create(:obra_0001, codigo: '0001')
		engenheiro_01_da_obra = FactoryBot.create(:engenheiro_da_obra, obra_id: obra_0001.id)
		engenheiro_02_da_obra = FactoryBot.build(:engenheiro_da_obra, pessoa_id: engenheiro_01_da_obra.pessoa_id, obra_id: obra_0001.id, data_de_inicio: engenheiro_01_da_obra.data_de_inicio + 1)
		engenheiro_02_da_obra.validate

		expect(engenheiro_02_da_obra.errors[:pessoa_id]).to include("já é o responsável atual")
	end

	it "não é o responsável atual" do
		obra_0001 = FactoryBot.create(:obra_0001, codigo: '0001')
		engenheiro_01_da_obra = FactoryBot.create(:engenheiro_da_obra, obra_id: obra_0001.id)
		pessoa_2 = FactoryBot.create(:pessoa_juridica)
		engenheiro_02_da_obra = FactoryBot.create(:engenheiro_da_obra, obra_id: obra_0001.id, pessoa_id: pessoa_2.id, data_de_inicio: engenheiro_01_da_obra.data_de_inicio + 1)

		expect(engenheiro_02_da_obra.errors[:pessoa_id]).not_to include("já é o responsável atual")
	end

	context "data nao pode ser anterior a data de inicio da obra" do
		it "data anterior a data de inicio da obra" do
			obra_0001 = FactoryBot.create(:obra_0001, codigo: '0001')
			engenheiro_01_da_obra = FactoryBot.build(:engenheiro_da_obra, obra_id: obra_0001.id, data_de_inicio: obra_0001.data_de_inicio - 1)
			engenheiro_01_da_obra.validate

			expect(engenheiro_01_da_obra.errors[:data_de_inicio]).to include("deve ser após o inicio da obra #{obra_0001.data_de_inicio}")
		end

		it "data apos a data de inicio da obra" do
			obra_0001 = FactoryBot.create(:obra_0001, codigo: '0001')
			engenheiro_01_da_obra = FactoryBot.build(:engenheiro_da_obra, obra_id: obra_0001.id, data_de_inicio: obra_0001.data_de_inicio + 1)
			engenheiro_01_da_obra.validate

			expect(engenheiro_01_da_obra.errors[:data_de_inicio]).not_to include("deve ser após o inicio da obra #{obra_0001.data_de_inicio}")
		end
	end
end
