require 'rails_helper'

RSpec.describe Contabilidade::MedicaoDaObra, type: :model do
	it{ is_expected.to belong_to(:obra).required(true) }
	it{ is_expected.to belong_to(:engenheiro_responsavel).class_name('Base::Pessoa') }
	it{ is_expected.to belong_to(:responsavel_da_empresa).class_name('Base::Pessoa') }
	it{ is_expected.to belong_to(:responsavel_da_prefeitura).class_name('Base::Pessoa') }

	it { is_expected.to have_many(:liquidacoes) }

	[:numero, :valor, :data_inicial, :data_final, :responsavel_da_empresa_id, :responsavel_da_prefeitura_id, :art].each do |atributo|
		it{ is_expected.to validate_presence_of atributo }
	end

	it{ is_expected.to validate_uniqueness_of( :numero ).scoped_to( :obra_id ) }
	it{ is_expected.to validate_numericality_of( :numero ).is_greater_than(0)}

	it{ is_expected.to validate_length_of( :art ).is_at_most(20) }

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

	context "valida valor da medição" do
		it "valor é maior que o saldo" do
			obra_0001 = FactoryBot.create(:obra_0001, codigo: '0001')
			medicao_da_obra_0001 = Contabilidade::MedicaoDaObra.create(valor: 100000000, obra: obra_0001)

			expect(medicao_da_obra_0001.errors[:valor]).to include("não pode ser maior que o saldo atual")
		end
	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: '0002')
			medicao_da_obra_0001 = FactoryBot.build(:medicao_da_obra_0001, obra_id: obra_0001.id, data_inicial: obra_0001.data_de_inicio - 1)
			medicao_da_obra_0001.validate

			expect(medicao_da_obra_0001.errors[:data_inicial]).to include("deve ser a partir do 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: '0003')
			medicao_da_obra_0001 = FactoryBot.build(:medicao_da_obra_0001, obra_id: obra_0001.id, data_inicial: obra_0001.data_de_inicio + 1)
			medicao_da_obra_0001.validate

			expect(medicao_da_obra_0001.errors[:data_inicial]).not_to include("deve ser a partir do inicio da obra #{obra_0001.data_de_inicio}")
		end
	end
end
