require 'rails_helper'

RSpec.describe Loa::MetaFisica, type: :model do
	it { is_expected.to belong_to(:unidade_de_medida).required }
	it { is_expected.to belong_to(:subacao).required }

	it { is_expected.to have_many( :metas_fisicas_da_liquidacao ).dependent( :restrict_with_exception ).class_name( 'Contabilidade::MetaFisicaDaLiquidacao' ) }

	[:unidade_de_medida_id, :produto, :status_do_orcamento].each do |atributo|
		it { is_expected.to validate_presence_of atributo }
	end

	it{ is_expected.to validate_uniqueness_of(:produto).case_insensitive.scoped_to(:subacao_id).with_message("Meta já cadastrada nesta ação") }

	it { is_expected.to validate_length_of( :produto ).is_at_most(120) }
	it { is_expected.to validate_numericality_of( :quantidade ).is_greater_than(0) }

	describe '#case_sensitive_caracteres_acentuados' do
		it 'retorna mensagem de erro se já houver um registro com o mesmo produto independente de acentuação' do
			meta_fisica = FactoryBot.create( :meta_fisica )
			meta_fisica_com_erro = Loa::MetaFisica.new( FactoryBot.attributes_for( :meta_fisica, produto: 'équipAMENTO DE ti ADQuÍRiDo/MANTíDO', subacao_id: meta_fisica.subacao_id, unidade_de_medida_id: meta_fisica.unidade_de_medida_id ) )
			meta_fisica_com_erro.save

			expect(meta_fisica_com_erro.errors[:produto]).to include('já existe')
		end
	end

	describe 'importado_do_ppa?' do
		it 'foi importado do ppa' do
			meta_fisica = Loa::MetaFisica.new(ppa_meta_id: 1)
			expect(meta_fisica.importado_do_ppa?).to eq true
		end

		it 'não foi importado do ppa' do
			meta_fisica = Loa::MetaFisica.new(ppa_meta_id: nil)
			expect(meta_fisica.importado_do_ppa?).to eq false
		end
	end

	describe "#permitir cadastrar valores com casas decimais com base na configuração da unidade de medida" do
		it 'retorna erro' do
			meta_fisica = FactoryBot.create( :meta_fisica )
			meta_fisica.quantidade = 55.88
			meta_fisica.validate
			expect(meta_fisica.errors[:quantidade] ).to include "Para essa unidade de medida a quantidade deve ser inteira."
		end
	end
end
