require 'rails_helper'

RSpec.describe Obra::EmpenhoDaMedicaoDaObra, type: :model do

  it{ is_expected.to belong_to(:medicao_da_obra).class_name("Contabilidade::MedicaoDaObra") }
  it{ is_expected.to belong_to(:empenho).class_name("Contabilidade::Empenho") }

  describe "valida_se_valor_eh_maior_que_o_disponivel_no_empenho" do
    context "quando é válido" do
        it "Quando não tem empenho" do
          medicao_da_obra = FactoryBot.build(:empenho_da_medicao_da_obra, empenho_id: nil)
          medicao_da_obra.validate

          expect(medicao_da_obra.errors[:valor]).to_not include("Valor não pode ser maior que o disponível no empenho")
        end
        it "Quando não tem valor" do
          medicao_da_obra = FactoryBot.build(:empenho_da_medicao_da_obra, valor: nil)
          medicao_da_obra.validate

          expect(medicao_da_obra.errors[:valor]).to_not include("Valor não pode ser maior que o disponível no empenho")
        end

        it "Quando tem empenho e valor é menor ou igual ao saldo no empenho" do
          medicao_da_obra = FactoryBot.build(:empenho_da_medicao_da_obra, valor: 124)
          medicao_da_obra.empenho.update_attribute(:descriminacao_obrigatoria_de_itens, false)
          medicao_da_obra.validate

          expect(medicao_da_obra.errors[:valor]).to_not include("Valor não pode ser maior que o disponível no empenho")
        end
    end
    context "quando é inválido" do
      it "Quando o saldo é maior que o disponivel no empenho" do
        medicao_da_obra = FactoryBot.build(:empenho_da_medicao_da_obra, valor: 150)
        medicao_da_obra.empenho.update_attribute(:descriminacao_obrigatoria_de_itens, false)
        medicao_da_obra.empenho.update_attribute(:valor, 1)
        medicao_da_obra.validate

        expect(medicao_da_obra.errors[:valor]).to include("Valor não pode ser maior que o disponível no empenho")
      end 
    end
  end

end
